![可以接受来自同一输入参数的文件或文件夹的批处理文件](https://linux22.com/image/1541708/%E5%8F%AF%E4%BB%A5%E6%8E%A5%E5%8F%97%E6%9D%A5%E8%87%AA%E5%90%8C%E4%B8%80%E8%BE%93%E5%85%A5%E5%8F%82%E6%95%B0%E7%9A%84%E6%96%87%E4%BB%B6%E6%88%96%E6%96%87%E4%BB%B6%E5%A4%B9%E7%9A%84%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6.png)
我编写了一个接受输入参数的批处理文件。我最初编写它是为了在%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
)