我希望能够完成与下面类似的东西,但是使用pcutmp3:
Drag and drop batch file for multiple files?
我无法绕过Joey所做的添加,因为我通常不会这样做,但我想在批处理文件中删除多个文件(.cue)并让它运行多次,是批处理文件中的以下行:
@echo off
title pcutmp3
cd /d "F:\pcutmp3"
java -jar pcutmp3.jar --cue %1 --dir "F:\Test"
pause
exit
我已经尝试过调整Joey的代码......但无济于事(我不知道我在做什么)
提前感谢您的帮助!
答案 0 :(得分: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
这是你基本的“吃掉所有参数”循环。重要的部分是shift
关键字,它会占用%1
,并将所有参数向下移动一次(以便%2
变为%1
,%3
变为{ {1}}等)
所以,如果你像这样运行它:
%2
它会像这样调用java:
pcutmp3.bat a b c
答案 1 :(得分:6)
处理%1
,shift或%*
可能会因拖放而失败,因为在创建命令行时,资源管理器不是很聪明。
资源管理器未引用Cool&stuff.cue
等文件,因此您获得了类似于的cmdline
pcutmp3.bat Cool&stuff.cue
因此%1
Cool
只有%*
Cool
只有stuff.cue
,但在pcutmp3.bat结束后,cmd.exe会尝试执行{{1} }}。
要处理这些东西你可以使用它,它使用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
顺便说一下。尽管“标准”批次行限制为8191个字符,但拖放操作的行数限制为~2048个字符。