2014-01-17 5 views
0

USB 드라이브를 확인해야하는이 코드 블록이 있는데 내 유틸리티 드라이브로 태그를 지정한 파일이 있으면 실행됩니다 그들이 현재 있는지 확인하기 위해 그들에 robocopy 동기화.파일 존재 여부를 확인할 때 DelayedExpansion 변수를 드라이브 문자로 평가

문제는 파일의 경로를 올바르게 평가하지 못했기 때문입니다. 내가 뭔가를 인쇄 echo "!curDrive!\file.txt" 경우 \file.txt"

관련 (/ 정리 익명 처리) 스크립트의 비트는 다음과 같습니다

@echo off 
Setlocal EnableDelayedExpansion 
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=2 and access=0" get name /format:value') DO (
    SET "curDrive=%%d" 
    echo Looping variable set to %%d 
    echo Current drive set to !curDrive! 
    if exist "!curDrive!\file.txt" (
     ... 
    ) 
) 

내가 디버깅에 넣어하신 에코, 나는 모든 반복에 예상되는 출력을 얻을, 예를 들어,

Looping variable set to L: 
Current drive set to L: 
+0

"drixyype = 2이고 액세스가 0 인"wmic logicaldisk가 "name/format을 얻습니다."라고 생각하는 것으로 의심됩니다. – aphoria

+0

죄송 합니다만, 임시적인 에코를 통해 테스트를 마쳐야한다고 편집자가 생각했습니다. – user3207335

+0

'SET "curDrive = %% d"'바로 뒤에'ECHO %% d'와'ECHO! curDrive!'를 추가하십시오. 당신이 기대하는 것을 보여 주나요? – aphoria

답변

2

이 시도 :

@echo off 
Setlocal EnableDelayedExpansion 
for /f %%d in ('wmic logicaldisk where "drivetype=2 and access=0" get name^|find ":"') DO (
    SET "curDrive=%%d" 
    if exist "!curDrive!\file.txt" (
     Echo found it. 
    ) ELSE (
     Echo File not found. 
    ) 
) 

필터링해야 할 추가 캐리지 리턴을 반환합니다.

+0

Brilliant! 그것이 내가 완전히 이해하지 않고 스크랩을 함께 엮어서 얻은 것입니다. 이것은 트릭을 멋지게했습니다. 덕분입니다. – user3207335

0

정의 된 시스템에서 드라이브의 고유 한 파일을 찾고 robocopy를 실행하는 또 다른 방법이 있습니다. 나머지 드라이브 문자를 추가하십시오.