Компьютерный форум 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=196325)

Tosyk 11-01-2011 08:12 1585858

Исправление скрипта для распаковки фалов
 
Допустим есть программа распаковщик, которая имеет работает по такому синтаксису:

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"
        )

а как сделать чтобы скрипт не создавал папку, а распаковывал бы прямо рядом с файлом

amel27 11-01-2011 08:18 1585859

как-то так:
Код:

for /f "tokens=*" %%a in ('dir /b/s *.bin') do tool.exe "%%a" "%%~dpa"

Tosyk 11-01-2011 08:33 1585867

Почему то не работает, говорит дело в программе.

Есть небольшой нюанс: иногда нужно указывать дополнительные параметры, например вот так выглядит:

Код:

For /F "Tokens=*" %%A In ('Dir /B /S *.bin') Do ( MD "%%~dpnA" 2>nul&&tool.exe -o -f  "*.bin" "%%A" "%%~dpnA" )
добавил -o -f "*.bin"

amel27 11-01-2011 09:06 1585883

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 11-01-2011 09:54 1585909

Цитата:

Цитата amel27
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


amel27 11-01-2011 12:01 1585994

Tosyk, как-то не стыкуется последний лог с кодом батника - там нет таких команд

Tosyk 11-01-2011 13:34 1586072

а, точно

так, нужно чтобы работала такая строчка

Код:

tool.exe -o -f "*.bin" n-unpacker.ms file.bin <место куда извлекать>
где

n-unpacker.ms - это скрипт, который использует tool.exe для извлечения из *.bin файлов

вместо <место куда извлекать>, можно поставить точку, тогда файлы извлекуться рядом с tool.exe

amel27 12-01-2011 05:42 1586620

могу еще предположить, что <место куда извлекать> не поддерживает завершающий слэш, тогда так:
Код:

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


Tosyk 12-01-2011 06:22 1586621

Код:

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()

вот такой лог

amel27 12-01-2011 07:03 1586626

Цитата:

Цитата Tosyk
вот такой лог »

подозреваю, что где-то используется %%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."

Tosyk 12-01-2011 07:31 1586636

аа, я ступил, всё получилось!!

действительно использовалась А заглавная, кстати в скобках

('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."
большое спасибо!

amel27 12-01-2011 08:21 1586651

Цитата:

Цитата Tosyk
('dir /b/s *.bin') вот так наверное должно выглядеть -> ('dir /b /s *.bin') »

результат одинаков
Цитата:

Цитата Tosyk
с @echo между do и tool.exe не работает »

так и задумано - @echo выводит текст команды на экран или в файл (вместо её выполнения)

Tosyk 12-01-2011 08:25 1586654

спасибо за пояснения)


Время: 15:47.

Время: 15:47.
© OSzone.net 2001-