2009-08-29 2 views
1

나는 다음과 같이 프로그램을 검색하고 싶다.명령 : 프로그램 및 변수 디렉토리 검색

cd "C:\" 
for /f "delims=" %%f in ('dir /b /s myprogram.exe') do (
) 

첫 번째 문제 : 모든 하드 드라이브를 검색 할 수있게하고 싶다. ('cd 내 컴퓨터'또는 이와 비슷한 것?)

즉, 해당 프로그램이있는 디렉토리의 변수를 만들어야합니다.

어떻게 배치/cmd에서 할?

답변

1

이 스크립트는 전체 경로를 출력합니다 :

@echo OFF 

for %%D in (c,d,e) do ( 
    If exist %%D:\ (  
     for /f "delims=" %%f in ('dir /b /s %%D:\%1 2^> NUL') do (
      @echo %1 found: %%~dpf 
     ) 
    ) 
) 

%%~dpf이 발견 된 각 사건에 대한 파일의 경로를해야합니다 (하나 이상있을 수 있습니다). 당신이이 경로에 따라 행동해야하는 경우 당신은 몇 가지 옵션이 있습니다 :

  1. 파일의 전체 경로를 포함하는 변수로 %%~dpf를 사용하여 @echo %1 found: %%~dpf 라인 후 파일 처리 명령을 추가합니다.

  2. 임시 텍스트 파일 (@echo %%~dpf >> temp.out)에 경로를 쓴 다음 다시 다른 for 루프를 읽어서 처리하십시오.

  3. 경로를 로컬 환경 변수 (set FILE_PATHS=!FILE_PATHS!;%%~dpf)에 연결 한 다음 다른 for 루프에서 해당 var을 처리하여 처리하십시오.

+0

두 번째로 나는 단지 그 다음에 'for'에 'set /p=

+0

'temp.out' 파일에 대해 또 다른'for/f' 루프가 필요합니다. –

1

"cd C : \"에 문제가 있습니다.이 드라이브는 C : 드라이브에있는 경우에만 작동하지만 다른 드라이브에있는 경우에는 작동하지 않습니다. 그에 대한 해결책은 먼저 드라이브의 편지를 작성하는 것입니다 simpliest 방법이이 방법을 수행하는 것입니다 :

for %%D in (c,d,e,f,g,h,i,j,k,l,m,o) do (
    %%D: 
    cd %%D:\ 
     for /f "delims=" %%f in ('dir /b /s myprogram.exe') do (
     ) 
) 

다음은 모든 드라이브를 검색합니다. 사용할 수도 있습니다

for %%D in (c,d,e,f,g,h,i,j,k,l,m,o) do (
    If exist %%D:\ do (
     %%D: 
     cd %%D:\ 
     for /f "delims=" %%f in ('dir /b /s myprogram.exe') do (
     ) 
    ) 
) 

희망이 있습니다. 파일이 발견되는 경우

+0

'cd/d %% D :'; '/ d' 스위치는 디렉토리 외에도 지정된 드라이브로 변경됩니다. 명령 줄에서'cd /?'를 입력하여'/ d' 스위치가 여러분의 OS에서 지원되는지 확인하십시오. –

+0

그러나 myprogram이 위치한 디렉토리의 변수를 만드는 방법은 무엇입니까? –

+0

두 번째 코드에서 %% f는 "myprogram.exe"의 경로 (예 : "D : \ folder \ myprogram.exe")로 바뀝니다. "% ~ pf"(인용 부호가 붙어 있기 때문에 ~를 꺼내어 경로의 인용 부호가없는 공백이 코드에 혼란을 일으킬 수 있습니다) 폴더를 요청합니다 (예 : "E : \ Path \ To \ MyProgFolder " 여기에 진짜 문제는, 당신은 일반적으로 코드 내에서 변수를 할당 할 수 없다는 것입니다. 거기에"setlocal enabledelayedexpansion "코드가 있지만, 저는 정말로 권장하지 않습니다. 제 해결책은/임시 파일을 읽거나 인수로 다른 박쥐 파일로 리다이렉트 –