我希望能够完成与下面类似的事情,但是使用 pcutmp3:
我很难理解 Joey 所做的添加,因为我通常不这样做,但我想将多个文件 (.cue) 放在一个批处理文件上并让它运行多次,这就是批处理文件中的以下行发生了:
@echo off
title pcutmp3
cd /d "F:\pcutmp3"
java -jar pcutmp3.jar --cue %1 --dir "F:\Test"
pause
exit
我尝试过改编 Joey 的代码...但无济于事(我不知道我在做什么)
预先感谢您的帮助!
@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 或 %*
可能会因拖放而失败,因为资源管理器在创建命令行时不是很智能。
像
Cool&stuff.cue
这样的文件不会被资源管理器引用,所以你会得到像pcutmp3.bat Cool&stuff.cue
所以在
%1
中只是Cool
即使在%*
中也只是Cool
,但是在pcutmp3.bat结束后,cmd.exe尝试执行一个stuff.cue
。
要处理这些东西,你可以使用它,它通过使用
cmdcmdline
变量捕获所有文件名。
@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 个字符。
如果您需要将文件名从完整路径中分离出来,请尝试以下操作:
...
for %%a IN (!params!) do (
for %%# in (!index!) do (
endlocal
set /a index+=1
set "item_%%#=%%~a"
set "DISK_%%#=%%~da"
set "Folder_%%#=%%~dpa"
set "FullFolder_%%#=%%~fa"
set "FileName_%%#=%%~nxa"
set "LastName_%%#=%%~na"
set "Ext_%%#=%%~xa"
setlocal EnableDelayedExpansion
)
)
set /a max=index-1
echo ---------
rem list the parameters
for /L %%n in (0,1,!max!) DO (
set MYDIR=!item_%%n!
set DISK=!DISK_%%n!
set Folder=!Folder_%%n!
set FullFolder=!FullFolder_%%n!
set FileName=!FileName_%%n!
set LastName=!LastName_%%n!
set Ext=!Ext_%%n!
echo !MYDIR!
echo !DISK!
echo !Folder!
echo !FullFolder!
echo !FileName!
echo !LastName!
echo !Ext!
)
echo ---------
和输出
D:\test\test2\file.txt
D:
D:\test\
D:\test\test2\file.txt
file.txt
file
.txt
---------