可以接受来自同一输入参数的文件或文件夹的批处理文件

可以接受来自同一输入参数的文件或文件夹的批处理文件

我编写了一个接受输入参数的批处理文件。我最初编写它是为了在%1假设输入参数为文件名的情况下执行操作,但后来将其转换为期望%1输入参数为文件夹,然后它会遍历该文件夹中的所有项目,并使用 for 循环对它们运行操作,如下所示:

for %%f in (%1/*.mkv) do (
    ffmpeg -y -i "%%f" -vcodec copy -acodec aac -b:a 192k "e:\temp\%%~nxf"
)

但现在我意识到,如果能用同一个输入参数来处理文件夹和文件就太好了。我无法使用不同的输入标志来处理这个问题,因为我希望能够从右键单击发送到菜单运行此脚本。

如何通过单个输入参数区分文件和文件夹(并且显然根据每个参数执行不同的操作)?

答案1

对于参数和变量,有一个修饰符~a返回其属性。
参见https://ss64.com/nt/syntax-args.html
如果属性包含字母,则d它是一个目录。

@Echo off
Echo %~a1|findstr "d" >nul 2>&1 && (
    echo %1 is a directory
) || (
    echo %1 is a file
)

相关内容