拖放多个文件的批处理文件?

ar4*_*r4s 9 batch-file

我希望能够完成与下面类似的东西,但是使用pcutmp3:

拖放多个文件的批处理文件?

我无法绕过Joey所做的添加,因为我通常不会这样做,但我想在批处理文件中删除多个文件(.cue)并让它运行多次,这就是发生在批处理文件中的以下行:

@echo off
title pcutmp3
cd /d "F:\pcutmp3"
java -jar pcutmp3.jar --cue %1 --dir "F:\Test"
pause
exit
Run Code Online (Sandbox Code Playgroud)

我试过调整Joey的代码......但无济于事(我不知道我在做什么)

在此先感谢您的帮助!

Mik*_*ron 8

@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
Run Code Online (Sandbox Code Playgroud)

这是你基本的"吃所有参数"循环.重要的部分是shift关键字,它吃掉%1,并将所有参数向下移动一次(因此%2变为%1,%3变成%2等)

所以,如果你像这样运行它:

pcutmp3.bat a b c
Run Code Online (Sandbox Code Playgroud)

它会像这样调用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"
Run Code Online (Sandbox Code Playgroud)


jeb*_*jeb 6

通过拖放处理%1,移位或%*失败,因为当它创建命令行时,资源管理器不是很聪明.

Cool&stuff.cue浏览器没有引用类似的文件,因此您可以获得类似的cmdline
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
Run Code Online (Sandbox Code Playgroud)

顺便说一句.尽管"标准"批次行限制为8191个字符,但拖放操作的行限制为~2048个字符.