我无法列出作为参数传递给批处理文件的目录中的特定文件。
我面临的问题是管道“|”字符无法识别,我用它来规避dir
命令限制
dir /b *.avi *.mp4 *.mkv
在目录中,但是因为我正在创建这个批处理文件以在 uTorrent 之后执行,所以我需要将目录作为参数传递。
总的来说,我想做的是将 uTorrent 下载的文件自动转换为 AAC 音频。
以下是批处理文件的内容:
FOR /F "tokens=*" %%i IN ('dir %1 /b /A-D | findstr /I (avi mp4 mkv)') DO ffmpeg -i "%%~fi" -c:v copy -c:a aac -ac 2 "%%~di%%~pi%%~ni_aac%%~xi"
PAUSE
答案1
|
无法识别管道字符
您需要按如下方式进行转义:
^|
您的代码中还有一些其他错误:
管道
findstr /I (avi mp4 mkv)
无法正常工作,因为findstr
那样不行。findstr
无论如何,您不需要管道。如果它确实有效,你也必须逃脱
(
。)
"%%~di%%~pi%%~ni_aac%%~xi"
没有给输出文件扩展名.acc
请尝试以下操作:
pushd %1
FOR /F "usebackq tokens=*" %%i IN (`dir /b *.avi *.mp4 *.mkv`) DO (
echo ffmpeg -i "%%~fi" -c:v copy -c:a aac -ac 2 "%%~di%%~pi%%~ni.aac"
)
PAUSE
popd
echo
如果您对修改后的命令满意,请删除ffmpeg
。
^
转义符。在命令符号前添加转义字符可以将其视为普通文本。
当通过管道传输或重定向任何这些字符时,应该在前面加上转义字符:
& \ < > ^ |
例如
^\ ^& ^| ^> ^< ^^
来源引号、转义符、分隔符 - Windows CMD - SS64.com
进一步阅读
- Windows CMD 命令行的 AZ 索引 | SS64.com
- Windows CMD 命令(分类) - Windows CMD - SS64.com
- For - 循环遍历命令输出 - Windows CMD - SS64.com
- Pushd - 更改目录/文件夹 - Windows CMD - SS64.com
暂停