2015-01-13 2 views
1

.bat 파일에 대한 느낌을 얻으 려하고 디렉토리의 모든 하위 폴더를 반복하고 각 폴더 내의 특정 파일 형식을 삭제할 수 있도록 스크립트를 수정하려고합니다.루프에 중첩되어 있고 하위 폴더를 통해 반복됩니다. 합법적입니까? .bat 스크립트

*Creates "deletethese.txt" via sql command* 
FOR /F "tokens=1 delims=," %%v IN (deletethese.txt) DO (
    For /R C:\Users\Public\Documents\ %%G IN (%%V) DO ECHO Deleting File %%G 
    For /R C:\Users\Public\Documents\ %%G IN (%%V) DO DEL "%%G" 
) 

은 기본적으로는이 SQL에서 생성 txt 파일을 취하고있다 : 여기

내가 현재 가지고 그것이 법적 또는이 같은 뭔가를하지 않으면 내가 알고 싶은 것이의 생각이다 명령을 입력하고 루프를 통해 내용을 가져옵니다. 이 스크립트가 디렉토리의 각 하위 폴더를 통과하고 해당 내용이 존재하는지 확인하고 해당 내용이 있으면 해당 내용을 표시 한 다음 해당 내용을 삭제해야합니다. 또한 "%% G IN (%% V)"가 필요하거나 매개 변수를 생략하고 %% V 만 사용할 수 있습니까?

이것이 최선의 방법인지 확실하지 않거나 제대로 된 트랙에 있다면 나는 여기에 있습니다.

도움 주셔서 감사합니다. 매우 감사!

답변

1

나는 그 내용이있을 경우 디렉토리에 각 하위 폴더를 통해 이동 및 확인이 스크립트를 필요로하고 그들이 할 경우, 그 변수를 에코와 그 내용을 삭제합니다. 내가 알고있는 것처럼

, 당신은 그냥 폴더 (C:\Users\Public\Documents)에 존재 그렇다면, 삭제 deletethese.txt에 지정된 파일 이름을 확인해야합니다.

경우가되는 것은, 다음 FOR 루프이 작업을 수행 할 수 있습니다 : 당신이 내에서 지정된 폴더에 지정된 이름 와 파일을 찾을해야하는 경우

*Creates "deletethese.txt" via sql command* 
SET "PathToCheck=C:\Users\Public\Documents" 
FOR /F "tokens=1 delims=," %%v IN (deletethese.txt) DO (
    REM Verify file exists before attempting to delete. 
    IF EXIST "%PathToCheck%\%%v" (
     ECHO Deleting File %%v 
     DEL "%PathToCheck%\%%v" 
    ) 
) 

그러나, 당신이 할 수 있습니다 :

*Creates "deletethese.txt" via sql command* 
SET "PathToCheck=C:\Users\Public\Documents" 
FOR /F "tokens=1 delims=," %%v IN (deletethese.txt) DO (
    REM Locate all files with the name within the path. 
    FOR /F "usebackq tokens=* delims=" %%A IN (`DIR "%PathToCheck%\%%v" /B /S /A:-D`) DO (
     ECHO Deleting File %%A 
     DEL "%%A" 
    ) 
) 
+0

사람, 구문 및 명령 지식이 있으면 간단하게 보입니다. 고마워,이 일들이 상당히 깨끗해진다. – namedoc

+0

@namedoc - 도와 줘서 다행입니다. 일괄 처리 프로그래밍은 익숙해지기까지 약간의 시간이 걸리지 만, 일단 주위를 둘러 보면 강력합니다. –

+0

좋아, 초기 질문을 잘못 읽은 것 같아서 빠른 질문. 예를 들어 "C : \ Users \ Public \ Documents"디렉토리에 여러 하위 폴더 (test1, test2, test3, test4 등)가 있습니다. 각각의 하위 폴더에는 sql 명령의 "deletethese.txt"안에 들어갈 파일 이름이 있습니다. 따라서/r for 루프를 사용하여 각 하위 폴더와 각 하위 폴더의 루프를 반복해야한다고 생각한 것입니다. 그 맞습니까? – namedoc

1

사실 원래 코드는 거의 정확했습니다.

일괄 처리는 대소 문자를 구분하지 않습니다. (대문자, 소문자의 경우) (대문자 가변 변수) %% v/V는 예외입니다.

이렇게해야 할 일은 모두 %%v입니다. 바이 - 더 -에 의해으로

,

For /R C:\Users\Public\Documents\ %%G IN (%%V) DO ECHO Deleting File %%G 

은 더 나은 디렉토리 이름이 포함 된 경우 따옴표가 필요이 공간 또는 기타가 될 것이기 때문에

For /R "C:\Users\Public\Documents\" %%G IN (%%V) DO ECHO Deleting File %%G 

로 구분 기호.

그리고 ... 원래 파일은 모든 파일을 나열한 다음 삭제하기 시작했습니다. 아마도 더 & 인라인 문 분리기이다

For /R C:\Users\Public\Documents\ %%G IN (%%V) DO ECHO Deleting File "%%G"&del "%%G" 

있다.

+0

필자는 항상 'FOR/R'보다'DIR/B' 결과를 열거하는 것을 선호했습니다. 하나 이상의 다른 점보다 이점이 있습니까? –

+1

@JasonFaulkner :'for/r'을 사용하는 경우는 거의 없지만, 다른'for '옵션과 공유 될 수도 있고 사용되지 않을 수도있는 평범한'for'의 경우에는 ** 차이가 있습니다. 'dir' 접근법을 사용하면 먼저 메모리에리스트를 만든 다음리스트를 처리합니다. 반면에 for는 다음 파일을 얻습니다. 결과적으로 프로세스 자체가 새 파일을 추가하여 디렉토리를 수정하는 경우 새 파일이 현재 나타나고 디렉토리에서 다음 파일로 처리 될 가능성이 있지만'dir'에는 새 파일이 들어 가지 않습니다 그 목록. – Magoo

관련 문제