Mongol, 30.03.2009 - 15:04
Хочу сделать скрипт который будет подсчитывать контрольные сумы файлов, в том числе и файлов расположенных в поддиректориях.
Сначала формируется файл содержащий все файлы в поддиректориях, после чего происходит выполнения программы md5.exe котороя просчитывает контрольные суммы файлов и записывает их в файл. Нашел похожий пример:
» Нажмите, для открытия спойлера | Press to open the spoiler «
echo off
dir /a:d /b > dir.txt
for /f "tokens=1" %%i in (dir.txt) do (
cd %%i
call :dodate %%i %1
cd ..
)
del dir.txt
goto :eof
:dodate
rem входим в папку
cd %2 >
set e1=%errorlevel%
if [%e1%]==[0] (
rem если удачно, строим список файлов
rem формат вывода подбереь сам
dir /b *.%1 > ..\file.txt
for /f "tokens=1" %%i in (..\file.txt) do (
rem печать
call твой_скрипт %%i
)
del ..\file.txt
cd ..
)
goto :eof
Нашел пример скрипта для перебора поддиректорий, правда он ищет только поддиректории 1го уровня(если несложно, прокомментируйте всю программу построчно). Полностью с синтаксисом не разобрался ибо все мануалы на английском, я в нем не силен. Нужно сделать что бы поиск проводился на произвольную глубину дерева директорий и прикрутить считывание/проверку контрольной сумы.
В принципе всю программу комментировать не надо, я не понял только значения строчек
» Нажмите, для открытия спойлера | Press to open the spoiler «
for /f "tokens=1" %%i in (dir.txt) do (
cd %%i
call :dodate %%i %1
....
set e1=%errorlevel%
if [%e1%]==[0] (
....
errorlevel – это ответ предыдущей функции, почему он должен быть равен 0?
_Dimas_, 31.03.2009 - 5:40
Не парься с этим скриптом, все гораздо проще
Выводит все файлы из каталога и подкаталогов «D:\Dimas\Документы» в файл «D:\Dimas\FileList.txt»
Code
for /r "D:\Dimas\Документы" %%i in (*.*) do (echo %%i >D:\Dimas\FileList.txt)
» Нажмите, для открытия спойлера | Press to open the spoiler «
Цикл по строкам файла dir.txt, каждая строка заносится в переменную %%i
Code
for /f "tokens=1" %%i in (dir.txt) do (Команды)
Переход в папку %%i
Code
cd %%i
Запускает Этот же скрипт начиная с метки :dodate с двумя параметрами %%i и %1
Code
call :dodate %%i %1
В переменную e1 присваивает значение %errorlevel%. Код возврата предыдущей комманды, в данном случае cd %2
Code
set e1=%errorlevel%
Если код возврата = 0 то выполнение комманд
Code
if [%e1%]==[0] (команды)
Как правило возврат 0 это означает что ошибок не было.
Toxa33rus, 2.04.2009 - 12:21
Записывает полные пути ко всем файлам во всех поддиректориях в указанный файл.
Файл-результат каждый раз дописывается и при повторном запуске скрипта в конец будет добавлен полный список еще раз, так что перед запуском лучше его очищать.
» Нажмите, для открытия спойлера | Press to open the spoiler «
сохранить в файл *.vbs
Code
Dim FSO, ResultFile, FileList
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TheFolder = FSO.GetFolder("C:\test\") 'с какого каталога пойдем
ResultFile = "C:\test\files.txt" 'тут сохраним список всех файлов
WorkWithSubFolders TheFolder 'поехали
'обрабатывает поддиректории
Sub WorkWithSubFolders(ByVal AFolder)
Dim MoreFolders, TempFolder
File2List AFolder
Set MoreFolders = AFolder.SubFolders
For Each TempFolder In MoreFolders
WorkWithSubFolders TempFolder
Next
End Sub
'добавляет файлы из каталога в список
Sub File2List(AFolder)
Dim AFile, TheFiles
'On Error Resume Next
Set TheFiles = AFolder.Files
For Each AFile In TheFiles
If UCase(AFile.Path) <> UCase(ResultFile) Then
Set FileList=FSO.OpenTextFile(ResultFile, 8, TRUE)
FileList.Write AFile.Path & vbcrlf
FileList.close
End If
Next
End Sub