【问题标题】:Check if file exists within certain path without restriction to subfolder检查文件是否存在于特定路径中,不受子文件夹限制
【发布时间】:2016-12-13 16:42:45
【问题描述】:

我对这样的特定文件进行批量检查:

if exist "C:\Program Files\App\App version number\file.exe" (
    echo EXISTS
) else (
   echo NOT EXIST!
)

我希望能够在任何版本中检查file.exe,因此它可能位于:

"C:\Program Files\App\App v.1\file.exe"
"C:\Program Files\App\App v.2\file.exe"

如何跳过版本号作为路径内的要求?

【问题讨论】:

  • where /R "C:\Program Files\App" "file.exe"

标签: batch-file cmd


【解决方案1】:

这是一个使用带有条件运算符的WHERE 命令的示例。

where /Q /R "C:\Program Files\App" file.exe && echo found || echo not found

【讨论】:

  • 这是迄今为止我认为最干净的方式。我不知道那个命令。您介意我对此添加一些解释吗?
  • 这只有在你真的想在 App 的 all 子目录中搜索时才有效。如果您想在 ...\App\App v.1...\App\App v.2 中搜索(如 OP 所述)而不是在 ...\App\NotHere\* 中搜索,它将不起作用。
【解决方案2】:

可能有点矫枉过正,但应该可以。

main.bat:

@echo off
for /f "tokens=*" %%i in ('sub.bat') do (
    if "x%%i"=="x" (
        echo "Not found!"
    ) ELSE (
        echo "Found in %%i"
    )
)

sub.bat:

@echo off
set your_path="C:\Your Path\"
cd /d %your_path%
for /r %%p in (file.exe) do echo %%p

解释:

主要批处理是要执行的。它读取子批次的输出并做出正确的反应。

将搜索的根设置为变量your_path。它将更改目录,然后使用/Recursive 循环搜索当前目录并查找您在括号中设置的文件。如果找到该文件,它将echo 被主文件读取。

欢迎进一步提问:)

【讨论】:

    【解决方案3】:
    setlocal
    set AppDir=
    for /d %%d in ("C:\Program Files\App\App v*") do if exist "%%d\file.exe" set "AppDir=%%d"
    if defined AppDir (
        echo EXISTS - it's in "%AppDir%"
    ) else (
        echo NOT EXIST!
    )
    endlocal
    

    (更新:编辑在变量周围加上引号,以防文件名包含特殊字符,例如&。感谢@aschipfl 指出这一点。另一方面,没有必要使用%%~d而不仅仅是%%d,因为%%d 无论如何都不会有任何引号。)

    【讨论】:

    • 更好的报价处理:if exist "%%~d\file.exe" set "AppDir=%%~d"echo EXISTS - it's in "%AppDir%"...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多