PDA

Показать полную графическую версию : обрабовать группу файлов в архиве


murka_anka
11-04-2012, 08:13
здравствуйте, задача такая: есть списов файлов в txt, каждый из этих файлов находится в архиве, нужно последовательно (каждый по отдельности, а не все сразу, тк имена файлов могут быть одинаковые) распаковать, обработать какой-нибудь программой, например trid.exe, вместо нее может быть любая другая, записать результаты по каждому файлу в отдельный файл, затем распакованный файл удалить.
Вот что у меня есть

rem куда распаковывыем
set spath=d:\1\rar
rem куда кладем файлы с результатами
set dpath=d:\1\trid
rem считаем строки в файле с путями к файлам
set /a j=0
for /F "tokens=*" %%j in (list.txt) do (set /a j=j+1)
rem х - номер строки и имя файла с результатами
for /l %%x in (1,1,%j%) do (
FOR /F "usebackq delims=" %%n in (list.txt) do (
winrar.exe e -n %%n %spath%|
for /r %spath% %%m in (*.*) do (
trid.exe> %dpath%\%%x.trid "%%m")|
del /q "%%m"))
cd /d %dpath%
"C:\Program Files\WinRAR\winrar.exe" a %dpath%\trid.zip
Вообщем, что у меня получается, вернее, не получается:
1) Файл не удаляется, пишет "не удается найти d:\1\rar\%m. Попытка записи в несуществующий канал"
2) Результаты обработки записываются в один файл 1.trid, не во много файлов 1-j.
(У меня вся программа в одной строке, это я здесь переосы расставила)
Извините, если сумбурно написала, но уже голова кипит)

murka_anka
12-04-2012, 10:16
заменила del на erase, файлы теперь удаляются, но экзешник не отрабатыват, то есть все также создается один файл, но пустой.
ПРОбовала запустить отдельно строчку
for /r %spath% %%m in (*.*) do ( trid.exe> %dpath%%\%x.trid "%%m")| erase /q "%%m")
файл удаляется, *.trid создается, но пустой.
Мне нужно, чтобы по порядку каждому j сопоставлялся последовательно каждый n. А получается, что для каждого j цикл перебирает все n и только потом переходит в следующему j.
Помогите, пожалуйста, я еще совсем новичок, это мой второй скрипт))

да, экзешник не отрабатывает с ошибкой "Файл не найден", возможно он удаляется раньше, чем запускается экзешник? :wacko:

murka_anka
12-04-2012, 11:01
еще добавлю, первоначально написала другой алгоритм, сначала все распаковываем, потом все новые пути к файлам записываем в файл, и уже через for для каждой строки в файле запускаем экзешник. Так все работало, пока непоявились файлы с одинаковыми именами.

murka_anka
12-04-2012, 15:58
всем спасибо, справилась сама) идею взяла отсюда http://forum.oszone.net/thread-227420.html
выкладываю код, может кому-то пригодится обрабатывать файлы в архиве и записывать результат по каждому файлу в отдельный файл.
setlocal enableextensions enabledelayedexpansion
set spath=d:\exif\rar\585
set dpath=d:\exif\rar\rar
FOR /F "delims=*" %%n in (list_rar.txt) do (
set /a lcount+=1
winrar.exe e -n %%n %spath%
for /r %spath% %%m in (*.*) do (
trid.exe>%dpath%\!lcount!.trid "%%m"
ping -n 3 127.0.0.1 1>nul|del /q "%%m"))
cd /d %dpath%
"C:\Program Files\WinRAR\winrar.exe" a %dpath%\trid.zip
endlocal




© OSzone.net 2001-2012