2013-06-26 4 views
1

배치 파일을 하위 디렉토리로 복사하고 실행 한 다음 배치 파일을 삭제하려면 어떻게해야합니까?루프 배치 파일

나는 자동으로에있는 폴더의 폴더 아이콘을 변경하는 배치 파일에 있어요 아래에 표시됨 :. 많은 문제가 발견 후

@ECHO OFF 

attrib +s "%CD%" 
set ICODIR=%CD%\Icon\ 

for %%F in ("%ICODIR%"*.ico) do set ICO=%%~nxF 

set ICOINI=Desktop.ini 

IF EXIST Desktop.ini (
    attrib -s -h %ICOINI% 
) 

echo [.ShellClassInfo] > %ICOINI% 
echo IconResource=%ICODIR:~2%%ICO%>>%ICOINI% 
echo InfoTip=%ICO:~0,-4%>>%ICOINI% 

attrib -a +s +h %ICOINI% 

Pause 

이 작동, 그것은 폴더를 생성하지 않습니다 아이콘이 해당 디렉토리 내에서 삭제 될 때까지

저는 모든 하위 디렉토리를 나열하고 이름을 저장하는 for 루프를 작업하려고했습니다. 그것은 루트 디렉토리를 먼저 나열합니다. 루트 디렉토리를 건너 뛰려면 어떻게해야합니까? 아래에 표시된 코드 :

@ECHO OFF 

for /R /D "delims=\" %%d IN (%CD%) do echo %%~nd 

Pause 

EDIT : 파일이 마지막 폴더에서만 만들어진 이유는 무엇입니까?

for /D /R "%cd%" %%d IN (*) do (

    set something=%%~nd 
    echo TEST>%something%\Desktop.txt 
) 
+0

첫 번째 스크립트는 저에게 맞습니다 (Win7). 작동하기 전에 무엇을 삭제해야합니까? – mojo

+0

@Jubjub Bandersnatch 내가 실행할 때 폴더 아이콘 (Win7)을 실제로 변경하는 것 외에는 수행 할 작업을 정확히 수행합니다. 폴더 내에서 파일이 삭제 될 때만 아이콘이 표시됩니다. –

+0

그래도 스크립트가 아닌 Explorer와 관련된 문제가됩니다. – mojo

답변

2

이 시도 :

for /D /R "%cd%" %%d IN (*) do echo %%~d 

%cd%가 나열되지 않습니다.

+0

잘 작동합니다! 최종 변수를 %% ~ nd로 변경하여 폴더 이름을 얻었습니다. 고마워요. –

0

음 .. 재미있는 시나리오.

forfiles 명령을 http://ss64.com/nt/forfiles.html에서 찾아보십시오. 그러나 for 명령을 사용하면 이것이 가장 좋은 해결책입니다.

:loop 
set /a count+=1 

for /f "tokens=%count% delims=\" %%a in ("%CD%") do (echo %%a > 
output.txt) 

if %count% == 8 exit 
goto :loop 

참고 :이 답변이 가장 좋지만 작동합니다. 이 인스턴스는 드라이브 문자에서 최대 7 개의 디렉토리를 확인하지만 if 수를 증가시켜 검사합니다.

실례합니다. 도움이 되었기를 바랍니다.

너의 Mona.

+0

서브 디렉토리에 약 1,000-2,000 개의 폴더가 있긴하지만 그것은 트릭을 수행하는 것처럼 보입니다. 내가 루프를 테스트하고 그것을 테스트해야합니다! –

+0

와우,'forfiles'는 때때로'for/r' 명령에 대해 매우 유용합니다. – Monacraft

0

IF 문을 추가하면 검색 루트를 필터링 할 수 있다는 것을 발견했습니다. 귀하의 예는 전혀 나를 위해 작동하지 않았기 때문에 조금 수정해야했습니다./R은 루프 변수에 검색의 현재 디렉토리 (% CD % 제외)를 앞에 붙입니다. 그래서 일부 센티널 값을 제거해야했습니다. 이름에 "ZZZZZ"가 포함 된 파일을 찾지 못할 것으로 생각했지만 파일 시스템에는 다른 감시가 필요할 수 있습니다.

FOR /R "%CD%" %%d IN (ZZZZZ) do @(SET "D=%%~d" & SET "D=!D:\ZZZZZ=!" & IF NOT "!D!"=="%CD%" @ECHO !D!)