2017-09-25 6 views
0

배치 스크립트를 사용하여 특정 폴더의 파일을 삭제해야하지만 마지막 파일을 생성해야합니다. 우리 서버에는 로그를 계속 생성하는 IIS 폴더가 있으며, 항상 마지막 폴더를 유지해야하지만 이전 폴더는 삭제해야합니다. 현재폴더의 파일을 지우지 만 마지막으로 생성 된 파일은 보존하십시오.

우리가 (이 경우, 모든 파일 C 내부 : \ 온도) : 특정 폴더의 모든 파일 삭제이 스크립트 우리가 마지막을 유지하기 위해 그 코드를 편집 할 수있는 방법을

del /q "C:\Temp\*" 
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q 

을 폴더에 생성 된 파일?

도움을 주셔서 감사합니다.

@echo off 
set "SourceFolder=C:\Temp" 
for /F "skip=1 delims=" %%I in ('dir "%SourceFolder%\*" /A-D /B /O-D 2^>nul') do del "%SourceFolder%\%%I" 
set "SourceFolder=" 

명령 DIR 베어 단지와 /B (디렉토리 속성 하지 세트 디렉토리 항목) 때문에 옵션의 이름을 /A-D 파일의 목록을 (출력 :

+0

최신 파일을 찾아 해당 파일이 아닌 파일을 모두 삭제 하시겠습니까? –

+0

검색, 연구, 작성 및 코드 직접 작성해야합니다. 필요한 작업을 수행하지 않고 추가하도록 요청하는 파일을 게시하는 것은 직접 코드 요청이며 여기서는 주제가 아닙니다. – Compo

+0

당신은 파일을 지우고 싶다고 말하면,'rmdir'을 사용하면 디렉토리를 지우는 것처럼 말이되지 않습니다 ... – aschipfl

답변

0

이 배치 파일은 하나 개의 솔루션을 제공합니다 형식)은 /O-D이므로 마지막 수정 날짜까지 역순으로 정렬됩니다. 즉, 가장 최근에 수정 된 파일의 이름이 먼저 출력됩니다.

모든 파일을 포함하지 않는 지정된 폴더 2>nul를 사용하여 장치 NUL에 STDERR을 처리하는 기록 오류 메시지를 재전송하여 억제되는 경우 하여 오류 메시지가 출력 DIR. 리디렉션 연산자 >은 여기에서 캐럿 문자 ^을 사용하여 이스케이프해야하며 Windows 명령 인터프리터에서 에 대한 명령 줄 전체를 처리 할 때 리터럴 문자로 해석해야합니다. 나중에 에 대해dir "%SourceFolder%\*" /A-D /B /O-D 2>nul 명령을 백그라운드에서 별도의 명령 프로세스로 실행하고 STDOUT에 기록 된 출력을 캡처합니다.

옵션 skip=1은 캡쳐 된 출력의 첫 번째 행을 건너 뜁니다. 이는 최신 수정 된 파일의 파일 이름을 무시한다는 것을 의미합니다. 모든 전체 파일 이름이위한 에 의해 실행 된 명령에 의해 사용을 위해 루프 변수 I에 할당해야합니다으로 옵션 delims=에 대한

공간/탭으로 구분 된 문자열로 촬영 한 라인의 기본 분할 업을 사용할 수 없습니다.

del은 파일을 삭제합니다.

사용 된 명령과 그 작동 방법을 이해하려면 명령 프롬프트 창을 열고 다음 명령을 실행하고 각 명령에 대해 표시된 모든 도움말 페이지를 모두주의 깊게 읽어야합니다.

  • set /?
  • for /?
  • dir /?
  • echo /?del /?
  • 관련 문제