ฉันต้องการวิธีลบโฟลเดอร์และลูก ๆ ซ้ำ ๆ
มีเครื่องมือที่สร้างไว้ล่วงหน้าสำหรับสิ่งนี้หรือฉันต้องเขียนหรือไม่
DEL /S
ไม่ลบไดเรกทอรี
DELTREE
ถูกลบจาก Windows 2000+
format c:
การติดตั้ง Linux จริงๆเหรอ? ฉันล้อเล่นแน่นอน
ฉันต้องการวิธีลบโฟลเดอร์และลูก ๆ ซ้ำ ๆ
มีเครื่องมือที่สร้างไว้ล่วงหน้าสำหรับสิ่งนี้หรือฉันต้องเขียนหรือไม่
DEL /S
ไม่ลบไดเรกทอรี
DELTREE
ถูกลบจาก Windows 2000+
format c:
การติดตั้ง Linux จริงๆเหรอ? ฉันล้อเล่นแน่นอน
คำตอบ:
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"
rd /s /q foo && echo "yay"
จะล้มเหลวหากไม่มีไดเรกทอรี "foo"
Access is denied
และคนอื่น ๆThe process cannot access the file because it is being used by another process
?
ผู้ดูแลระบบ:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
ทำงานได้กับทุกสิ่งรวมถึงไฟล์ sys
แก้ไข: ฉันจริง ๆ แล้วพบวิธีที่ดีที่สุดซึ่งยังแก้ปัญหาเส้นทางยาวเกินไปเช่นกัน:
mkdir \empty
robocopy /mir \empty folder
robocopy /mir c:\empty .
takeown
ช่วยให้ฉันเป็นฉันคัดลอกโฟลเดอร์จากระบบ Linux กับ rsync โดยไม่ได้ตั้งใจและฉันก็ไม่มีสิทธิที่จะลบโฟลเดอร์นั้น ... ไม่ได้ robocopy ทำงาน ขอบคุณ
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
ลบไดเร็กทอรีและไฟล์ทั้งหมดในไดเร็กทอรีที่ระบุนอกเหนือจากไดเร็กทอรีเอง ใช้เพื่อลบทรีไดเรกทอรี
/Q
โหมดเงียบอย่าถามว่าตกลงเพื่อลบแผนผังไดเร็กทอรีด้วยหรือไม่ /S
คุณสามารถติดตั้ง Cygwin ซึ่งมีrm
เช่นเดียวกับls
ฯลฯ
ไปที่พา ธ และทริกเกอร์คำสั่งนี้
rd /s /q "FOLDER_NAME"
/ s: ลบไดเรกทอรีที่ระบุและไดเรกทอรีย่อยทั้งหมดรวมถึงไฟล์ใด ๆ ใช้ / s เพื่อลบต้นไม้
/ q: รัน rmdir ในโหมดเงียบ ลบไดเรกทอรีโดยไม่มีการยืนยัน
/? : แสดงวิธีใช้ที่พรอมต์คำสั่ง
สำหรับการลบไดเรกทอรี (มีอยู่หรือไม่) ให้ใช้คำสั่งต่อไปนี้:
if exist myfolder ( rmdir /s/q myfolder )
rmdir /S /Q %DIRNAME%
คำตอบที่ยอมรับนั้นยอดเยี่ยม แต่ถ้าคุณติดตั้ง Node คุณสามารถทำสิ่งนี้ได้อย่างแม่นยำมากขึ้นด้วยโหนดไลบรารี "rimraf" ซึ่งช่วยให้รูปแบบกลม ถ้าคุณใช้สิ่งนี้มาก (ฉันทำ) เพียงแค่ติดตั้งทั่วโลก
yarn global add rimraf
ตัวอย่างเช่นรูปแบบที่ฉันใช้อย่างต่อเนื่อง:
rimraf .\**\node_modules
หรือสำหรับสายการบินเดียวที่ให้คุณหลบการติดตั้งทั่วโลก แต่ใช้เวลานานขึ้นเล็กน้อยสำหรับการดาวน์โหลดแพ็คเกจแบบไดนามิก:
npx rimraf .\**\node_modules
ลองคำสั่งนี้:
del /s foldername
rmdir / s dirname
ก่อนอื่นมาทบทวนกันว่า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
:
ฉันจะเพิกเฉยต่อสิ่งที่ได้รับอนุญาตทั้งหมด แต่ไม่มีใครใช้สิทธิ์หรือพยายามที่จะปฏิเสธการเข้าถึงการเขียนสิ่งต่าง ๆ ใน Windows ต่อไป (ตกลงนั่นเป็นเรื่องตลก ... )
ก่อนอื่นให้ตั้งค่าERRORLEVEL
เป็น 0จากนั้นลบพา ธ หากมีอยู่ใช้คำสั่งที่แตกต่างกันขึ้นอยู่กับว่าเป็นไดเรกทอรีหรือไม่ IF EXIST
ไม่ได้ตั้งค่าERRORLEVEL
เป็น 0 หากไม่มีเส้นทางดังนั้นการตั้งค่าเป็นERRORLEVEL
0 ก่อนจึงจำเป็นต้องตรวจสอบความสำเร็จในวิธีการเลียนแบบrm -rf
การใช้งานปกติ การปกป้องRD
ด้วยIF EXIST
เป็นสิ่งจำเป็นเพราะRD
ซึ่งแตกต่างจากrm -f
จะทำให้เกิดข้อผิดพลาดหากเป้าหมายไม่มีอยู่
ตัวอย่างของสคริปต์ต่อไปนี้จะถือว่า DELPATH นั้นได้รับการเสนอให้ล่วงหน้า (วิธีนี้ปลอดภัยเมื่อคุณทำอะไรเช่นSET DELPATH=%1
ลองใส่ECHO %1
a .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 ให้น้อยที่สุดและเพียงแค่ใช้มัน
ผ่าน Powershell
Remove-Item -Recurse -Force "TestDirectory"
ผ่านทางพรอมต์คำสั่ง
นี่คือสิ่งที่คุณต้องทำ ...
สร้างแบตช์ไฟล์ด้วยบรรทัดต่อไปนี้
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
การใช้ PowerShell 5.1
get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
แทนที่บันทึกด้วยชื่อไดเรกทอรีที่คุณต้องการลบ
get-childitemค้นหาไดเร็กทอรี children ด้วยชื่อซ้ำจากพา ธ ปัจจุบัน (.)
ลบรายการลบผลลัพธ์
คุณสามารถติดตั้งGnuWin32และใช้คำสั่ง * nix บน Windows ได้ ฉันติดตั้งสิ่งนี้ก่อนที่ฉันจะติดตั้งสิ่งอื่นในสำเนา Windows ใหม่ :)
ใช้ความเสี่ยงของคุณเอง ข้อมูลที่ให้ไว้ 'ตามสภาพ' ไม่ได้ทดสอบอย่างเต็มที่
คลิกขวาที่ไอคอน Windows (โดยปกติจะอยู่ด้านล่างซ้าย)> คลิก "Windows PowerShell (Admin)"> ใช้คำสั่งนี้ (ด้วยความระมัดระวังคุณสามารถลบไฟล์ทั้งหมดได้อย่างง่ายดายหากคุณไม่ระวัง):
rd -r -include *.* -force somedir
somedir
ไดเรกทอรีที่ไม่ว่างเปล่าอยู่ที่ไหนที่คุณต้องการลบ
โปรดทราบว่าในบางครั้งดิสก์ที่ติดตั้งภายนอกหรือดิสก์ที่มีปัญหา Windows จะทำงานผิดปกติ แต่ก็ไม่ได้มีข้อผิดพลาดในการลบ (หรือความพยายามในการคัดลอก) แต่ไดเรกทอรีจะไม่ถูกลบ (หรือไม่คัดลอก) ตามคำแนะนำ (ฉันพบว่าในกรณีนี้อย่างน้อยสำหรับฉันคำสั่งที่ได้รับจาก @n_y ในคำตอบของเขาจะสร้างข้อผิดพลาดเช่น 'get-childitem: ไฟล์หรือไดเรกทอรีเสียหายและอ่านไม่ได้' ซึ่งเป็นผลใน PowerShell)
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
นี่คือสิ่งที่ทำงานให้ฉัน:
เพียงลองลดความยาวของเส้นทาง ie :: เปลี่ยนชื่อโฟลเดอร์ทั้งหมดที่นำไปสู่ไฟล์ดังกล่าวเป็นชื่อที่เล็กที่สุด พูดชื่อตัวอักษรหนึ่งตัว ดำเนินการเปลี่ยนชื่อใหม่ในลำดับชั้นของโฟลเดอร์ โดยคุณลดความยาวเส้นทางได้อย่างมีประสิทธิภาพ ในที่สุดก็ลองลบไฟล์ทันที
นอกจากนี้ยังมีความล่าช้าถ้าคุณใช้ Windows รุ่นเก่า
ฉันชอบไซต์นี้มากในการค้นหาคำสั่ง: SS64: ลบ - ลบไฟล์