我编写了一个接受输入参数的批处理文件。我最初编写它是为了在%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
)