我有一个批处理检查,如下所示的特定文件:
if exist "C:Program FilesAppApp version numberfile.exe" (
echo EXISTS
) else (
echo NOT EXIST!
)
我希望能够检查任何版本中的file.exe
,以便它可能在:
"C:Program FilesAppApp v.1file.exe"
"C:Program FilesAppApp v.2file.exe"
如何在路径中跳过版本号作为要求?
下面是使用带有条件运算符的WHERE
命令的示例。
where /Q /R "C:Program FilesApp" file.exe && echo found || echo not found
可能有点矫枉过正,但应该可以工作。
主.bat:
@echo off
for /f "tokens=*" %%i in ('sub.bat') do (
if "x%%i"=="x" (
echo "Not found!"
) ELSE (
echo "Found in %%i"
)
)
子.bat:
@echo off
set your_path="C:Your Path"
cd /d %your_path%
for /r %%p in (file.exe) do echo %%p
解释:
主批处理是要执行的批处理。它读取子批次的输出并做出适当的反应。
将搜索的根设置为变量your_path
。它将更改目录,然后使用/R
递归循环搜索当前目录并查找您在括号中设置的文件。如果找到该文件,它将echo
该文件以被主文件读取。
请随时提出更多问题:)
setlocal
set AppDir=
for /d %%d in ("C:Program FilesAppApp v*") do if exist "%%dfile.exe" set "AppDir=%%d"
if defined AppDir (
echo EXISTS - it's in "%AppDir%"
) else (
echo NOT EXIST!
)
endlocal
(更新:编辑为在变量两边加上引号,以防文件名包含特殊字符,例如&
.感谢@aschipfl指出这一点。另一方面,没有必要使用%%~d
而不仅仅是%%d
因为无论如何%%d
都不会有任何引号。