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

问题描述 投票:0回答:3

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

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

我很难理解 Joey 所做的添加,因为我通常不这样做,但我想将多个文件 (.cue) 放在一个批处理文件上并让它运行多次,这就是批处理文件中的以下行发生了:

@echo off
title pcutmp3
cd /d "F:\pcutmp3"
java -jar pcutmp3.jar --cue %1 --dir "F:\Test"
pause
exit

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

预先感谢您的帮助!

batch-file
3个回答
10
投票
@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"

10
投票

处理

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


0
投票

如果您需要将文件名从完整路径中分离出来,请尝试以下操作:

...
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
---------
© www.soinside.com 2019 - 2024. All rights reserved.