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

时间:2011-03-03 18:40:54

标签: batch-file

我希望能够完成与下面类似的东西,但是使用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的代码......但无济于事(我不知道我在做什么)

提前感谢您的帮助!

2 个答案:

答案 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个字符。