Скрипт, который бы удалял во всех файлах из папки, кроме самого vbs скрипта,
Прошу помощи в написании скрипта (желательно на VBS), который бы удалял во всех файлах из папки, кроме самого vbs скрипта, первые 200 байт к примеру.
|
Склеены 2 файла, вначале находится первый и вешает к примеру 200 к/байт этот кусок и надо удалить.Чтобы файл восстановился.Есть прога Piece copy но она не удобная.
|
n5320, упакуйте пару-тройку разных образцов таких «склеенных» файлов в архив и выложите на RGhost. Ссылку — сюда.
|
http://rghost.ru/8RHtwmP9d
По приведенной ссылке в архиве два файла с каждого в начале надо вырезать 9255 байт и получиться многотомный рабочий 7z архив который можно открыть в winrare например
|
n5320, Outpost 37
PowerShell:
Код:
gci file.7z.* | % {
[byte[]] $bytes = get-content $_ -encoding byte
set-content $bytes[9255..($bytes.count-1)] -encoding byte -path $_
}
|
Скрипт точно будет выполнятся для папки из которой он запускается?
|
Цитата:
Цитата n5320
Скрипт точно будет выполнятся для папки из которой он запускается? »
|
Да. Для файлов соответствующих маске "file.7z.*"
|
Забыл сразу предупредить что размер файлов будет равет 100 мг , при тестировании таких файлов комп зависает.
Также "file" может быть любое значение. Как изменить маску чтобы применялось для файлов в имени которого присуствует ".7z"
|
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
при тестировании таких файлов комп зависает. »
|
Антивирус проверяет доступ?
|
n5320, Тогда попробуйте такой вариант:
Код:
gci *.7z.* | % {
$bytes = [System.IO.File]::ReadAllBytes( $_ )
[System.IO.File]::WriteAllBytes( $_, $bytes[9255..($bytes.count-1)])
}
|
Foreigner, а если сместиться на позицию 9255 в исходном файле, а затем читать из него остаток — будет быстрее или медленнее (придётся через FileStream работать, как я понимаю)?
|
Foreigner увы ваш скрипт жрет все 2 г памяти и выполнение не останавливается.
Iska, Ваш вариант работает очень быстро, нагрузка не заметно вообще, спасибо.
Можете кое что еще поправить в скрипте? Мне надо в начале или в конце выполнения vbs скрипта у всех файлов в папке также удалить в имени (расширении) ".jpg".
Пример Top_gir.7z.001.jpg должно получиться Top_gir.7z.001
|
Цитата:
Цитата 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
|
Iska, Все работает спасибо вам и форуму
|
Время: 01:31.
© OSzone.net 2001-