在DOS批处理脚本中将文件写入相对路径

时间:2011-03-21 08:20:17

标签: parameters batch-file relative-path

参考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扩展为仅包含驱动器号和路径,不带引号!

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