Показать полную графическую версию : [решено] Исправление скрипта для распаковки фалов
Допустим есть программа распаковщик, которая имеет работает по такому синтаксису:
tool.exe <file.bin> <folder>
у меня есть скрипт, который ищет вглубь по папкам файлы *.bin и распаковывает их в папки с именем распаковываемого файла, например скрипт нашёл файл file04.bin, создал рядом с этим файлом папку file04 и распаковал в эту папку содержимое файла file04.bin. собственно делается командой "%%~dpnA"
For /F "Tokens=*" %%A In ('Dir /B /S *.bin') Do (
MD "%%~dpnA" 2>nul&&tool.exe "%%A" "%%~dpnA"
)
а как сделать чтобы скрипт не создавал папку, а распаковывал бы прямо рядом с файлом
как-то так:
for /f "tokens=*" %%a in ('dir /b/s *.bin') do tool.exe "%%a" "%%~dpa"
Почему то не работает, говорит дело в программе.
Есть небольшой нюанс: иногда нужно указывать дополнительные параметры, например вот так выглядит:
For /F "Tokens=*" %%A In ('Dir /B /S *.bin') Do ( MD "%%~dpnA" 2>nul&&tool.exe -o -f "*.bin" "%%A" "%%~dpnA" )
добавил -o -f "*.bin"
Tosyk, может так?
for /f "tokens=*" %%a in ('dir /b/s *.bin') do tool.exe -o -f "%%a" "%%~dpa"
получить список реально выполняемых команд в файл (file.log) для проверки:
(for /f "tokens=*" %%a in ('dir /b/s *.bin') do @echo tool.exe -o -f "%%a" "%%~dpa"
)>file.log
Tosyk, может так?
Код:
for /f "tokens=*" %%a in ('dir /b/s *.bin') do tool.exe -o -f "%%a" "%%~dpa" »
дело в том, что я пробывал так сделать, не вышло
при таком варианте
For /F "Tokens=*" %%A In ('Dir /B /S *.bin') Do ( MD "%%~dpnA" 2>nul&&tool.exe -o -f "*.bin" "%%A" "%%~dpnA" )
говорится следующее
d:\test\>_bin_unpack.cmd
d:\test\>For /F "Tokens=*" %A In ('Dir /B /S *.bin') Do (MD "%~dpnA" 2>nul && tool.exe -o -F "*.bin" n-unpacker.ms "%A" "%~dpnA" )
d:\test\>(MD "d:\test\A_MOUNT_ROBOT_04" 2>nul && tool.exe -o -F "*.bin" n-unpacker.ms "d:\test\A_MOUNT_ROBOT_04.bin" "d:\test\A_MOUNT_ROBOT_04" )
- open input file d:\test\A_MOUNT_ROBOT_04.bin
- open script n-unpacker.ms
- set output folder d:\test\A_MOUNT_ROBOT_04
offset filesize filename
------------------------------
00000000 34173840 A_MOUNT_ROBOT_04.bin.dec
- 1 files found in 5 seconds
а при таком:
for /f "tokens=*" %%a in ('dir /b /s *.bin') do tool.exe -o -f "*.bin" n-unpacker.ms "%%a" "%%~dpa"
говорит это:
d:\test\>_bin_unpack.cmd
d:\test\>For /F "Tokens=*" %A In ('Dir /B /S *.bin') Do (MD "%~dpnA" 2>nul && tool.exe -o -F "*.bin" n-unpacker.ms "%A" "%~dpnA" )
d:\test\>(MD "d:\test\A_MOUNT_ROBOT_04" 2>nul && tool.exe -o -F "*.bin" n-unpacker.ms "d:\test\A_MOUNT_ROBOT_04.bin" "d:\test\A_MOUNT_ROBOT_04" )
- open input file d:\test\A_MOUNT_ROBOT_04.bin
- open script n-unpacker.ms
- set output folder d:\test\A_MOUNT_ROBOT_04
- error in src\tool.c line 1013: main()
Error: Invalid argument
Tosyk, как-то не стыкуется последний лог с кодом батника - там нет таких команд
а, точно
так, нужно чтобы работала такая строчка
tool.exe -o -f "*.bin" n-unpacker.ms file.bin <место куда извлекать>
где
n-unpacker.ms - это скрипт, который использует tool.exe для извлечения из *.bin файлов
вместо <место куда извлекать>, можно поставить точку, тогда файлы извлекуться рядом с tool.exe
могу еще предположить, что <место куда извлекать> не поддерживает завершающий слэш, тогда так:
for /f "tokens=*" %%a in ('dir /b/s *.bin') do tool.exe -o -f "*.bin" n-unpacker.ms "%%a" "%%~dpa."
в посте #4 уже давал код для вывода всех команд в лог, чтобы была возможность проверки по одной:
(for /f "tokens=*" %%a in ('dir /b/s *.bin') do @echo tool.exe -o -f "*.bin" n-unpacker.ms "%%a" "%%~dpa."
)>file.log
d:\test\>tool.exe -o -F "*.bin" n-unpacker.ms "d:\test\A_MOUNT_ROBOT_04.bin" "%~dpa."
- open input file d:\test\A_MOUNT_ROBOT_04.bin
- open script n-unpacker.ms
- set output folder %~dpa.
- error in src\tool.c line 1013: main()
вот такой лог
вот такой лог »подозреваю, что где-то используется %%A, а где-то %%a:
for /f "tokens=*" %%A in ('dir /b/s *.bin') do tool.exe -o -f "*.bin" n-unpacker.ms "%%A" "%%~dpa."
регистр должен быть одним:
for /f "tokens=*" %%A in ('dir /b/s *.bin') do tool.exe -o -f "*.bin" n-unpacker.ms "%%A" "%%~dpA."
аа, я ступил, всё получилось!!
действительно использовалась А заглавная, кстати в скобках
('dir /b/s *.bin') вот так наверное должно выглядеть -> ('dir /b /s *.bin'), и с @echo между do и tool.exe не работает
т.о. работающий скрипт:
for /f "Tokens=*" %%a in ('Dir /b /s *.bin') Do tool.exe -o -F "*.bin" n-unpacker.ms "%%a" "%%~dpa."
большое спасибо!
('dir /b/s *.bin') вот так наверное должно выглядеть -> ('dir /b /s *.bin') »
результат одинаков
с @echo между do и tool.exe не работает »
так и задумано - @echo выводит текст команды на экран или в файл (вместо её выполнения)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.