如何在本地驱动器中搜索目录的存在?

时间:2014-04-14 17:38:15

标签: windows batch-file

我正在试图弄清楚如何确定Windows 2008计算机的任何本地驱动器上是否存在“\ Program Files(x86)\ Apache Software Foundation \ Apache2.2”目录。

我以为它会是这样的:

for /f "skip=2 tokens=2 delims=," %%A in (
 'wmic logicaldisk get name /format:csv'
) DO (
  echo %%A
  IF EXIST "%%A\Program Files (x86)\Apache Software Foundation\Apache2.2" (
    echo FOUND ON %%A
  )
)

但它简单地回应了驱动器号。

对于这个特定的项目,我是一个陷入Windows世界的Unix人,请帮助!


我从一位同事那里得到了一些帮助,以下是它的解决方法:

SET FOUNDIT=FALSE
SET ERRORLEVEL=

FOR /F "skip=2 tokens=2 usebackq delims=," %%i IN (
    `wmic logicaldisk where "drivetype=3" get name^,size /format:csv`
) DO (
    if /i "%foundit%" equ "true" exit /b
    CALL :APACHE %%i
    if %ERRORLEVEL% equ 0 set FOUNDIT=TRUE
)

IF %FOUNDIT% equ "TRUE" exit /B ELSE exit /B 1

:APACHE
    set DRIVE=%1
    REM echo DRIVE is %DRIVE%
    if "%DRIVE%" equ "" exit /B
    set APACHEPATH=%DRIVE%\Program Files (x86)\Apache Software Foundation\Apache2.2
    IF EXIST "%APACHEPATH%" CALL :FOUNDIT "%APACHEPATH%"

    exit /B

:FOUNDIT
    echo FOUND APACHE on %1
    for /f "tokens=*" %%x in (%1) do set APACHEINSTALLDIR=%%x
    set FOUNDIT=TRUE
    exit /B

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

wmic有一个丑陋的行为:它没有写出正确的换行符,所以如果你使用最后一个令牌,你会遇到问题。

解决方法:不要使用最后一个令牌(或强制它添加另一个令牌,您不能使用,此处为size)。由于您没有使用最后一个令牌,因此它无法正常结束并不重要

for /F "skip=2 tokens=2 delims=," %A in ('wmic logicaldisk where "drivetype=3" get name^,size /format:csv') DO (

(你必须逃避逗号)。

我添加了where "drivetype=3",因此它只会检查HardDisks(没有CD / DVD / Flash),但你可以将其删除。

答案 1 :(得分:0)

另一种方式有点简单但安全且更快,因为WMIC方法:

for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
if exist %%a: (
  IF EXIST "%%a:\Program Files (x86)\Apache Software Foundation\Apache2.2\" (
     echo FOUND ON [%%a:])))
相关问题