سؤال كتلة حذف الملفات في ويندوز


لدي دليل يحتوي على ~ 3 ملايين ملف في بعض الأدلة الفرعية على خادم Windows 2008. حذف الملفات يدويًا عبر SHIFT + DEL على دير الجذر يأخذ الأعمار. هل هناك طريقة أخرى للقيام بالحذف في بسرعة الطريقة؟


130
2017-08-07 07:00


الأصل


كما طرح هنا في Stack Overflow: stackoverflow.com/questions/186737/... - Hugo
كيف يمكنني استهداف المغناطيس لبعض الدلائل الفرعية فقط؟ - Jaime Hablutzel
Jaime مع يد ثابتة ، مثل مبرمج حقيقي ... ؛-) xkcd.com/378 - Legionair
ماذا لو كان محرك أقراص SSD؟ - Benjamin Weiss


الأجوبة:


أحتاج دائمًا إلى حذف الكثير من الملفات والدلائل من محرك الأقراص المشفر في WinXP ، وعادة ما يكون حوالي 22 جيجابايت من الملفات 500000 في 45000 مجلد.

إن عملية الحذف باستخدام مستكشف Windows هي عملية قمامة لأنها تهدر الكثير من الوقت في تعداد الملفات. أنا عادة نقل الأشياء التي أحتاجها لحذف C: \ stufftodelete ويكون ملف دفعي deletestuff.bat ل rmdir /s/q C:\stufftodelete. ومن المقرر أن يعمل هذا في الليل ، ولكن في بعض الأحيان أحتاج إلى تشغيله خلال النهار حتى أسرع كان ذلك أفضل.

إليك نتائج اختبار وقت سريع لعينة صغيرة بحجم 5.85 ميغابايت من 960 ملفًا في 303 مجلدًا. ركضت الطريقة 1 متبوعة الطريقة الثانية ، ثم إعادة تعيين دلائل الاختبار.

الأسلوب 1 يزيل بنية الملفات والدليل في مسار واحد:

rmdir /s/q foldername

تحتوي الطريقة الثانية على تمريرة أول لحذف الملفات والمخرجات إلى nul لتجنب تحميل الكتابة على الشاشة لكل ملف singe. ثم يقوم التمرير الثاني بتنظيف بنية الدليل المتبقية:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • الطريقة 1: 17.5 ، 14.9 ، 13.9 ، 14.8 ، 13.8 ثانية: متوسط 14.98 ثانية
  • الطريقة الثانية: 14.3 ثانية و 12.1 ثانية و 11.7 ثانية و 14.2 ثانية و 11.8 ثانية: متوسط 12.82 ثانية

إليك نتائج اختبار آخر باستخدام 404 ميغابايت من ملفات 19،521 في 3،243 مجلدًا:

  • طريقة 1: 2 دقيقة 20 ثانية
  • الطريقة الثانية: 2 دقيقة 33 ثانية

لذا ليس هناك الكثير منها ، ربما يكون قريبًا جدًا من الحكم في اختبار واحد.


تحرير: لقد قمت بإعادة اختبارها مع المزيد من البيانات ، هذه حالة نموذجية بالنسبة لي: 28.3 غيغابايت من 1،159،211 ملفًا في 146،918 مجلدًا:

  • الطريقة 1: 2h 15m، 2h 34m: average: ساعتان و 25 دقيقة
  • الطريقة 2: 49 م ، 57 م: المتوسط: 53 دقيقة

نجاح باهر ، الطريقة الثانية أسرع ثلاث مرات من الطريقة الأولى! سأكون في تحديث deletestuff.bat!


168
2018-05-27 11:27



يعمل RD / S / Q بشكل رائع إذا حددت مسارًا مطلقًا ولكنه لا يعمل عند استخدام المسارات النسبية. هل هناك حل؟ - Michael S.
@ Hugo: Hugo ، سؤال: في الاختبارات الموقوتة أعلاه ، لأي من الطريقتين أو كلاهما ، هل قمت بحساب الملفات مباشرة قبل تشغيل الطريقة؟ أنا أسأل لأن محتويات المجلد قد تكون موجودة بالفعل في ذاكرة التخزين المؤقت لملف نظام التشغيل. شكر! - William C
WilliamC: أنا لا أتذكر بالضبط، ولكن لحذف المتكررة مع نفس المحتويات سأكون قد تحسب على الفور قبل واحد فقط حذف، وسوف لا يكون تكراره لحذف الأخرى (I بالفعل يعرف أرقام). - Hugo
هل يشمل توقيت نقل الملفات 1،159،211 في مجلدات 146،918 إلى C:\stufftodelete مجلد؟ - martineau
martineau: لا ، كانت أوقات الاختبار (إذا كنت أتذكر بشكل صحيح) حذف المجلدات في المكان. عادة ما تكون سريعة لنقل مجلد إلى C:\stufftodelete`. Copying is slooow, but you don't want that. If you have another drive (eg E:), also create E: \ stufftodelete` ودائما نقل الملفات إلى مجلد نفس محرك الأقراص وإدراجه في deletestuff.bat (الذي يعيد أيضا المجلدات في النهاية لفي المرة القادمة). - Hugo


إذا كان عليك حذف أشجار الدليل الكبيرة بانتظام ، فضع في اعتبارك تخزين جذر شجرة الدليل هذه على قسم منفصل ، ثم قم ببساطة بتنسيقها عندما تحتاج إلى حذف كل شيء. إذا كنت بحاجة إلى أتمتة هذا ، فيمكنك استخدام هذا الأمر DOS:

echo Y | format Z: /FS:NTFS /X /Q

حيث Z: هو قسم "المتقلب" الخاص بك. ملاحظة: يجب ألا يحتوي القسم على أي تصنيف. أنا المدونات عن هذا هنا.


16
2017-10-31 06:37



واستخدم رابطًا ثابتًا لإنشاء اتصال بين القرص والدليل حيث يتم تخزين الملفات إذا كان مسار الدليل الدقيق مطلوبًا. - Nime Cloud
NimeCloud: يتعذر على Hardlinks عبور أنظمة الملفات أو ربط الدلائل. - grawity
ومع ذلك ، روابط رمزية يستطيع عبر أنظمة الملفات والدلائل الارتباط ، لذلك قد تكون مناسبة هنا. راجع الأمر mklink (Vista والإصدارات الأحدث ؛ وإلا استخدم التقاطع من Mark Russinovich / SysInternals.) - Robert Calhoun


في موجه الأوامر (ابدأ -> تشغيل -> cmd):

del /f /s /q foldername 

9
2017-08-07 07:07



هذا شيء عظيم لأنه يسرد ما يحذفه ... ولكنه يسجل نفسه مثل السرعة من حيث السرعة. - bobobobo
اوه woah woah woah. لم تكن جيدة كما اعتقدت يقوم بحذف الملفات بسرعة ولكنه يترك شجرة الدليل سليمة. - bobobobo
والذي يمكنني إضافته يستغرق وقتًا طويلاً جدًا لإزالة - bobobobo
bobobobo لقد أجريت بعض الاختبارات مع ~ 30GB / 1،000،000 ملفًا / 15000 مجلدًا و del + rd أسرع بثلاث مرات من مجرد rd: superuser.com/questions/19762/mass-deleting-files-in-windows/... - Hugo
أعتقد أن rmdir أسرع هو بعض الحالات. ديل . / f / s / q جيد لأنه يمكنك أيضًا حذف محتويات جميع الملفات داخل الدليل. بعد الانتهاء ، هي مجرد مسألة حذف المجلدات بسرعة كافية. أيضا ، تذكر attrib -s -h -r ./ s إذا لم تتمكن من حذف المجلدات بسبب الملفات المخفية. - Sun


بالإضافة إلى نسخ / نقل الملفات بسرعة كبيرة (باستخدام واجهة برمجة التطبيقات الخاصة بها) ، يستطيع TeraCopy حذف الملفات وهو سريع جدًا أيضًا. منذ اكتشاف TeraCopy لا أستخدم جهاز كمبيوتر بدون تثبيته (إذا كنت سأقوم بنسخ / تحريك / حذف).

يقوم برنامج التثبيت نفسه بتثبيت الإصدار x64 ولكن لاستخدامه ، يجب عليك إجباره يدويًا.

الإصدار التجريبي الذي أوصي به عبر الإصدارات الثابتة: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/


6
2018-05-25 14:00



هل سبق لك أو شاهدت بعض المقارنات بين الوقت والمقارنة بين TeraCopy vs rmdir أو del أو del + rmdir؟ - Hugo
@ Hugo: سؤال غبي. لا أوصي بـ TeraCopy إذا لم يكن مرئيًا عن طريق العين السهلة! - rautamiekka
هل تقدر أن ذلك أسرع بنسبة 10٪؟ مرتين بسرعة؟ عشرة أضعاف السرعة؟ مليون مرة أسرع؟ سيكون من الرائع إذا استطعت أن تمضي وقتاً ضد rmdir مع مجموعتي اختبار كبيرتين ومماثلة. - Hugo
Hugo: اعتمادًا على حجم الملف / العدد والتجزئة ووحدة المعالجة المركزية ، من 2x إلى 5x ولكن بشكل عام سريع جدًا في الاعتبار استخدام وسائل متكاملة Win-Win لملفات كبيرة و / أو crapload إذا كنت ستحفظ لحظة أو 20. [re-edited بعد الضربة العرضية للدخول - rautamiekka
شكرا لكم! أنا أستخدم TeraCopy لسنوات ، لكني لم أكن أعرف أبدًا عن وظيفة الحذف الشامل. وأنت على حق ، إنه كثير ، أسرع بكثير! - AzDayton


فعلت ملف الخفافيش التي تفعل الشيء نفسه.

@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T

انها تفعل العمل في خطوتين ، واحد ، فإنه يحاول حذف الملفات. والثاني هو محاولة الحصول على ملكية الملفات. ذ يجب أن يتم تغييرها وفقًا للمنطق المحلي (لنقف باللغة الإنجليزية). إذا فشلت المهمة (على سبيل المثال إذا أخفقت بسبب الإذن) ، فيجب عليك تشغيلها مرة أخرى. ومع ذلك ، فإن الجولة الثانية لن تحاول حذف الملفات المحذوفة في الجولة الأولى ، لذلك قد تكون سريعة جدًا.


كيفية استخدامها. حفظ باسم delfolder.bat في مسار مسار (على سبيل المثال c: \ windows) ، ثم تشغيله كـ

 delfolder "foldername"   

حيث يكون foldername هو اسم المجلد

في الاختبار ، استغرق حذف ملفات 123'000 3 دقائق (sata 7200rpm). ياي!


5
2018-02-09 17:35



هذا السيناريو الصغير رائع. شكرا لكم. - Jeson Martajaya
عادة يجب أن لا تستخدم %1 في البرنامج النصي ، ولكن "%~1". وبهذه الطريقة ، إذا تم تمرير الحجة مع علامات اقتباس ، فسيتم إبطالها وتسويتها. إذا لم يتم تمريرها مع اقتباسات ، يتم اقتباسها. - Benoit


استخدم ال أمر rd / s من موجه الأوامر.


3
2017-08-07 07:09



لا. هذا بطيء مثل حذف المستكشف. - bobobobo
حسنا ، على ما يرام. يعمل بشكل أفضل من del / f / s / q ، على أي حال. - bobobobo
حسنا ، هذا أفضل بكثير من استخدام Explorer لحذف ، في الواقع. يستمر في الحذف ، حتى إذا كان الحذف أو اثنين ستفشل (حيث يخنق المستكشف ويحرم) - bobobobo


استخدام الرمز أدناه يعمل عادة بشكل جيد بالنسبة لي.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe

3
2017-12-23 15:47



أضف `` nul` إلى نهاية المكالمة التي تم نسخها حتى لا تضطر إلى رؤيتها على الشاشة. - JoshDM
يشبه استخدام rsync في لينكس. انها هنا حتى أسرع من ذلك الحين rmdir؟ - Hastur
لمعلوماتك ، هذا الروبوت يختلف كثيرا عن del /f/q/s + rmdir /s/q. إذا كان dir_w__ipe الخاص بك يحتوي على junktions c:\some_important_dir سوف ينتهي بك الأمر فقدان البيانات الخاصة بك. - Pavel