Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   обрабовать группу файлов в архиве (http://forum.oszone.net/showthread.php?t=232551)

murka_anka 11-04-2012 08:13 1897421

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

PHP код:

rem куда распаковывыем
set spath
=d:1rar
rem куда кладем файлы с результатами
set dpath
=d:1trid
rem считаем строки в файле с путями к файлам
set 
/a j=0
for /"tokens=*" %%j in (list.txt) do (set /a j=j+1)
rem х номер строки и имя файла с результатами
for /%%x in (1,1,%j%) do (
FOR /
"usebackq delims=" %%n in (list.txt) do (
winrar.exe e -%%%spath%|
for /
%spath% %%m in (*.*) do (
trid.exe> %dpath%%%x.trid "%%m")|
del /"%%m"))
cd /%dpath%
"C:\Program Files\WinRAR\winrar.exe" %dpath%trid.zip 

Вообщем, что у меня получается, вернее, не получается:
1) Файл не удаляется, пишет "не удается найти d:\1\rar\%m. Попытка записи в несуществующий канал"
2) Результаты обработки записываются в один файл 1.trid, не во много файлов 1-j.
(У меня вся программа в одной строке, это я здесь переосы расставила)
Извините, если сумбурно написала, но уже голова кипит)

murka_anka 12-04-2012 10:16 1898129

заменила del на erase, файлы теперь удаляются, но экзешник не отрабатыват, то есть все также создается один файл, но пустой.
ПРОбовала запустить отдельно строчку
PHP код:

for /%spath% %%m in (*.*) do ( trid.exe> %dpath%%%x.trid "%%m")| erase /"%%m"

файл удаляется, *.trid создается, но пустой.
Мне нужно, чтобы по порядку каждому j сопоставлялся последовательно каждый n. А получается, что для каждого j цикл перебирает все n и только потом переходит в следующему j.
Помогите, пожалуйста, я еще совсем новичок, это мой второй скрипт))

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

murka_anka 12-04-2012 11:01 1898158

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

murka_anka 12-04-2012 15:58 1898325

всем спасибо, справилась сама) идею взяла отсюда http://forum.oszone.net/thread-227420.html
выкладываю код, может кому-то пригодится обрабатывать файлы в архиве и записывать результат по каждому файлу в отдельный файл.
PHP код:

setlocal enableextensions enabledelayedexpansion 
set spath
=d:exifrar585 
set dpath
=d:exifrarrar
FOR /"delims=*" %%n in (list_rar.txt) do ( 
set /a lcount+=1     
winrar
.exe e -%%%spath%         
for /
%spath% %%m in (*.*) do (         
trid.exe>%dpath%!lcount!.trid "%%m"         
ping -n 3 127.0.0.1  1>nul|del /"%%m")) 
cd /%dpath
"C:\Program Files\WinRAR\winrar.exe" %dpath%trid.zip 
endlocal 



Время: 18:16.

Время: 18:16.
© OSzone.net 2001-