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

Batch file 拖放多个文件的批处理文件?,batch-file,Batch File,我希望通过pcutmp3实现与以下类似的功能: 我很难理解Joey所做的添加,因为我通常不会这样做,但我希望在批处理文件中放置多个文件(.cue),并让其多次运行,这就是批处理文件中的以下行所发生的情况: @echo off title pcutmp3 cd /d "F:\pcutmp3" java -jar pcutmp3.jar --cue %1 --dir "F:\Test" pause exit 我试着修改乔伊的密码。。。但是没有用(我不知道我在做什么) 提前感谢您的帮助 @echo

我希望通过pcutmp3实现与以下类似的功能:

我很难理解Joey所做的添加,因为我通常不会这样做,但我希望在批处理文件中放置多个文件(.cue),并让其多次运行,这就是批处理文件中的以下行所发生的情况:

@echo off
title pcutmp3
cd /d "F:\pcutmp3"
java -jar pcutmp3.jar --cue %1 --dir "F:\Test"
pause
exit
我试着修改乔伊的密码。。。但是没有用(我不知道我在做什么)

提前感谢您的帮助

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

处理
%1
,shift或
%*
可能会因拖放而失败,因为浏览器在创建命令行时不是很智能

explorer不会引用像
Cool&stuff.cue
这样的文件,因此您会得到一个类似
的cmdline
pcutmp3.bat Cool&stuff.cue

因此在
%1
中只有
很酷
即使在
%*
中也只有
很酷
,但是在pcutmp3.bat结束后,cmd.exe尝试执行
stuff.cue

为了处理这些东西,您可以使用它,它通过使用
cmdline
变量捕获所有文件名

@echo off
setlocal DisableDelayedExpansion
set index=0
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:*" =!"
echo params: !params!
rem Split the parameters on spaces but respect the quotes
for %%G IN (!params!) do (
    for %%# in (!index!) do (
        endlocal
        set /a index+=1
        set "item_%%#=%%~G"
        setlocal EnableDelayedExpansion
    )
)

set /a max=index-1

rem list the parameters
for /L %%n in (0,1,!max!) 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个字符。

嗨,迈克,谢谢你的帮助!我只是简单地将.cue文件放在批处理的顶部来运行批处理。在尝试了您所说的内容之后,我只是得到了
/dir\u path/test.cue”“此时出乎意料
不太清楚为什么。。。?再次感谢!我的错!我忘了Explorer会引用文件名。基本上,如果“somefile\blahbah”“==”,它将运行
,并且它不喜欢所有额外的引号。我已经更新了脚本以正确删除引号。此外,通过此更改,批处理文件不再与DOS兼容:(好的,是的,这确实有效。我非常感谢你的帮助。干杯!希望有人能看到它并修复jeb,可以扩展
%%n
以获得路径吗?就像这样:
%%~pn
我试过了,它返回:
回音关闭。
以下是我尝试的
回音!item%%~pn要展开
%%~pn
但在此代码中
%%n
仅包含数字,因此路径没有意义。但您可能希望获取项目的路径。但最好在使用时提出一个新问题,并引用此问题/答案。这非常有效,直到我拖动一个带有!(感叹号)的文件.是否有人有好办法允许!在拖动的文件名中?@JG1212我添加了感叹号支持