如何确保 Windows 批处理 FOR 循环中的完整路径

如何确保 Windows 批处理 FOR 循环中的完整路径

我创建了一个通用批处理(或 Windows 命令)文件,它允许我循环遍历目录的内容并为每个项目调用一个命令。

IF a%1==a ( set _DIR="%CD%") ELSE ( set _DIR="%~1")
IF a%2==a ( set _COMMAND=rem) ELSE ( set _COMMAND=%2)
IF a%3==a ( set _FILTER=*.*) ELSE ( set _FILTER=%3)
set _OPTS=%4

FOR /F "delims=" %%f IN ('dir %_DIR%\%_FILTER% %_OPTS% /b') DO (
%_COMMAND% "%%f"
)

但是,我正在尝试确定如何确保调用%_COMMAND%正确的文件。

我尝试将目录变量放在前面,例如%_COMMAND% %_DIR%\"%%f",但这会在我传递的参数中留下引号。例如,如果我调用批处理文件exec_dir.bat,并使用以下内容调用它,我会发现运行echo_test.bat时所有文件都有引号。echo_test.bat

echo %~dpn1.mp4

该批处理脚本生成:

> exec_dir.bat "C:\Users\User\Desktop\Test Folder" echo_test.bat *.txt
C:\Users\User\Desktop\Test Folder\"Test File.txt
C:\Users\User\Desktop\Test Folder\"Test2.txt

我的想法是它与转义字符有关\,但我似乎无法解决它。

答案1

设置本地
如果“%~1” ==“”(设置目录=。)否则(设置目录=“%~1”)
如果“%~2”==“”(设置命令=echo)否则(设置命令=%~2)
如果“%~3”==“”(设置掩码=*)否则(设置掩码=%~3)
对于 /r %dir% %%f 在 (%mask%) 中执行 %command% %%~dpnxf

或者简单来说:

C:\>for /r.%f 在(*)中执行@echo%~dpnxf

相关内容