Перетащите пакетный файл для нескольких файлов? - PullRequest
8 голосов
/ 03 марта 2011

Я надеюсь выполнить что-то похожее на приведенное ниже, но с помощью pcutmp3:

Перетаскивание командного файла для нескольких файлов?

У меня проблемыОбдумывая дополнения, которые сделал Джои, поскольку я обычно так не делаю, но я хочу поместить несколько файлов (.cue) в пакетный файл и запустить его несколько раз, как это происходит со следующими строкамив командном файле:

@echo off
title pcutmp3
cd /d "F:\pcutmp3"
java -jar pcutmp3.jar --cue %1 --dir "F:\Test"
pause
exit

Я пытался адаптировать код Джои ... но безрезультатно (я понятия не имею, что я делаю)

Заранее спасибо за любыепомощь!

Ответы [ 2 ]

8 голосов
/ 03 марта 2011
@echo off
title pcutmp3
cd /d "F:\pcutmp3"

:again
if "%~1" == "" goto done

java -jar pcutmp3.jar --cue "%~1" --dir "F:\Test"

shift
goto again

:done
pause
exit

Это ваш основной цикл "Съешь все аргументы".Важной частью является ключевое слово shift, которое съедает %1 и сдвигает все аргументы на единицу (так что %2 становится %1, %3 становится %2 и т. Д.)

Итак, если вы запустите его так:

pcutmp3.bat a b c

Это будет вызывать Java следующим образом:

java -jar pcutmp3.jar --cue "a" --dir "F:\Test"
java -jar pcutmp3.jar --cue "b" --dir "F:\Test"
java -jar pcutmp3.jar --cue "c" --dir "F:\Test"
6 голосов
/ 04 марта 2011

Работа с %1, shift или %* может привести к сбою при перетаскивании, потому что проводник не очень умен, когда создает командную строку.

Файлы типа Cool&stuff.cue не цитируются проводником, поэтому вы получаете команду типа
pcutmp3.bat Cool&stuff.cue

Таким образом, в %1 есть только Cool, даже в %* есть только Cool, но после завершения pcutmp3.bat cmd.exe пытается выполнить stuff.cue.

Чтобы справиться с этим, вы можете использовать это, он перехватывает все имена файлов с помощью переменной cmdcmdline.

@echo off
setlocal ENABLEDELAYEDEXPANSION
rem *** Take the cmd-line, remove all until the first parameter
rem *** Copy cmdcmdline without any modifications, as cmdcmdline has some strange behaviour
set "params=!cmdcmdline!"
set "params=!params:~0,-1!"
set "params=!params:*" =!"
set count=0

rem Split the parameters on spaces but respect the quotes
for %%G IN (!params!) do (
  set /a count+=1
  set "item_!count!=%%~G"
  rem echo !count! %%~G
)

rem list the parameters
for /L %%n in (1,1,!count!) DO (
  echo %%n #!item_%%n!#
)
pause

REM ** The exit is important, so the cmd.exe doesn't try to execute commands after ampersands
exit

Btw. есть предел строки для операций перетаскивания ~ 2048 символов, несмотря на «стандартный» предел строки партии в 8191 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...