하나를 제외한 모든 파일을 삭제하는 MS-DOS 명령


25

하나를 제외한 모든 파일을 삭제할 수있는 MS-DOS 명령이 있습니까?

다음 파일을 예로 들어 보겠습니다.

a.001  
a.002  
a.003  
a.exe  
a.c  

를 제외한 모든 파일을 삭제하는 명령이 a.c있습니까?

답변:


36

forif명령을 사용하여이를 수행 할 수 있습니다 .

for %i in (*) do if not "%~i" == a.c del "%~i"

이것은 현재 디렉토리를 통과하고 각 파일 이름을 ac와 비교합니다. 일치하지 않으면 파일이 삭제됩니다.


+1 간단한 삭제를 위해 이것을 사용하려고 생각하지 않았습니다 ... 여기에 좋은 답변이 많이 있습니다!
윌리엄 힐섬

4
@Wil, for정기적으로 사용하기 시작하면 모든 종류의 미친 시나리오가 생깁니다 . :)
Kevin

4
@Mike, "% ~ nxi == ac del % i가 아닌 경우 (A : \ Some \ Path \ *에서 % i의 경우)"와 같은 것을 원합니다. 경로는 *로 끝나서 해당 폴더의 파일을 가져옵니다. 경로가없는 이름 인 % ~ nxi에 대한 비교입니다. 이와 같은 파괴적인 for 루프의 경우 "for ... do if ... del % i"명령을 실행하기 전에 "for ... do echo % i"를 수행하여 어떤 파일이 영향을 받는지 확인하는 것이 좋습니다.
케빈

1
더 나은 사용del "%i"
Mugen

1
IF대소 문자를 구분하지 않는 명령문 이 필요한 경우로 변경하십시오 IF /I.
jep

16

모든 것을 삭제하기 전에 파일을 읽기 전용으로 설정할 수 있습니다

attrib +r a.c
del *.*
attrib -r a.c

10

아닙니다. 디렉토리를 만들고 중요한 파일을 복사하여 지 웁니다 . 파일을 다시 이동하십시오. 그런 다음 임시 파일을 삭제하십시오.

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp

1
+1 조잡하고 기술적으로 @Feiht 도둑은 더 나은 방법을 말합니다 (또한 거기에 +1을주었습니다). 그러나 속도 때문에 이것이 내가하는 방식입니다.
윌리엄 힐섬

3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f

1
[]는 어떤 이점이 있습니까?
barlop

1
@barlop : %f파일 이름에 공백이있을 수 있습니다.
paradroid

@paradroid no는 [4 r] == [4 r] echo equal 경우와 같이 일부에서 비슷한 것을 보았습니다. 대신에 []. 나는 왜 그런지 짐작할 수 있지만, 그것을하는 누군가로부터 그것을 듣고 싶습니다.
barlop

@ barlop : 방금 입력 한 내용을 모르겠지만 대괄호는 따옴표처럼 작동합니다.
paradroid

@paradroid C : \> if [4 r] == [4 r] echo abc <ENTER>는 "r] == [4가 예상치 않은 결과"를 나타냅니다. C : \> if "4 r"== "4 r"echo abc는 결과 abc를 제공합니다. 그렇다면 인용 부호처럼 작동하는 방식은 무엇입니까? C : \> if [ab] == [ab] echo abc <-가 작동하지 않으면 비슷한 오류가 발생합니다. b] == [현재로서는 예상치 못한 결과였습니다. 그렇다면 그들이 따옴표처럼 작동한다고 생각하는 이유는 무엇입니까?
barlop

1
FOR /F "tokens=1-4" %%a in ('dir /a:-d /b /s %app_path%^|find /v "%file%"') DO Del /q %%a %%b %%c %%d

그것이 그것이 무엇인지 설명한다면 이것이 도움이 될 것이라고 생각합니다. 폴더 트리 전체를 가로 지르는 것처럼 보입니다. %app_path%그리고 %file%각각 횡단에 트리의 루트 및 회피 삭제에 파일입니다. 는 무엇이며 ^파일 당 4 개의 토큰을 Del명령에 전달하는 이유는 무엇입니까 ?
LarsH

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.