PDA

Показать полную графическую версию : [решено] Скрипт, который бы удалял во всех файлах из папки, кроме самого vbs скрипта,


n5320
06-02-2015, 12:00
Прошу помощи в написании скрипта (желательно на VBS), который бы удалял во всех файлах из папки, кроме самого vbs скрипта, первые 200 байт к примеру.

Iska
06-02-2015, 12:57
n5320, зачем?

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

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

n5320
06-02-2015, 13:58
http://rghost.ru/8RHtwmP9d

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

Foreigner
06-02-2015, 15:36
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
Скрипт точно будет выполнятся для папки из которой он запускается?

Foreigner
06-02-2015, 16:09
Скрипт точно будет выполнятся для папки из которой он запускается? »
Да. Для файлов соответствующих маске "file.7z.*"

n5320
06-02-2015, 16:10
Спасибо вам все работает

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

Iska
06-02-2015, 16:49
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

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

размер файлов будет равет 100 мг »
Держите не менее 200 Mb оперативной памяти свободной.

при тестировании таких файлов комп зависает. »
Антивирус проверяет доступ?

Foreigner
06-02-2015, 16:52
n5320, Тогда попробуйте такой вариант:

gci *.7z.* | % {

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

}

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

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

Iska
06-02-2015, 17:35
Iska, Ваш вариант работает очень быстро, нагрузка не заметно вообще… »
Не верю. Нагрузка должна быть. Скрипт единовременно потребляет памяти никак не меньше удвоенного объёма файла.

Можете кое что еще поправить в скрипте? Мне надо в начале или в конце выполнения 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
Iska, Все работает спасибо вам и форуму




© OSzone.net 2001-2012