Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт, который бы удалял во всех файлах из папки, кроме самого vbs скрипта,

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

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 12:00, 06-02-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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:
при тестировании таких файлов комп зависает. »
Антивирус проверяет доступ?
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:49, 06-02-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


n5320, Тогда попробуйте такой вариант:
Код: Выделить весь код
gci *.7z.* | % {

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

}
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:52, 06-02-2015 | #12


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:03, 06-02-2015 | #13


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:22, 06-02-2015 | #14


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:35, 06-02-2015 | #15


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:43, 06-02-2015 | #16



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт, который бы удалял во всех файлах из папки, кроме самого vbs скрипта,

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] скрипт который менял бы шлюз при отсутствии интернета и перезагружал бы роутер konst_vrn@vk Скриптовые языки администрирования Windows 7 01-04-2014 03:39
CMD/BAT - Удаление всех файлов из папки кроме батника composter Скриптовые языки администрирования Windows 11 30-03-2013 08:25
VBS/WSH/JS - [решено] VBS, поиск во всех файлах заданной папки и запись в файл. vlad20 Скриптовые языки администрирования Windows 5 31-07-2012 01:52
CMD/BAT - [решено] скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы campbell Скриптовые языки администрирования Windows 13 19-11-2011 05:43
Любой язык - [решено] Скрипт который бы запускал 2 процесса и в случае убийства одного убивал бы и другой iDrug Скриптовые языки администрирования Windows 7 12-10-2009 19:08




 
Переход