“Droplet”批处理脚本 - 包含&符号的文件名

时间:2011-12-17 20:20:35

标签: windows batch-file ffmpeg

我正在尝试创建一个可以将其他文件放到其上的批处理文件。具体来说,我正在使用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或更早版本中是否会出现相同的错误?

1 个答案:

答案 0 :(得分:0)

我非常敬佩dbenham的批量编程技巧。 我尝试了他的解决方案,偶然发现了我在这里提出的两个问题,因为我没有足够的声誉来评论:

  1. 在他的批处理模板的第15行的最后一个引号前面似乎有一个额外的空格。我想它应该是:

      set "args=!cmd2:~0,-1!"
    

    有些不那么出色的批量编程知识的人可能会遇到严重的问题,就像我一样。我试过但由于愚蠢的编辑而无法编辑dbenham的帖子;编辑必须至少6个字符"限制。

  2. 解决方案通常不适合在其完整路径中包含,(逗号)或;(分号)的文件/文件夹。 如果只有一个文件/文件夹被放入批处理文件中,可以修改它,方法是在第20行的引号中包含args:

    for %%F in ("!args!") do (
    

    多个文件/文件夹被放到批处理文件中时,我恐怕没有可能在文件路径中处理逗号/分号的Windows错误的一般解决方法。 Windows的SendTo机制显然具有相同的缺陷(bug),因此无法用于解决拖放错误。因此,微软最终要解决这个问题。