it-swarm.asia

كيفية حذف الدلائل مع المسار/أسماء طويلة جدا للحذف العادي

يبدو أن لدى Windows حدًا أقصى لطول أسماء الملفات عند محاولة الحذف ، رغم أنه لن يمنع إنشاء هذه الملفات.

تقوم عملية الإنشاء الخاصة بنا بإنشاء عدد من الملفات المؤقتة (يتم إنشاء العديد من ملفات WSDL) التي تعمل وفقًا لهذا الحد. لدينا برنامج النملة قادر بطريقة أو بأخرى على حذفها عند القيام بعملية تنظيف ، لكن في بعض الأحيان أحتاج إلى حذف دليل workarea (حيث تذهب جميع ملفات temp) دون القيام بالفعل بتنظيف كامل من ant.

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

إذا حاولت حذف الدليل من Explorer أحصل على الخطأ

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

محاولة Remove-Item في powershell يعطي الخطأ التالي:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item  <<<< -force -Recurse <directory>

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

371
Herms

أعتقد أنني وجدت طريقة لحذف الأشياء من cmd. في الأصل جربت الأمر del ، لكن هذا لم ينجح. ثم تذكرت rmdir. القيام بما يلي:

rmdir /S /Q <dir>

يبدو أن عملت.

83
Herms

استخدم 7-Zip إدارة الملفات لحذفها.

إذا كنت لا تزال تواجه مشكلة ، فتأكد من استخدامها Shift+Delete داخل 7 ملف مضغوط مدير. خلاف ذلك ، يحاول Windows نقلها إلى "سلة المحذوفات" (والتي سوف تفشل مرة أخرى).

420
Dentrasi

لم تعمل أي من الإجابات الأخرى (المجانية) هنا ، لكنني وجدت واحدة في موقع آخر:

rimraf <dir>

rimraf is Node.js package ، لذلك ستحتاج إلى تثبيت Node.js الذي يتضمن npm . ثم يمكنك تشغيل:

npm install -g rimraf

ثم يمكنك تشغيل rimraf من سطر الأوامر.

لقد وجدت هذا الحل لأن npm نفسه كان يسبب هذه المشكلة بسبب الطريقة التي يعشع فيها التبعيات.

بالمناسبة ، rimraf تحصل على اسمها من أمر UNIX rm -rf ، الذي يحذف الملفات والمجلدات بشكل متكرر.

310
jordanbtucker

هناك لا حاجة لتثبيت أي برنامج لحل هذه المشكلة.

يمكن حل هذه المشكلة بسهولة باستخدام robocopy ، المثبت مسبقًا منذ نظام التشغيل Windows Vista ، الذي تم إطلاقه في عام 2006.

على سبيل المثال ، تم الإبلاغ عن فشل rmdir /S /Q <dir> في بعض الحالات. ليست هناك حاجة لاستخدام أداة 7Zip أو أي أداة خارجية. بوويرشيل هو مبالغة. قد يعمل Cygwin ، ولكن قد لا يكون مثبتًا عليه. لذلك ، دعونا نركز على robocopy

والفكرة هي أن

  1. استخدم robocopy لنسخ + محدث
  2. من مجلد فارغ جديد
  3. إلى المجلد الذي تريد حذفه ، الهدف.

بعد تنفيذ robocopy ، سيكون الدليل الهدف فارغًا أيضًا.

هذه التعليمات هي لسطر الأوامر. فقط افتح البحث في Windows ، اكتب cmd واضغط على Enter.

دعنا نقول الهدف للحذف هو:

C:\delete\this folder\with a very long name

نمضي على النحو التالي:

  1. قم أولاً بإنشاء دليل فارغ ، مثل C:\emptyfolder.

    mkdir C:\emptyfolder
    
  2. انسخ + التحديث من الدليل الفارغ إلى الهدف ، باستخدام الخيار /purge

    robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
    
  3. احذف الدليل الفارغ. لا تحتاج بعد الآن.

    rmdir c:\emptyfolder
    

نظرًا لعدم وجود ملفات أو مجلدات في الدليل المصدر (C:\emptyfolder) ، فإنه يحذف الملفات والمجلدات الموجودة تحت الدليل الهدف (C:\delete\this folder\with a very long name) بشكل متكرر!

  • الخدعة النهائية: يمكنك تجنب الكتابة باليد

    C:\delete\this folder\with a very long name
    

    عن طريق سحب المجلد من نافذة Explorer وإسقاطه في إطار Terminal/cmd.

كن حذرا : الملفات المحذوفة لن تذهب إلى سلة المهملات المجلد! بمجرد حذفها ، لا يمكن استرداد الملفات.

(مأخوذة من "المسار طويل للغاية؟ استخدم Robocopy" بواسطة BVLANGEN )

ملاحظة: أنا أدرك أن هذه الإجابة كانت هنا ، أقل تربوية. كيفية حذف ملف في ويندوز مع اسم ملف طويل جدا؟ [مكرر]

Benoit أضاف:

قد تحتاج إلى متابعة هذه العملية أكثر من مرة للتخلص من جميع الملفات.

136
hectorpal

الأداة التي استخدمتها عندما واجهت هذه المشكلة كانت FastCopy . لقد حددت حذف الكل من القائمة المنسدلة ، وحددت الدليل الذي أردت حذفه ، ثم قمت بالنقر فوق حذف الكل .

FastCopy delete dialog screenshot

FastCopy محمول (لا يلزم التثبيت) ، وتتوفر إصدارات 32 بت و 64 بت.

29
braveterry

Cygwin في rm -rf يعمل بشكل جيد على مسارات طويلة!

26
gdw2

بدون تثبيت برامج إضافية ، يمكنك استخدام الأمر subst لإنشاء اسم مستعار مؤقت إلى دليل مسمى طويلاً.

مثلا إذا كنت تريد حذف المجلد C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted ، يمكنك استخدام الأمر

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

ثم يمكنك حذف X:\folder to be deleted في مستكشف Windows أو في موجه الأوامر بسهولة. لإزالة الاسم المستعار حرف محرك الأقراص المؤقت استخدم الأمر

subst x: /d
24
Kenneth L

مجرد إسقاط من Powershell في القيادة عن طريق تشغيل أدناه:

Cmd /C "rmdir /S /Q <dir>" 
22
Karl Glennon

حل Dentrasi هو الأفضل بالنسبة لي ، ولكني أردت نشر الخطوات المحددة في إجابة من المستوى الأعلى.

  1. قم بتنزيل وتثبيت أحدث إصدار ثابت من 7Zip .
  2. قم بتشغيل 7Zip File Manager ( 7zfm.exe ).
  3. في 7Zip File Manager ، انتقل حتى تتمكن من رؤية اسم المجلد الذي تريد حذفه (أي أنك في المجلد الأصل).
  4. اضغط مع الاستمرار على زر Shift.
  5. انقر فوق الزر "حذف" ، إما على لوحة المفاتيح أو في شريط الأدوات 7Zip File Manager ؛ تأكد من استمرار الضغط على مفتاح Shift .
  6. انقر فوق الزر "OK" ؛ تأكد من استمرار الضغط على مفتاح Shift .
18
Mass Dot Net

هناك شيئان لم يتم ذكرهما بالفعل في الإجابات الحالية.

  1. يمكنك استخدام بادئة مسار الطول الطويل للوصول إلى المسارات الطويلة
  2. مع Windows 10 ، يمكنك تمكين دعم المسار الطويل للاستخدام العام - ومع ذلك ، لاحظ أنه لن تعمل جميع التطبيقات مع المسارات الطويلة ، يجب عليك اختبار البرامج القديمة. فقط البرامج التي لها إدخال بيان مناسب ستكون قادرة على الاستفادة من هذا.

بادئة المسار الطويل

يحتوي Windows API على وظيفة خاصة تدعم أسماء مسار Unicode يصل طولها إلى 32 كيلو بايت (طول كل عنصر يصل إلى 255 حرفًا).

يُشار إلى هذا غالبًا بالخطأ باسم تسمية UNC ، لكن ليس على الرغم من أنه مرتبط.

البادئة المستخدمة لإخبار واجهة برمجة التطبيقات باستخدام مسارات Unicode الطويلة هي \\?\ كما في:

\\?\D:\very long path

تستخدم أسماء UNC عادةً عند الإشارة إلى المسارات على الخوادم البعيدة في النموذج \\servername\path name\file name. يمكنك دمج هذا مع بادئة المسار الطويل وذلك: \\?\UNC\server\share

لاحظ أن بعض التطبيقات ، المكتوبة بشكل سيء ولكنها شائعة للأسف ، لا تدعم مسارات ملفات UNC ولا بادئة المسار الطويل.

المرجع: https://msdn.Microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

دعم طويل المدى

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

يمكنك تنشيطه عبر محرر "نهج المجموعة" إذا كان لديك إصدار من Windows به. أو يمكنك ببساطة استخدام تغيير التسجيل التالي. كما هو الحال دائمًا ، يرجى عمل نسخة احتياطية من قسم السجل الذي تقوم بتغييره قبل القيام بأي شيء.

  1. تشغيل regedit.exe.
  2. تأكيد موجه UAC.
  3. انتقل إلى المفتاح: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. قم بإنشاء أو تغيير المفتاح LongPathsEnabled.
  5. إذا لم يكن موجودًا ، فانقر بزر الماوس الأيمن على السياسات وحدد قيمة جديدة> Dword (32 بت) من القائمة.
  6. اضبط LongPathsEnabled على 1 لتمكينه.

سيتم الآن وصول أي تطبيقات لها إدخالات بيان مناسبة إلى المسارات الطويلة القياسية لـ POSIX. يجب أن يشمل هذا تطبيقات Windows Store.

المرجع: https://blogs.msdn.Microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

تحديث 2017-04-09

أشارmaoizm إلى وجود مشكلة في مفتاح التسجيل أعلاه ، لذلك فعلت بعض الحفر أكثر . يبدو أنه يمكنك الآن تعيين دعم اسم ملف طويل باستخدام مفتاح النظام:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

هذا لا يزال يعمل فقط للتطبيقات التي تم تعيينها خصيصًا لاستخدامها على الرغم من (يتطلب إدخالًا في manifest.xml للتطبيق).

يجب أيضًا ملاحظة أنه لا يمكنك استخدام أسماء المسارات النسبية بهذه الطريقة.

10
Julian Knight

أنا أحب الحل كمد. على الرغم من أنني أريد مشاركة حل آخر يعمل حتى في Explorer فقط: حاول اختصار أسماء المجلدات الأصل قبل الحذف: ستؤدي الأسماء الأقصر إلى تقصير المسار. قل ، لديك بنية شجرة هذا المجلد:

C: \

مشاريع

.. .. مشروع رائع خلال ربيع 2014

بعض النشاط في الحديقة في المدينة يوم الجمعة

.. .. .. .. بلوخ بلوخ بلوخ بلوخ بلوخ بلوخ بلوخ بلوخ بلوخ

.. .. .. .. .. ملفات فعلية بأسماء طويلة ، أيضًا

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

C: \

مشاريع

.. .. س

.. .. .. ذ

.. .. .. .. ض

.. .. .. .. .. ملفات فعلية بأسماء طويلة ، أيضًا

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

8
Anatoly Mironov

الحل 7 Zip يعمل بشكل رائع. هناك خيار آخر إذا كنت قد قمت بتثبيت git وهو فتح bash Shell والاستخدام:

rm -f

(أو rm -rf للمجلدات)

7
User

أقترح Total Commander (برنامج كومبيوتري ، لكن استمر في العمل بعد فترة تجريبية مع شاشة بدء تشغيل بسيطة فقط). هذه هي الطريقة التي أقوم بها دائمًا بحل اسم ملف طويل جدًا مشكلات.

4
Sopalajo de Arrierez

يمكنك أيضًا حذفها باستخدام الاسم المختصر المكافئ لها. dir /x سوف تظهر لك لهم.

2
Ian Boyd

لقد قمت بإنشاء برنامج Java بسيط يستخدم robocopy لحذف الملفات. الجرة هي رونابل. لإخراج إضافية تشغيله من خط cmd.

https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view؟usp=sharing

2
CamHart

أكبر الأدلة صمم لهذه المهمة كذلك.  enter image description here

  • تحميل
  • يستخدم مكالمة متكررة مع RemoveDirectoryW لحذف الدلائل الموجودة
  • يستخدم مستودع الملفات الخاص للدلائل المنشأة حديثًا
  • يمكن نقل الملفات من الأدلة قبل حذف أدلة containg.
  • سريع ، على الرغم من أن التنقل إلى أعلى الدليل هو نقرة لكل دليل متداخل
  • نظام التشغيل Windows XP (SP3) وما فوق
  • شفرة غير مدارة بدون توقيع بدون مثبّت ، لذلك يمكن تحذير Smartscreen عند التشغيل من مجلد إضافي على سبيل المثال سطح المكتب.

مزيد من المعلومات في CodeProject .

1
Laurie Stearn

لقد جربت جميع الإجابات الأخرى ، لكنها لم تنجح (على الأقل بالنسبة لي).

صادفت delinfile وعملت بشكل جيد وسريع جدا!

يقتصر الإصدار التجريبي على 3 إجراءات/15 يومًا ولكن يمكن استخدامه إذا أردت فقط حذف بعض المجلدات/الملفات:

1
Jürgen Paul

حصلت على الجواب المثالي هنا (للملفات). يعمل في ويندوز 10.

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

راجع أيضًا: https://msdn.Microsoft.com/en-us/library/aa365247.aspx#maxpath

لم تكن إجابة واحدة بديلة في 4 أسئلة كافية لاحتياجاتي. أنت مرحب بك في العالم.

1
Andrew

لقد واجهت هذه المشكلة في نظام التشغيل Windows 10 ووجدت هذا الحل السهل.

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

 enter image description here

1
Nayana Adassuriya

اكتشفت أخيرًا كيفية القيام بذلك عبر Powershell. فيما يلي الإرشادات التي اتبعتها للحصول على هذا للعمل على Windows 7:

  1. قم بإنشاء مجلد جديد يسمى NTFSSecurity في المجلد C:\Users\XXXX\Documents\WindowsPowerShell\Modules\NTFSSecurity ، حيثXXXXهو اسم مستخدم Windows الخاص بك . مثال: إذا كان اسم المستخدم الخاص بي "aspnyc" ، فسيكون المجلد الجديد C:\Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurity.

  2. قم بتنزيل حزمة File System Security PowerShell Module - يجب أن تكون متوفرة كملف Zip بسيط.

  3. افتح وحدة Powershell ، شغّل Get-Module -ListAvailable وتأكد NTFSSecurity يظهر في مكان ما في قائمة الوحدات النمطية المسجلة.
  4. في وحدة التحكم Powershell ، قم بتشغيل NTFSSecurity - وحدة الاستيراد .
  5. في وحدة التحكم Powershell ، شغّل Remove-Item2 "YYYY" -Recurse ، حيثYYYYهو مسار Windows إلى المجلد الذي تريد حذفه بشكل متكرر (على سبيل المثال C:\البطاطس\البادجر\FolderToDelete).
0
Mass Dot Net

اكتشفت أخيرًا كيفية القيام بذلك مع Powershell على نظام التشغيل Windows 10 حيث كانت أسماء الملفات الفردية طويلة جدًا. فيما يلي الخطوات التي اتبعتها للحصول على هذا للعمل على نظام التشغيل Windows 10:

  1. قم بتنزيل حزمة File System Security PowerShell Module - يجب أن تكون متوفرة كملف Zip بسيط.
  2. استخراج ملف Zip كمجلد NTFSSecurity في الدليل C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules.
  3. افتح وحدة تحكم Powershell مع الارتفاع الإداري (a.k.a. وضع المسؤول) وتشغيل Get-Module -ListAvailable وتأكد NTFSSecurity يظهر في مكان ما في قائمة الوحدات النمطية المسجلة.
  4. تشغيل Set-ExecutionPolicy Unrictricted لتجاوز وضع التنفيذ الموقع. يجب عليك تأكيد هذا الإجراء باستخدام Y (خانات)
  5. في نهاية المطاف مؤتمر نزع السلاح إلى المجلد الذي تريد حذفه.
  6. في وحدة التحكم Powershell ، قم بتشغيل NTFSSecurity - وحدة الاستيراد .
  7. في وحدة التحكم Powershell ، شغّل Remove-Item2 "YYYY" -Recurse ، حيثYYYYهو مسار Windows النسبي أو المطلق إلى المجلد الذي تريد حذفه بشكل متكرر (على سبيل المثال _ {C:\Potatoes\Badgers\FolderToDelete).
  8. تحقق مما اذا كان يعمل.
  9. أخيرًا ، عُد إلى وضع التنفيذ الموقع مع Set-ExecutionPolicy Restricted . يجب عليك تأكيد هذا الإجراء مع Y (es).
0
Epicurist

إذا كان لديك Bash on Ubuntu على Windows مثبتًا ، فيمكنك القرص المضغوط إلى الدليل الأصل في أمر منتظم ، ثم اكتب:

bash -c "rm -rf dirname_here"

الذي يقوم بتشغيل bash ، يحذف الدليل بشكل متكرر من linux حيث لا توجد قيود على اسم الملف ، ثم يخرج مرة أخرى إلى موجه الأوامر العادي.

0
Richard Szalay