如何检查 cmd 批处理脚本中是否存在具有特定模式的文件名?

How to check if a filename with specific pattern exists in cmd batch script?

如何在 if exist 语句中使用 [0-9]。我想检查第二个数字是 1-9 的文件是否存在。

If exist "filepath\a[1-9]*" (echo "yes")

似乎 [1-9] 通配符在 if exist 语句中不起作用。

您知道如何执行此检查吗?

例如 当名为 a1 (a2da) 的文件存在但不存在 a0 (a0ss)

时打印“yes”

如果只检查第二个字符,不考虑后面的字符,可以这样使用:

for /l %%n in (1,1,9) do if exist "a%%n*" set "ANS=%%n"
if defined ANS echo yes

因为这是一个批处理文件,而且只写一次,所以没有必要尽量让你的命令尽可能短。因此,只需使用一个 dir 命令和一个 echo 命令,而不是当前接受的答案,它实际上运行十个 if 命令,可能是九个 set 命令和一个 echo命令。

@Dir "filepath\a1*" "filepath\a2*" "filepath\a3*" "filepath\a4*" "filepath\a5*" "filepath\a6*" "filepath\a7*" "filepath\a8*" "filepath\a9*" /B /A:-D 2>NUL 1>&2 && Echo Yes

因为filepath是常数,你甚至可以这样做:

@CD /D "filepath" 2>NUL && (Dir a1* a2* a3* a4* a5* a6* a7* a8* a9* /B /A:-D 2>NUL 1>&2 && Echo Yes)

但是请注意,您的问题不够明确,无法确定您的全部任务。此示例将打印 Yes 如果 a[123456789]… 存在于 filepath,无论 filepath.[=30 中是否存在名为 a0… 的文件,它都会执行此操作=]

另一种方法是使用 PowerShell。如果您使用的是受支持的 Windows 系统,则该系统已安装。

powershell -NoLogo -NoProfile -Command "Test-Path -Path '.\a[1-9]*'"

cmd 中唯一一个支持 REGEX(残缺版本)的命令是 findstr。所以你可以用它来完成你的任务:

dir /a-d "%filepath%\a*" | findstr /ib "a[123456789].*" >nul && echo yes || echo no

请注意,这还会找到 a12anything.txtA2anything.txt 之类的文件,但不会找到 a0anything.txt.