列出目录中的特定文件

列出目录中的特定文件

我无法列出作为参数传递给批处理文件的目录中的特定文件。

我面临的问题是管道“|”字符无法识别,我用它来规避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


进一步阅读

暂停

相关内容