2014-04-14 3 views
2

"\ Program Files (x86) \ Apache Software Foundation \ Apache2.2"디렉토리가 Windows 2008 시스템의 로컬 드라이브에 있는지 확인하는 방법을 알아 내려고합니다. 로컬 드라이브에서 디렉토리가 있는지 어떻게 검색합니까?

는 나는 이런 식으로 뭔가있을 거라고 생각 :

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 환경에 갇혀있는 유닉스 사용자입니다. 제발 도와주세요!


나는 여기가 해결 한 방법은, 동료의 도움을 얻었다 : 도움을

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

경로,' "%% \ Program 파일 (x 86) \ 아파치 따옴표로 묶어야합니다 Software Foundation \ Apache2.2 "' – admdrew

+0

IF EXIST 파일 경로를 따옴표로 묶는 코드를 방금 업데이트했지만 IF EXISTS가 존재하는 디렉토리를 찾지 못하는 경우 %% A 만 표시됩니다. –

+0

'echo %% A' 대신'echo-%% A-'라고 쓰고 대격변을 봅니다 ... 더 명확하게 보려면'echo off'를 제거하십시오. – Stephan

답변

3

wmic에는 wickly behavior가 있습니다. 적절한 줄 바꿈을 쓰지 않으므로 마지막 토큰을 사용하면 문제가 발생합니다.

해결 방법 : 마지막 토큰을 사용하지 마십시오 (사용하지 않는 다른 토큰을 추가하려면 여기, size). 마지막 토큰을 사용하지 않기 때문에, 그것이 종료되지 않는 문제가되지 않습니다 제대로

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

(당신이 쉼표를 탈출해야합니다).

나는 where "drivetype=3"을 추가 했으므로 하드 디스크 (CD/DVD/플래시 없음) 만 검사 할 수 있지만이를 남겨 둘 수 있습니다.

+0

귀하의 의견을 보내 주셔서 감사합니다. –

0

다른 방법으로 안전하고 훨씬 더 빠르게 WMIC 방법으로하지만, 비트 simplist : 공백

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:]))) 
+0

빨리? 아마도. 그러나 "디스크 삽입"을 여러 번 해보라고합니다. – Stephan

+0

당신이 맞습니다 @ 스 테판은 +1을 보지 못했습니다. – SachaDee

관련 문제