如何检查 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.txt
和 A2anything.txt
之类的文件,但不会找到 a0anything.txt
.
如何在 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.txt
和 A2anything.txt
之类的文件,但不会找到 a0anything.txt
.