我正在尝试创建一个可以将其他文件放到其上的批处理文件。具体来说,我正在使用ffmpeg来编辑手持录音机产生的音频文件。问题是当使用带有&符号的文件名(&)时。即使在引用输入时,也可以在&被删除,但只有当文件被丢弃时;如果在命令行输入文件名输入,则脚本可以正常工作。在cmd
窗口关闭之前,我会短暂地看到文件名的其余部分,并显示一条错误消息,说明它未被识别为有效命令。
这是我的剧本:
rem Change to drive and directory of input file %~d1 cd %~p1 rem ffmpeg: mix to one channel, double the volume %HOMEDRIVE%%HOMEPATH%\ffmpeg.exe -i "%~nx1" -ac 1 -vol 1024 "%~n1 fixed%~x1" pause
以下是删除"ch17&18.mp3"
后命令行中显示的内容:
C:\Users\computergeeksjw\Desktop>C:\Users\computergeeksjw\ffmpeg.exe -i "ch17" -ac 1 -vol 1024 "ch17 fixed" [...] ch17: No such file or directory
如果重要:我正在使用Windows 8开发人员预览版。这会导致我的问题吗?在Windows 7或更早版本中是否会出现相同的错误?
答案 0 :(得分:0)
我非常敬佩dbenham的批量编程技巧。 我尝试了他的解决方案,偶然发现了我在这里提出的两个问题,因为我没有足够的声誉来评论:
在他的批处理模板的第15行的最后一个引号前面似乎有一个额外的空格。我想它应该是:
set "args=!cmd2:~0,-1!"
有些不那么出色的批量编程知识的人可能会遇到严重的问题,就像我一样。我试过但由于愚蠢的编辑而无法编辑dbenham的帖子;编辑必须至少6个字符"限制。
解决方案通常不适合在其完整路径中包含,
(逗号)或;
(分号)的文件/文件夹。
如果只有一个文件/文件夹被放入批处理文件中,可以修改它,方法是在第20行的引号中包含args:
for %%F in ("!args!") do (
当多个文件/文件夹被放到批处理文件中时,我恐怕没有可能在文件路径中处理逗号/分号的Windows错误的一般解决方法。 Windows的SendTo机制显然具有相同的缺陷(bug),因此无法用于解决拖放错误。因此,微软最终要解决这个问题。