명령에서 예외를 제외하고 모두 삭제

명령에서 예외를 제외하고 모두 삭제

약 50개의 파일(NAME1.jpg, NAME2.jpg, NAME3.jpg...)이 들어 있는 폴더가 있습니다.

실행되는 프로그램이 있고 각 파일을 약 4개의 다른 파일로 분할하고 이름을 다시 지정합니다(NAME1-0.jpg, NAME1-1.jpg, NAME2-0.jpg, NAME2-1.jpg...).

*-0.jpg 파일이 아닌 모든 파일을 실행하고 삭제하는 .bat 파일을 만들고 싶습니다.

지금까지 내가 가장 가까운 것은 다음과 같습니다.

for %i in (*) do if not %i == "*.jpg" del "%i"

하지만 이렇게 하면 저장하려는 -0.jpg 파일을 포함하여 폴더의 모든 파일이 삭제됩니다.

사용하기에 더 좋은 라인이 있나요?

답변1

*-0.jpg 파일이 아닌 파일을 모두 삭제하고 싶어요.

실행되는 프로그램이 있고 각 파일을 약 4개의 다른 파일로 분할하고 이름을 다시 지정합니다(NAME1-0.jpg, NAME1-1.jpg, NAME2-0.jpg, NAME2-1.jpg...).

다음 배치 파일(test.cmd)을 사용합니다.

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /b NAME?-?.jpg') do (
  rem get file name
  set _fname=%%~ni
  rem get last 2 characters of file name
  set _last2=!_fname:~-2!
  if [!_last2!] NEQ [-0] del "%%i"
  )

예:

F:\test>dir *.jpg
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

08/12/2015  23:51                 0 NAME1-0.jpg
08/12/2015  23:51                 0 NAME1-1.jpg
08/12/2015  23:51                 0 NAME2-0.jpg
08/12/2015  23:51                 0 NAME2-1.jpg
               4 File(s)              0 bytes
               0 Dir(s)  1,776,919,613,440 bytes free

F:\test>test
F:\test>dir *.jpg
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

08/12/2015  23:51                 0 NAME1-0.jpg
08/12/2015  23:51                 0 NAME2-0.jpg
               2 File(s)              0 bytes
               0 Dir(s)  1,776,919,613,440 bytes free

추가 자료

  • Windows CMD 명령줄의 AZ 인덱스- Windows cmd 라인과 관련된 모든 것에 대한 훌륭한 참고 자료입니다.
  • 디렉토리- 파일 및 하위 폴더 목록을 표시합니다.
  • 활성화 지연확장- 지연된 확장으로 인해 구문 분석 시간이 아닌 실행 시간에 변수가 확장됩니다.
  • /f에 대해- 다른 명령의 결과에 대해 명령을 반복합니다.
  • 만약에- 조건부로 명령을 수행합니다.
  • 세트- CMD 환경 변수를 표시, 설정 또는 제거합니다. SET로 변경한 내용은 현재 CMD 세션 동안에만 유지됩니다.

관련 정보