سؤال

أحتاج إلى طريقة لحذف مجلد وأطفاله بشكل متكرر.

هل هناك أداة مسبقة الصنع لهذا، أو هل أحتاج إلى كتابة واحدة؟

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:

  1. المسار المحدد غير موجود.
  2. المسار المحدد موجود وهو دليل.
  3. المسار المحدد موجود وهو ملف.

سأتجاهل أمر الأذونات بالكامل، لكن لا أحد يستخدم الأذونات أو يحاول حرمان نفسه من حق الوصول للكتابة على الأشياء الموجودة في 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"

عبر موجه الأوامر

https://stackoverflow.com/a/35731786/439130

استخدام على مسؤوليتك الخاصة.المعلومات المقدمة "كما هي".لم يتم اختباره على نطاق واسع.

انقر بزر الماوس الأيمن فوق رمز Windows (أسفل اليسار عادةً) > انقر فوق "Windows PowerShell (المسؤول)" > استخدم هذا الأمر (مع العناية الواجبة، يمكنك بسهولة حذف جميع ملفاتك إذا لم تكن حذرًا):

rd -r -include *.* -force somedir

أين somedir هو الدليل غير الفارغ الذي تريد إزالته.

لاحظ أنه مع الأقراص الخارجية المرفقة، أو الأقراص التي بها مشكلات، يتصرف Windows أحيانًا بشكل غريب - فهو لا يرتكب خطأ في الحذف (أو أي محاولة نسخ)، ومع ذلك لا يتم حذف الدليل (أو لا يتم نسخه) وفقًا للتعليمات.(لقد وجدت أنه في هذه الحالة، على الأقل بالنسبة لي، فإن الأمر الذي قدمه @n_y في إجابته سينتج عنه أخطاء مثل 'get-childitem :الملف أو الدليل تالف وغير قابل للقراءة.' نتيجة لذلك باورشيل)

يوجد أيضًا deltree إذا كنت تستخدم إصدارًا أقدم من Windows.

أنا حقًا أحب هذا الموقع للعثور على الأوامر:SS64:ديل - حذف الملفات

سيتم حذف الدليل del /s /q

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top