Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Скрипт, который бы удалял во всех файлах из папки, кроме самого vbs скрипта, (http://forum.oszone.net/showthread.php?t=295069)

n5320 06-02-2015 12:00 2467278

Скрипт, который бы удалял во всех файлах из папки, кроме самого vbs скрипта,
 
Прошу помощи в написании скрипта (желательно на VBS), который бы удалял во всех файлах из папки, кроме самого vbs скрипта, первые 200 байт к примеру.

Iska 06-02-2015 12:57 2467305

n5320, зачем?

n5320 06-02-2015 13:35 2467326

Склеены 2 файла, вначале находится первый и вешает к примеру 200 к/байт этот кусок и надо удалить.Чтобы файл восстановился.Есть прога Piece copy но она не удобная.

Iska 06-02-2015 13:39 2467329

n5320, упакуйте пару-тройку разных образцов таких «склеенных» файлов в архив и выложите на RGhost. Ссылку — сюда.

n5320 06-02-2015 13:58 2467345

http://rghost.ru/8RHtwmP9d

По приведенной ссылке в архиве два файла с каждого в начале надо вырезать 9255 байт и получиться многотомный рабочий 7z архив который можно открыть в winrare например

Foreigner 06-02-2015 15:36 2467406

n5320, Outpost 37

PowerShell:
Код:


gci file.7z.* | % {

    [byte[]] $bytes = get-content $_ -encoding byte
    set-content $bytes[9255..($bytes.count-1)] -encoding byte -path $_

}


n5320 06-02-2015 15:56 2467423

Скрипт точно будет выполнятся для папки из которой он запускается?

Foreigner 06-02-2015 16:09 2467435

Цитата:

Цитата n5320
Скрипт точно будет выполнятся для папки из которой он запускается? »

Да. Для файлов соответствующих маске "file.7z.*"

n5320 06-02-2015 16:10 2467437

Спасибо вам все работает

n5320 06-02-2015 16:26 2467443

Забыл сразу предупредить что размер файлов будет равет 100 мг , при тестировании таких файлов комп зависает.
Также "file" может быть любое значение. Как изменить маску чтобы применялось для файлов в имени которого присуствует ".7z"

Iska 06-02-2015 16:49 2467450

n5320, пробуйте:
Скрытый текст
Код:

Option Explicit

Const adTypeBinary = 1
Const adModeWrite = 2
Const adModeRead = 1
Const adSaveCreateOverWrite = 2
Const adReadAll = -1

Const intFileStartPos = 9255


Dim strSourceFolder

Dim objFSO
Dim objFile

Dim objStream4Read
Dim objStream4Write


If WScript.Arguments.Count = 1 Then
        strSourceFolder = WScript.Arguments.Item(0)
       
        Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
       
        If objFSO.FolderExists(strSourceFolder) Then
                For Each objFile In objFSO.GetFolder(strSourceFolder).Files
                        If Not StrComp(objFile.Name, WScript.ScriptName, vbTextCompare) = 0 Then
                                Set objStream4Read  = WScript.CreateObject("ADODB.Stream")
                                Set objStream4Write = WScript.CreateObject("ADODB.Stream")
                               
                                objStream4Read.Type = adTypeBinary
                                objStream4Write.Type = adTypeBinary
                               
                                objStream4Read.Open
                                objStream4Write.Open
                               
                                objStream4Read.LoadFromFile objFile.Path
                                objStream4Read.Position = intFileStartPos
                                objStream4Write.Write(objStream4Read.Read(adReadAll))
                                objStream4Write.SaveToFile objFile.Path, adSaveCreateOverWrite
                               
                                objStream4Read.Close
                                objStream4Write.Close
                               
                                Set objStream4Write = Nothing
                                Set objStream4Read  = Nothing
                        End If
                Next
        Else
                WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
                WScript.Quit 1
        End If
       
        Set objFSO = Nothing
Else
        WScript.Echo "Usage: " & WScript.ScriptName & " <Source folder>"
        WScript.Quit 1
End If

WScript.Quit 0


Оригиналы файлов не сохраняются. Можно просто перетащить папку на скрипт в Проводнике.

Цитата:

Цитата n5320
размер файлов будет равет 100 мг »

Держите не менее 200 Mb оперативной памяти свободной.

Цитата:

Цитата n5320
при тестировании таких файлов комп зависает. »

Антивирус проверяет доступ?

Foreigner 06-02-2015 16:52 2467454

n5320, Тогда попробуйте такой вариант:
Код:

gci *.7z.* | % {

    $bytes = [System.IO.File]::ReadAllBytes( $_ )
    [System.IO.File]::WriteAllBytes( $_, $bytes[9255..($bytes.count-1)])

}


Iska 06-02-2015 17:03 2467463

Foreigner, а если сместиться на позицию 9255 в исходном файле, а затем читать из него остаток — будет быстрее или медленнее (придётся через FileStream работать, как я понимаю)?

n5320 06-02-2015 17:22 2467478

Foreigner увы ваш скрипт жрет все 2 г памяти и выполнение не останавливается.
Iska, Ваш вариант работает очень быстро, нагрузка не заметно вообще, спасибо.
Можете кое что еще поправить в скрипте? Мне надо в начале или в конце выполнения vbs скрипта у всех файлов в папке также удалить в имени (расширении) ".jpg".
Пример Top_gir.7z.001.jpg должно получиться Top_gir.7z.001

Iska 06-02-2015 17:35 2467486

Цитата:

Цитата n5320
Iska, Ваш вариант работает очень быстро, нагрузка не заметно вообще… »

Не верю. Нагрузка должна быть. Скрипт единовременно потребляет памяти никак не меньше удвоенного объёма файла.

Цитата:

Цитата n5320
Можете кое что еще поправить в скрипте? Мне надо в начале или в конце выполнения vbs скрипта у всех файлов в папке также удалить в имени (расширении) ".jpg".
Пример Top_gir.7z.001.jpg должно получиться Top_gir.7z.001 »

Стеганографируете помаленьку?

Пробуйте:
Скрытый текст
Код:

Option Explicit

Const adTypeBinary = 1
Const adModeWrite = 2
Const adModeRead = 1
Const adSaveCreateOverWrite = 2
Const adReadAll = -1

Const intFileStartPos = 9255


Dim strSourceFolder

Dim objFSO
Dim objFile

Dim objStream4Read
Dim objStream4Write


If WScript.Arguments.Count = 1 Then
        strSourceFolder = WScript.Arguments.Item(0)
       
        Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
       
        If objFSO.FolderExists(strSourceFolder) Then
                For Each objFile In objFSO.GetFolder(strSourceFolder).Files
                        If Not StrComp(objFile.Name, WScript.ScriptName, vbTextCompare) = 0 Then
                                Set objStream4Read  = WScript.CreateObject("ADODB.Stream")
                                Set objStream4Write = WScript.CreateObject("ADODB.Stream")
                               
                                objStream4Read.Type = adTypeBinary
                                objStream4Write.Type = adTypeBinary
                               
                                objStream4Read.Open
                                objStream4Write.Open
                               
                                objStream4Read.LoadFromFile objFile.Path
                                objStream4Read.Position = intFileStartPos
                                objStream4Write.Write(objStream4Read.Read(adReadAll))
                                objStream4Write.SaveToFile objFile.Path, adSaveCreateOverWrite
                               
                                objStream4Read.Close
                                objStream4Write.Close
                               
                                Set objStream4Write = Nothing
                                Set objStream4Read  = Nothing
                        End If
                Next
               
                For Each objFile In objFSO.GetFolder(strSourceFolder).Files
                        If StrComp(objFSO.GetExtensionName(objFile.Name), "jpg", vbTextCompare) = 0 Then
                                objFile.Name = objFSO.GetBaseName(objFile.Name)
                        End If
                Next
        Else
                WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
                WScript.Quit 1
        End If
       
        Set objFSO = Nothing
Else
        WScript.Echo "Usage: " & WScript.ScriptName & " <Source folder>"
        WScript.Quit 1
End If

WScript.Quit 0


n5320 06-02-2015 17:43 2467490

Iska, Все работает спасибо вам и форуму


Время: 01:31.

Время: 01:31.
© OSzone.net 2001-