“ rm -rf” เทียบเท่ากับ Windows หรือไม่


509

ฉันต้องการวิธีลบโฟลเดอร์และลูก ๆ ซ้ำ ๆ

มีเครื่องมือที่สร้างไว้ล่วงหน้าสำหรับสิ่งนี้หรือฉันต้องเขียนหรือไม่

DEL /S ไม่ลบไดเรกทอรี

DELTREE ถูกลบจาก Windows 2000+


1
del / s (a) ไม่ทำงานเลย (มีเฉพาะในบางรุ่น) หรือ (b) ออกจากไดเรกทอรีระดับบนสุด แต่ลบทุกอย่างที่อยู่ข้างใต้หรือ (c) ออกจากไดเรกทอรีทั้งหมดขณะที่ลบไฟล์ทั้งหมดหรือไม่
wnoise

@Aaron ตอบ c คุณต้องใช้ rmdir / s เพื่อลบไดเรกทอรีและไฟล์
Wedge

31
ไม่ใช่format c:การติดตั้ง Linux จริงๆเหรอ? ฉันล้อเล่นแน่นอน
Basile Starynkevitch

คำตอบ:


694

RMDIR หรือ RD หากคุณใช้ Command Prompt แบบคลาสสิก (cmd.exe):

rd /s /q "path"

RMDIR [/ S] [/ Q] [drive:] path

RD [/ S] [/ Q] [ไดรฟ์:] พา ธ

/ S ลบไดเร็กทอรีและไฟล์ทั้งหมดในไดเร็กทอรีที่ระบุนอกเหนือจากไดเร็กทอรีเอง ใช้เพื่อลบทรีไดเรกทอรี

/ Q โหมดเงียบอย่าถามว่าตกลงเพื่อลบทรีไดเรกทอรีด้วย / S

หากคุณกำลังใช้ PowerShell คุณสามารถใช้Remove-Item(ซึ่งใช้นามแฝงdel, erase, rd, ri, rmและrmdir) และใช้เวลา-Recurseโต้แย้งที่สามารถ shorted ไป-r

rd -r "path"

84
เป็นค่าชี้ให้เห็นว่าสำหรับไฟล์จำนวนมาก rmdir / s / q โดยทั่วไปจะเร็วกว่าการดำเนินการ "select dir, shift + delete" ที่เทียบเท่าใน explorer อย่างมีนัยสำคัญ
Wedge

9
สิ่งนี้จะไม่ลบไฟล์อย่างที่ rm -rf ทำและมันจะคืนค่าที่ไม่เป็นศูนย์เมื่อไม่มีไดเรกทอรีดังนั้นrd /s /q foo && echo "yay"จะล้มเหลวหากไม่มีไดเรกทอรี "foo"
Dirk Groeneveld

17
เกิดอะไรขึ้นถ้าผบ. ไม่ว่างเปล่าและบางไฟล์ได้รับAccess is deniedและคนอื่น ๆThe process cannot access the file because it is being used by another process?
Eugene

6
ฉันเพิ่งลองสิ่งนี้ในเจ็ดและคุณต้องทำ / S และ / Q (ตัวพิมพ์ใหญ่)
นายอำเภอฟอร์ด

2
ประหลาดใจที่นี่ ฉันรู้ว่าฉันลองคำสั่งนี้และมันไม่ทำงานหากมีไฟล์ในไดเรกทอรีต้นไม้ ตอนนี้ฉันกลับไปแล้ว . . อย่างน่าอัศจรรย์ดูเหมือนว่าจะทำงาน ใครบ้างที่มีพฤติกรรมไม่สอดคล้องกับสิ่งนี้!
Alex Hall

139

ผู้ดูแลระบบ:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

ทำงานได้กับทุกสิ่งรวมถึงไฟล์ sys

แก้ไข: ฉันจริง ๆ แล้วพบวิธีที่ดีที่สุดซึ่งยังแก้ปัญหาเส้นทางยาวเกินไปเช่นกัน:

mkdir \empty
robocopy /mir \empty folder

3
ผู้กล้าของฉัน! และหนึ่งเคล็ดลับ: คุณสร้างโฟลเดอร์ว่างของคุณที่ C: \ empty จากนั้นเมื่อเข้าไปในแต่ละโฟลเดอร์ที่บ้าคุณสามารถทำได้robocopy /mir c:\empty .
Léon Pelletier

takeownช่วยให้ฉันเป็นฉันคัดลอกโฟลเดอร์จากระบบ Linux กับ rsync โดยไม่ได้ตั้งใจและฉันก็ไม่มีสิทธิที่จะลบโฟลเดอร์นั้น ... ไม่ได้ robocopy ทำงาน ขอบคุณ
Jarda

1
คำตอบที่ดีมาก มันได้ผล. (คำตอบอื่น ๆ ทั้งหมดบนหน้าไม่ได้) แต่ cacls เลิกใช้แล้ว เป็นไปได้ไหมที่จะตอบคำถามร่วมสมัยได้ไหม? ตัวแปรที่สองใช้งานได้แล้วและไม่ได้รับการสนับสนุน
Gangnus

นี่ไม่ได้ทำอะไรให้ฉันเลย ใครช่วยกรุณาอธิบายว่ามันควรจะทำงานอย่างไร (robocopy) - มันอาจลบเนื้อหาของโฟลเดอร์ แต่ไม่ใช่โฟลเดอร์ด้วยตัวเอง
Ralf

114

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S ลบไดเร็กทอรีและไฟล์ทั้งหมดในไดเร็กทอรีที่ระบุนอกเหนือจากไดเร็กทอรีเอง ใช้เพื่อลบทรีไดเรกทอรี

  • /Q โหมดเงียบอย่าถามว่าตกลงเพื่อลบแผนผังไดเร็กทอรีด้วยหรือไม่ /S


13
ขอบคุณสำหรับคำอธิบายพารามิเตอร์ คำตอบที่ยอมรับไม่ได้ทำเช่นนี้โชคไม่ดี
โธมัส

1
คำตอบที่ง่ายและสมบูรณ์แบบสำหรับคำถาม ควรเป็นที่ยอมรับ
Artif3x


19

ไปที่พา ธ และทริกเกอร์คำสั่งนี้

rd /s /q "FOLDER_NAME"

/ s: ลบไดเรกทอรีที่ระบุและไดเรกทอรีย่อยทั้งหมดรวมถึงไฟล์ใด ๆ ใช้ / s เพื่อลบต้นไม้

/ q: รัน rmdir ในโหมดเงียบ ลบไดเรกทอรีโดยไม่มีการยืนยัน

/? : แสดงวิธีใช้ที่พรอมต์คำสั่ง




6

คำตอบที่ยอมรับนั้นยอดเยี่ยม แต่ถ้าคุณติดตั้ง Node คุณสามารถทำสิ่งนี้ได้อย่างแม่นยำมากขึ้นด้วยโหนดไลบรารี "rimraf" ซึ่งช่วยให้รูปแบบกลม ถ้าคุณใช้สิ่งนี้มาก (ฉันทำ) เพียงแค่ติดตั้งทั่วโลก

yarn global add rimraf

ตัวอย่างเช่นรูปแบบที่ฉันใช้อย่างต่อเนื่อง:

rimraf .\**\node_modules

หรือสำหรับสายการบินเดียวที่ให้คุณหลบการติดตั้งทั่วโลก แต่ใช้เวลานานขึ้นเล็กน้อยสำหรับการดาวน์โหลดแพ็คเกจแบบไดนามิก:

npx rimraf .\**\node_modules

2
วิธีการแก้ปัญหาที่มั่นคงในขณะที่มันเป็นระบบปฏิบัติการไม่เชื่อเรื่องพระเจ้า
Denialos

5

ลองคำสั่งนี้:

del /s foldername

ทำงานให้ฉันด้วยการรวมกันด้วย w / rmdir / s / q เนื่องจากไฟล์บางไฟล์ถูกล็อคและ rmdir จะล้มเหลวในไฟล์เหล่านั้น del / foldername ทำการล้างไฟล์ที่ถูกล็อคซึ่งอนุญาตให้ rmdir กำจัด root dir ดี
bbqchickenrobot


4

ก่อนอื่นมาทบทวนกันว่าrm -rf:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

มีสามสถานการณ์ที่rm -rfใช้กันโดยทั่วไปซึ่งคาดว่าจะส่งคืน0:

  1. เส้นทางที่ระบุไม่มีอยู่
  2. เส้นทางที่ระบุมีอยู่และเป็นไดเรกทอรี
  3. เส้นทางที่ระบุมีอยู่และเป็นไฟล์

ฉันจะเพิกเฉยต่อสิ่งที่ได้รับอนุญาตทั้งหมด แต่ไม่มีใครใช้สิทธิ์หรือพยายามที่จะปฏิเสธการเข้าถึงการเขียนสิ่งต่าง ๆ ใน Windows ต่อไป (ตกลงนั่นเป็นเรื่องตลก ... )

ก่อนอื่นให้ตั้งค่าERRORLEVELเป็น 0จากนั้นลบพา ธ หากมีอยู่ใช้คำสั่งที่แตกต่างกันขึ้นอยู่กับว่าเป็นไดเรกทอรีหรือไม่ IF EXISTไม่ได้ตั้งค่าERRORLEVELเป็น 0 หากไม่มีเส้นทางดังนั้นการตั้งค่าเป็นERRORLEVEL0 ก่อนจึงจำเป็นต้องตรวจสอบความสำเร็จในวิธีการเลียนแบบrm -rfการใช้งานปกติ การปกป้องRDด้วยIF EXISTเป็นสิ่งจำเป็นเพราะRDซึ่งแตกต่างจากrm -fจะทำให้เกิดข้อผิดพลาดหากเป้าหมายไม่มีอยู่

ตัวอย่างของสคริปต์ต่อไปนี้จะถือว่า DELPATH นั้นได้รับการเสนอให้ล่วงหน้า (วิธีนี้ปลอดภัยเมื่อคุณทำอะไรเช่นSET DELPATH=%1ลองใส่ECHO %1a .cmdและผ่านการโต้เถียงกับช่องว่างในนั้นและดูว่าเกิดอะไรขึ้นกับตัวคุณเอง) IF ERRORLEVEL 1หลังจากเสร็จสิ้นการข้อมูลโค้ดคุณสามารถตรวจสอบสำหรับความล้มเหลวด้วย

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

จุดคือทุกอย่างง่ายขึ้นเมื่อสภาพแวดล้อมเป็นไปตาม POSIX หรือถ้าคุณติดตั้ง MSYS ให้น้อยที่สุดและเพียงแค่ใช้มัน



3

นี่คือสิ่งที่คุณต้องทำ ...

สร้างแบตช์ไฟล์ด้วยบรรทัดต่อไปนี้

RMDIR /S %1

บันทึกไฟล์แบตช์ของคุณเป็นRemove.batและวางไว้ในC:\windows

สร้างคีย์รีจิสทรีต่อไปนี้

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

เรียกใช้regeditและอัพเดตค่าดีฟอลต์HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default ด้วยค่าต่อไปนี้

"c:\windows\REMOVE.bat" "%1"

แค่นั้นแหละ! ตอนนี้คุณสามารถคลิกขวาที่ไดเรกทอรีและใช้ฟังก์ชัน RMDIR


3

การใช้ PowerShell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

แทนที่บันทึกด้วยชื่อไดเรกทอรีที่คุณต้องการลบ

get-childitemค้นหาไดเร็กทอรี children ด้วยชื่อซ้ำจากพา ธ ปัจจุบัน (.)

ลบรายการลบผลลัพธ์


2

คุณสามารถติดตั้งGnuWin32และใช้คำสั่ง * nix บน Windows ได้ ฉันติดตั้งสิ่งนี้ก่อนที่ฉันจะติดตั้งสิ่งอื่นในสำเนา Windows ใหม่ :)


2

ใช้ความเสี่ยงของคุณเอง ข้อมูลที่ให้ไว้ 'ตามสภาพ' ไม่ได้ทดสอบอย่างเต็มที่

คลิกขวาที่ไอคอน Windows (โดยปกติจะอยู่ด้านล่างซ้าย)> คลิก "Windows PowerShell (Admin)"> ใช้คำสั่งนี้ (ด้วยความระมัดระวังคุณสามารถลบไฟล์ทั้งหมดได้อย่างง่ายดายหากคุณไม่ระวัง):

rd -r -include *.* -force somedir

somedirไดเรกทอรีที่ไม่ว่างเปล่าอยู่ที่ไหนที่คุณต้องการลบ

โปรดทราบว่าในบางครั้งดิสก์ที่ติดตั้งภายนอกหรือดิสก์ที่มีปัญหา Windows จะทำงานผิดปกติ แต่ก็ไม่ได้มีข้อผิดพลาดในการลบ (หรือความพยายามในการคัดลอก) แต่ไดเรกทอรีจะไม่ถูกลบ (หรือไม่คัดลอก) ตามคำแนะนำ (ฉันพบว่าในกรณีนี้อย่างน้อยสำหรับฉันคำสั่งที่ได้รับจาก @n_y ในคำตอบของเขาจะสร้างข้อผิดพลาดเช่น 'get-childitem: ไฟล์หรือไดเรกทอรีเสียหายและอ่านไม่ได้' ซึ่งเป็นผลใน PowerShell)


1

LATE BUT แต่คำตอบที่สำคัญสำหรับทุกคนที่มีปัญหาในการติดตั้งแพ็กเกจnpmบนเครื่อง windows และหากคุณเห็นข้อผิดพลาดว่า " rm -rf...ไม่พบคำสั่ง" คุณสามารถใช้bash cliเพื่อรันคำสั่ง rm บน windows

สำหรับผู้ใช้ npm คุณสามารถเปลี่ยนการกำหนดค่าของ npm เป็นnpm config set script-shell "C:\Program Files\Git\bin\bash.exe"วิธีนี้หากแพ็กเกจ npm ที่คุณพยายามติดตั้งมีสคริปต์การติดตั้งโพสต์ที่ใช้rm -rfคำสั่งคุณจะสามารถเรียกใช้rmคำสั่งนั้นโดยไม่จำเป็นต้องเปลี่ยนแปลงอะไรในแพคเกจ npm หรือปิดการใช้งาน การตั้งค่าสคริปต์การติดตั้งโพสต์ (ตัวอย่างเช่นstyled-componentsใช้rmคำสั่งในสคริปต์การติดตั้งโพสต์)

หากคุณต้องการใช้rmคำสั่งคุณสามารถใช้ bash และส่งผ่านอาร์กิวเมนต์

ใช่คุณสามารถใช้คำสั่ง 'rm' บน windows


0

นี่คือสิ่งที่ทำงานให้ฉัน:

เพียงลองลดความยาวของเส้นทาง ie :: เปลี่ยนชื่อโฟลเดอร์ทั้งหมดที่นำไปสู่ไฟล์ดังกล่าวเป็นชื่อที่เล็กที่สุด พูดชื่อตัวอักษรหนึ่งตัว ดำเนินการเปลี่ยนชื่อใหม่ในลำดับชั้นของโฟลเดอร์ โดยคุณลดความยาวเส้นทางได้อย่างมีประสิทธิภาพ ในที่สุดก็ลองลบไฟล์ทันที



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