هل يعادل "rm -rf" لنظام التشغيل Windows؟
سؤال
أحتاج إلى طريقة لحذف مجلد وأطفاله بشكل متكرر.
هل هناك أداة مسبقة الصنع لهذا، أو هل أحتاج إلى كتابة واحدة؟
DEL /S
لا يحذف الدلائل.
DELTREE
تمت إزالته من نظام التشغيل Windows 2000+
المحلول
RMDIR أو RD إذا كنت تستخدم موجه الأوامر الكلاسيكي (cmd.exe):
rd /s /q "path"
إذا كنت تستخدم PowerShell يمكنك استخدامه Remove-Item
(الذي هو مستعار ل del
, erase
, rd
, ri
, rm
و rmdir
) ويأخذ أ -Recurse
الحجة التي يمكن اختصارها -r
rd -r "path"
نصائح أخرى
مسؤل:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
يعمل مع أي شيء بما في ذلك ملفات SYS
يحرر:لقد وجدت بالفعل أفضل طريقة تحل أيضًا مشكلة مسار الملف الطويل جدًا:
mkdir \empty
robocopy /mir \empty folder
RMDIR [/س] [/Q] [drive:]path
RD [/س] [/Q] [drive:]path
/S
يزيل كافة الدلائل والملفات الموجودة في الدليل المحدد بالإضافة إلى الدليل نفسه. يستخدم لإزالة شجرة الدليل./Q
الوضع الهادئ، لا تسأل إذا كان من المناسب إزالة شجرة الدليل باستخدام/S
يمكنك تثبيت cygwin، الذي يحتوي على rm
إلى جانب ls
إلخ.
انتقل إلى المسار وقم بتشغيل هذا الأمر.
rd /s /q "FOLDER_NAME"
/س :يزيل الدليل المحدد وجميع الدلائل الفرعية بما في ذلك أي ملفات.استخدم /s لإزالة شجرة.
/س :تشغيل rmdir في الوضع الهادئ.حذف الدلائل دون تأكيد.
/؟:تعرض التعليمات في موجه الأوامر.
لحذف دليل (سواء كان موجودًا أم لا) استخدم ما يلي:
if exist myfolder ( rmdir /s/q myfolder )
rmdir /S /Q %DIRNAME%
rmdir /s dirname
جرب هذا الأمر:
del /s foldername
أولا، دعونا نراجع ما 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
في .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 واستخدمه فقط.
يمكنك التثبيت جنووين32 واستخدم أوامر *nix أصلاً على النوافذ.أقوم بتثبيت هذا قبل تثبيت أي شيء آخر على نسخة جديدة من النوافذ.:)
هنا هو ما عليك القيام به...
قم بإنشاء ملف دفعي بالسطر التالي
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
باستخدام بوويرشيل 5.1
get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
يستبدل السجلات باسم الدليل الذي تريد حذفه.
get-childitem يبحث عن الدليل الفرعي بالاسم بشكل متكرر من المسار الحالي (.).
إزالة بند يحذف النتيجة.
الإجابة المقبولة رائعة، ولكن بافتراض تثبيت Node لديك، يمكنك القيام بذلك بشكل أكثر دقة باستخدام مكتبة العقدة "rimraf"، التي تسمح بأنماط متلألئة.إذا كنت تستخدم هذا كثيرًا (أنا أستخدمه)، فما عليك سوى تثبيته عالميًا.
yarn global add rimraf
ثم، على سبيل المثال، النمط الذي أستخدمه باستمرار:
rimraf .\**\node_modules
أو لخط واحد يتيح لك تفادي التثبيت العام، ولكنه يستغرق وقتًا أطول قليلاً للتنزيل الديناميكي للحزمة:
npx rimraf .\**\node_modules
هنا ما نجح بالنسبة لي:
فقط حاول تقليل طول المسار.أي ::إعادة تسمية كافة المجلدات التي تؤدي إلى مثل هذا الملف إلى أصغر الأسماء الممكنة.قل الأسماء المكونة من حرف واحد.استمر في إعادة التسمية لأعلى في التسلسل الهرمي للمجلد.بهذا يمكنك تقليل طول المسار بشكل فعال.الآن أخيرًا حاول حذف الملف على الفور.
عبر بوويرشيل
Remove-Item -Recurse -Force "TestDirectory"
عبر موجه الأوامر
استخدام على مسؤوليتك الخاصة.المعلومات المقدمة "كما هي".لم يتم اختباره على نطاق واسع.
انقر بزر الماوس الأيمن فوق رمز Windows (أسفل اليسار عادةً) > انقر فوق "Windows PowerShell (المسؤول)" > استخدم هذا الأمر (مع العناية الواجبة، يمكنك بسهولة حذف جميع ملفاتك إذا لم تكن حذرًا):
rd -r -include *.* -force somedir
أين somedir
هو الدليل غير الفارغ الذي تريد إزالته.
لاحظ أنه مع الأقراص الخارجية المرفقة، أو الأقراص التي بها مشكلات، يتصرف Windows أحيانًا بشكل غريب - فهو لا يرتكب خطأ في الحذف (أو أي محاولة نسخ)، ومع ذلك لا يتم حذف الدليل (أو لا يتم نسخه) وفقًا للتعليمات.(لقد وجدت أنه في هذه الحالة، على الأقل بالنسبة لي، فإن الأمر الذي قدمه @n_y في إجابته سينتج عنه أخطاء مثل 'get-childitem :الملف أو الدليل تالف وغير قابل للقراءة.' نتيجة لذلك باورشيل)
يوجد أيضًا deltree إذا كنت تستخدم إصدارًا أقدم من Windows.
أنا حقًا أحب هذا الموقع للعثور على الأوامر:SS64:ديل - حذف الملفات
سيتم حذف الدليل del /s /q