คำสั่ง MS-DOS เพื่อลบไฟล์ทั้งหมดยกเว้นไฟล์เดียว


25

มีคำสั่ง MS-DOS ที่ให้ฉันลบไฟล์ทั้งหมดยกเว้นไฟล์เดียวหรือไม่?

พิจารณาเป็นตัวอย่างไฟล์ต่อไปนี้:

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

มีคำสั่งให้ลบไฟล์ทั้งหมดยกเว้นa.cหรือไม่?

คำตอบ:


36

คุณสามารถใช้คำสั่งforและifเพื่อให้บรรลุสิ่งนี้:

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

สิ่งนี้จะผ่านไดเรกทอรีปัจจุบันและเปรียบเทียบแต่ละชื่อไฟล์เป็น ac หากไม่ตรงกันไฟล์จะถูกลบ


+1 ไม่เคยคิดว่าจะใช้สิ่งนี้เพื่อการลบแบบง่าย ๆ ... คำตอบที่ดีมากมายที่นี่
William Hilsum

4
@ วิลเมื่อคุณเริ่มใช้forเป็นประจำคุณจะพบกับสถานการณ์ที่บ้าคลั่งทุกประเภท :)
Kevin

4
@ ไมค์คุณต้องการบางอย่างเช่น "สำหรับ% i ใน (A: \ Some \ Path \ *) ทำถ้าไม่ใช่% ~ nxi == ac del% i" โปรดทราบว่าเส้นทางสิ้นสุดใน * เพื่อรับไฟล์ในโฟลเดอร์นั้น และการเปรียบเทียบนั้นเทียบกับ% ~ nxi ชื่อที่ไม่มีเส้นทาง สำหรับการทำลายลูปแบบนี้ขอแนะนำให้ทำ "for ... do echo% i" เพื่อดูว่าไฟล์ใดบ้างที่จะได้รับผลกระทบก่อนที่จะรันคำสั่ง "for ... do if ... del% i"
Kevin

1
ใช้งานได้ดีขึ้นdel "%i"
Mugen

1
หากคุณจำเป็นต้องมีคำสั่งให้เป็นกรณีตายที่เปลี่ยนไปIF IF /I
jep

16

คุณสามารถตั้งค่าไฟล์ให้อ่านได้อย่างเดียวก่อนที่จะลบทุกอย่าง

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

10

ไม่ไม่มี ฉันต้องการให้ไดเรกทอรีคัดลอกไฟล์ที่สำคัญเป็นมันลบ และย้ายไฟล์กลับ จากนั้นลบไฟล์ temp

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

1
+1 น้ำมันดิบและเทคนิค @Feiht ขโมยบอกวิธีที่ดีกว่าในการทำมัน (เช่นให้ +1 ที่นั่น) แต่สำหรับความเร็วนี่คือวิธีที่ฉันจะทำ
William Hilsum

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

1
[] มีประโยชน์อะไรบ้าง?
barlop

1
@barlop: %fอาจมีช่องว่างในชื่อไฟล์
Paradroid

@paradroid ไม่ว่าจะไม่ช่วยอะไรถ้า [4 r] == [4 r] echo เท่ากันฉันเคยเห็นบางอย่างที่คล้ายกันทำเช่นเดียวกับ แทน []. ฉันเดาได้ว่าทำไม แต่ฉันอยากได้ยินจากคนที่ทำ
barlop

@barlop: ฉันไม่รู้ว่าคุณเพิ่งพิมพ์ไปที่นั่น แต่วงเล็บเหลี่ยมทำงานเหมือนเครื่องหมายคำพูด
Paradroid

@paradroid C: \> ถ้า [4 r] == [4 r] echo abc <ENTER> ให้ผลลัพธ์ "r] == [4 ไม่คาดคิดในเวลานี้" ในขณะที่ C: \> ถ้า "4 r" == "4 r" echo abc ให้ผลลัพธ์ abc แล้วอะไรที่ทำให้คุณคิดว่าพวกเขาทำงานเหมือนเครื่องหมายคำพูด แม้ C: \> ถ้า [ab] == [ab] echo abc <- ไม่ทำงานก็ให้ข้อผิดพลาดคล้ายกัน b] == [a ไม่คาดคิดในเวลานี้ แล้วอะไรทำให้คุณคิดว่าพวกเขาทำงานเหมือนคำพูด?
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%เป็นรูทของทรีเพื่อสำรวจและไฟล์เพื่อหลีกเลี่ยงการลบตามลำดับ คืออะไร^และทำไมเราส่งโทเค็นสี่รายการต่อไฟล์ไปยังDelคำสั่ง
LarsH

0

สำหรับความเร็วฉันใช้delen :

delen /! a.c

TCC / LEยังมีdelคำสั่งที่มีประสิทธิภาพมากขึ้น:

del /[!a.c] *

del /[!a.c] *yeldsInvalid switch - "[!a.c]".
karlphillip

@karlphillip: มันทำงานได้ดี"ในทีซีซี / LE"
Paradroid

Aha! ไม่เห็นความคิดเห็นนั้นมาก่อนขอบคุณมาก
karlphillip
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.