alexxx2011
14-12-2017, 10:54
Задача такая: Извлечь из текстового файла названия архивов, которые там записаны в столбик, а потом последовательно их распаковать.
Архивов намного больше, но извлекать надо именно те, названия которых есть в файле.
Есть примерно такой вот скрипт:
<allfiles.txt (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do set "s%%a=%%b")
call :un %s1%
call :un %s2%
call :un %s3%
call :un %s4%
call :un %s5%
call :un %s6%
call :un %s7%
call :un %s8%
call :un %s9%
pause
exit
:un
"7z.exe" x -aoa -tzip %~dp0resources\%1.zip -o%~dp0resources\%1
exit /b
Количество строк извлекаемых в переменные из файла allfiles.txt может быть разное. Когда 5, а когда и 150. Если изначально скрипт сделать с наибольшим количеством %sXX%, то выглядит такая портянка из 150 строчек некрасиво и в логе появляются записи об ошибках.
Чтобы избежать таких ошибок можно конечно перед вызовом call сделать проверку на то, пустая переменная или нет и в зависимости от этого продолжать работу или завершить, но от портянки вызовов это не избавляет.
Может есть у кого более изящное решение?
Архивов намного больше, но извлекать надо именно те, названия которых есть в файле.
Есть примерно такой вот скрипт:
<allfiles.txt (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do set "s%%a=%%b")
call :un %s1%
call :un %s2%
call :un %s3%
call :un %s4%
call :un %s5%
call :un %s6%
call :un %s7%
call :un %s8%
call :un %s9%
pause
exit
:un
"7z.exe" x -aoa -tzip %~dp0resources\%1.zip -o%~dp0resources\%1
exit /b
Количество строк извлекаемых в переменные из файла allfiles.txt может быть разное. Когда 5, а когда и 150. Если изначально скрипт сделать с наибольшим количеством %sXX%, то выглядит такая портянка из 150 строчек некрасиво и в логе появляются записи об ошибках.
Чтобы избежать таких ошибок можно конечно перед вызовом call сделать проверку на то, пустая переменная или нет и в зависимости от этого продолжать работу или завершить, но от портянки вызовов это не избавляет.
Может есть у кого более изящное решение?