it-swarm.asia

الشامل حذف الملفات في ويندوز

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

139
aaginor

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

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

فيما يلي نتائج اختبار Quick Time لعينة 5.85 ميغابايت صغيرة من 960 ملفًا في 303 مجلدات. قمت بتشغيل الطريقة الأولى متبوعة بالطريقة 2 ، ثم أعد تعيين أدلة الاختبار.

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

rmdir /s/q foldername

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

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

فيما يلي نتائج اختبار آخر باستخدام 404 ميغابايت من الملفات 19.521 في مجلدات 3،243:

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

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


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

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

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

178
Hugo

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

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

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

18
Mr. Bungle

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

del /f /s /q foldername 
9
lmsasu

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

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

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

6
rautamiekka

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

@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

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


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

 delfolder "foldername"   

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

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

6
magallanes

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

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

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

3
JP Alioto

قد يكون أفضل حل عملي هو نقل المجلد بعيدًا عن مكان ما (مثل سلة المحذوفات) ثم البدء في حذفه. سيستغرق الأمر الأعمار ، لكنه على الأقل سيكون بعيد المنال.

أنا متأكد من أن الوقت المطلوب لحذف كل هذه الملفات هو متطلب أساسي للمهمة ، وليس عدم كفاءة في تنفيذ الحذف.

2
Ryan Thompson

تثبيت Cygwin واستخدام rm -r . ولكن هذا من المحتمل أن يكون مبالغة.

1
CarlF

هل تم تمكين إنشاء اسم ملف قصير؟ إذا كان الأمر كذلك ، هل تحتاج حقًا إلى ذلك؟ إن إزالة ملف ما هو إلا بيانات وصفية. لذا ، إذا كان لديك ضعف عدد الأسماء المراد إزالتها ، فسيكون حجم العمل أعلى بكثير.

1
MSalters

هل جربت أحد هذين التطبيقين؟

تأكد من تعيين عدد الكتابة فوق إلى 0 إذا كنت تريد أداء أسرع. قم بذلك عن طريق النقر فوق خيارات ثم قم بتغيير القيمة في أسفل مربع الحوار.

أدخل المسار المراد حذفه في حقل المصدر ، ثم انقر فوق حذف.

لا تضع هذه التطبيقات الملفات في سلة المحذوفات. استخدم بحذر.

0
Stephen Kellett

يتم توفير هذا لتكمل وزيادة الخطوات التي اتخذت في الإجابات المذكورة سابقا.

يبدو أن الطريقتين المذكورتين أعلاه فعالة جدًا ، ولكن تحديد الأداء سيكون أمرًا صعبًا ما لم يتم تقييمهما وفقًا للشروط ذاتها بالضبط:

  • جهاز وطراز القرص الصلب الفعلي
    • على نحو مفضل ، تم اختبار ATTO/Crystal Disk بشكل قياسي قبل استنساخ البيانات عليها
  • نفس القسم/المجلد الموقع والهندسة
    • ستكون طريقة القيام بذلك هي إلغاء تجزئة القسم/المجلدات النموذجية واستنساخها تمامًا كما هي بالضبط نفس أنواع محركات الأقراص الثابتة (من الخطوة السابقة)
  • ثم قم بتنفيذ التكوينات عبر ملف الدُفعات واستخدم Powershell Cmdlet لتسجيل وقياس أدائها.

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

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • كنت قد نشرت ملفات سجل الإخراج ، لكنني أعتقد أن التباين كبير بسبب الأحجام وتوزيع ملفات المجلدات إلخ.

بوويرشيل:

PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt

PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt
0
Alex S

الإجابة من Hugo هي الأسرع لكنها لا تزيل الملفات المخفية أو ملفات النظام في أول مرور ، لذلك إذا كنت تريد حلاً أكثر اكتمالا ، استخدم المعلمة /ا:

del /f /s /q /a foldername > nul
rmdir /s /q foldername

حول ملف BAT بواسطة Magallanes ، كن حذرًا جدًا مع takeown و icacls ، لأن الارتباطات التشعبية تشترك في نفس الأذونات والمالكين ، لذلك إذا كان هناك الارتباطات الثابتة غير المشبعة في المجلد الذي تريد إزالته ، باستخدام takeown و icacls سيغير أذونات ومالكي الملفات خارج المجلد.

باستخدام الأداة ln.exe ، يمكنك سرد جميع الملفات المرتبطة داخل المجلد ومعرفة ما إذا كانت مرتبطة بملفات خارج المجلد (ارتباطات صلبة غير مشبعة):

ln.exe --enum foldername > HardlinksList.txt
0
liamZ