参考What is the best way to do a substring in a batch file?我认为以下内容应该有效。
FOR %%f IN (*.wav) DO CALL :runthis "%%f"
rem del temp.wav tmpfile
GOTO :EOF
:runthis
set "outdir=%~p1\output\"
copy "%~1" "%outdir%%~1"
最后一个命令应该 dosomthing 到当前目录中的所有.wav文件,并输出到保留原始文件名的现有子目录“ output ”。知道我哪里错了吗?
Update1:谢谢,修复了语法。我没注意到%pI只将 I 扩展到路径,没有仔细阅读。现在有什么不对,它用“s
扩展了dosomething "11.wav" "\Users\t4\Desktop\Airlines\WavRepeaters\\outdir\"11.wav""
应该是::
dosomething "11.wav" c:\Users\t4\Desktop\Airlines\WavRepeaters\outdir\11.wav
Update2:%~dp1 - 将%1扩展为仅包含驱动器号和路径,不带引号!
答案 0 :(得分:1)
主要问题似乎是参数的使用。
在:runthis 中,您使用%~pI
,但没有%I
。
另一个缺陷是文件名中的空格,然后dosomething需要围绕文件名/路径引用。
进行一些更改后,它应该可以正常工作
@echo off
FOR %%f IN (*.bat) DO CALL :runthis "%%~f"
rem del temp.wav tmpfile
GOTO :EOF
:runthis
set "outdir=%~p1\output\"
echo dosomthing "%~1" "%outdir%%~1"
goto :eof