我正在试图弄清楚如何确定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
感谢您的帮助!
答案 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:])))