检查文件是否存在于特定路径中,不受子文件夹的限制



我有一个批处理检查,如下所示的特定文件:

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都不会有任何引号。

最新更新