يبدو أن لدى 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>
هل يعلم أي شخص بأية أدوات أو طرق سهلة للتغلب على خطأ الحذف هذا دون الحاجة إلى العثور على ملفات المشاكل يدويًا ونقلها/إعادة تسميتها؟
أعتقد أنني وجدت طريقة لحذف الأشياء من cmd
. في الأصل جربت الأمر del
، لكن هذا لم ينجح. ثم تذكرت rmdir
. القيام بما يلي:
rmdir /S /Q <dir>
يبدو أن عملت.
استخدم 7-Zip إدارة الملفات لحذفها.
إذا كنت لا تزال تواجه مشكلة ، فتأكد من استخدامها Shift+Delete داخل 7 ملف مضغوط مدير. خلاف ذلك ، يحاول Windows نقلها إلى "سلة المحذوفات" (والتي سوف تفشل مرة أخرى).
لم تعمل أي من الإجابات الأخرى (المجانية) هنا ، لكنني وجدت واحدة في موقع آخر:
rimraf <dir>
rimraf is Node.js package ، لذلك ستحتاج إلى تثبيت Node.js الذي يتضمن npm . ثم يمكنك تشغيل:
npm install -g rimraf
ثم يمكنك تشغيل rimraf
من سطر الأوامر.
لقد وجدت هذا الحل لأن npm نفسه كان يسبب هذه المشكلة بسبب الطريقة التي يعشع فيها التبعيات.
بالمناسبة ، rimraf
تحصل على اسمها من أمر UNIX rm -rf
، الذي يحذف الملفات والمجلدات بشكل متكرر.
هناك لا حاجة لتثبيت أي برنامج لحل هذه المشكلة.
يمكن حل هذه المشكلة بسهولة باستخدام robocopy
، المثبت مسبقًا منذ نظام التشغيل Windows Vista ، الذي تم إطلاقه في عام 2006.
على سبيل المثال ، تم الإبلاغ عن فشل rmdir /S /Q <dir>
في بعض الحالات. ليست هناك حاجة لاستخدام أداة 7Zip أو أي أداة خارجية. بوويرشيل هو مبالغة. قد يعمل Cygwin ، ولكن قد لا يكون مثبتًا عليه. لذلك ، دعونا نركز على robocopy
والفكرة هي أن
robocopy
لنسخ + محدثبعد تنفيذ robocopy
، سيكون الدليل الهدف فارغًا أيضًا.
هذه التعليمات هي لسطر الأوامر. فقط افتح البحث في Windows ، اكتب cmd
واضغط على Enter.
دعنا نقول الهدف للحذف هو:
C:\delete\this folder\with a very long name
نمضي على النحو التالي:
قم أولاً بإنشاء دليل فارغ ، مثل C:\emptyfolder
.
mkdir C:\emptyfolder
انسخ + التحديث من الدليل الفارغ إلى الهدف ، باستخدام الخيار /purge
robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
احذف الدليل الفارغ. لا تحتاج بعد الآن.
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 أضاف:
قد تحتاج إلى متابعة هذه العملية أكثر من مرة للتخلص من جميع الملفات.
الأداة التي استخدمتها عندما واجهت هذه المشكلة كانت FastCopy . لقد حددت حذف الكل من القائمة المنسدلة ، وحددت الدليل الذي أردت حذفه ، ثم قمت بالنقر فوق حذف الكل .
FastCopy محمول (لا يلزم التثبيت) ، وتتوفر إصدارات 32 بت و 64 بت.
Cygwin في rm -rf
يعمل بشكل جيد على مسارات طويلة!
بدون تثبيت برامج إضافية ، يمكنك استخدام الأمر 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
مجرد إسقاط من Powershell في القيادة عن طريق تشغيل أدناه:
Cmd /C "rmdir /S /Q <dir>"
حل Dentrasi هو الأفضل بالنسبة لي ، ولكني أردت نشر الخطوات المحددة في إجابة من المستوى الأعلى.
هناك شيئان لم يتم ذكرهما بالفعل في الإجابات الحالية.
يحتوي 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 به. أو يمكنك ببساطة استخدام تغيير التسجيل التالي. كما هو الحال دائمًا ، يرجى عمل نسخة احتياطية من قسم السجل الذي تقوم بتغييره قبل القيام بأي شيء.
regedit.exe
.HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
LongPathsEnabled
.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 للتطبيق).
يجب أيضًا ملاحظة أنه لا يمكنك استخدام أسماء المسارات النسبية بهذه الطريقة.
أنا أحب الحل كمد. على الرغم من أنني أريد مشاركة حل آخر يعمل حتى في Explorer فقط: حاول اختصار أسماء المجلدات الأصل قبل الحذف: ستؤدي الأسماء الأقصر إلى تقصير المسار. قل ، لديك بنية شجرة هذا المجلد:
C: \
مشاريع
.. .. مشروع رائع خلال ربيع 2014
بعض النشاط في الحديقة في المدينة يوم الجمعة
.. .. .. .. بلوخ بلوخ بلوخ بلوخ بلوخ بلوخ بلوخ بلوخ بلوخ
.. .. .. .. .. ملفات فعلية بأسماء طويلة ، أيضًا
في هذه الحالة ، لا يمكنك حذف المجلدات ، ولا يمكنك حذف أو إعادة تسمية الملفات. إذا كنت ترغب في إزالة بنية المجلد بالكامل أو جزء منه ، يمكنك إعادة تسمية المجلدات الأصل مؤقتًا وتقصير المسار ، ثم إزالة المجلد. يمكن أن تكون الأسماء مجرد حروف:
C: \
مشاريع
.. .. س
.. .. .. ذ
.. .. .. .. ض
.. .. .. .. .. ملفات فعلية بأسماء طويلة ، أيضًا
في حالتي ، أردت فقط إزالة المجلد بالكامل من خلال العديد من المجلدات الفرعية والملفات. لذلك لم أهتم بأسماء المجلدات.
الحل 7 Zip يعمل بشكل رائع. هناك خيار آخر إذا كنت قد قمت بتثبيت git وهو فتح bash Shell والاستخدام:
rm -f
(أو rm -rf
للمجلدات)
أقترح Total Commander (برنامج كومبيوتري ، لكن استمر في العمل بعد فترة تجريبية مع شاشة بدء تشغيل بسيطة فقط). هذه هي الطريقة التي أقوم بها دائمًا بحل اسم ملف طويل جدًا مشكلات.
يمكنك أيضًا حذفها باستخدام الاسم المختصر المكافئ لها. dir /x
سوف تظهر لك لهم.
لقد قمت بإنشاء برنامج Java بسيط يستخدم robocopy لحذف الملفات. الجرة هي رونابل. لإخراج إضافية تشغيله من خط cmd.
https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view؟usp=sharing
أكبر الأدلة صمم لهذه المهمة كذلك.
مزيد من المعلومات في CodeProject .
لقد جربت جميع الإجابات الأخرى ، لكنها لم تنجح (على الأقل بالنسبة لي).
صادفت delinfile وعملت بشكل جيد وسريع جدا!
يقتصر الإصدار التجريبي على 3 إجراءات/15 يومًا ولكن يمكن استخدامه إذا أردت فقط حذف بعض المجلدات/الملفات:
حصلت على الجواب المثالي هنا (للملفات). يعمل في ويندوز 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 أسئلة كافية لاحتياجاتي. أنت مرحب بك في العالم.
لقد واجهت هذه المشكلة في نظام التشغيل Windows 10 ووجدت هذا الحل السهل.
اكتشفت أخيرًا كيفية القيام بذلك عبر Powershell. فيما يلي الإرشادات التي اتبعتها للحصول على هذا للعمل على Windows 7:
قم بإنشاء مجلد جديد يسمى NTFSSecurity في المجلد C:\Users\XXXX\Documents\WindowsPowerShell\Modules\NTFSSecurity ، حيثXXXXهو اسم مستخدم Windows الخاص بك . مثال: إذا كان اسم المستخدم الخاص بي "aspnyc" ، فسيكون المجلد الجديد C:\Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurity.
قم بتنزيل حزمة File System Security PowerShell Module - يجب أن تكون متوفرة كملف Zip بسيط.
اكتشفت أخيرًا كيفية القيام بذلك مع Powershell على نظام التشغيل Windows 10 حيث كانت أسماء الملفات الفردية طويلة جدًا. فيما يلي الخطوات التي اتبعتها للحصول على هذا للعمل على نظام التشغيل Windows 10:
إذا كان لديك Bash on Ubuntu على Windows مثبتًا ، فيمكنك القرص المضغوط إلى الدليل الأصل في أمر منتظم ، ثم اكتب:
bash -c "rm -rf dirname_here"
الذي يقوم بتشغيل bash ، يحذف الدليل بشكل متكرر من linux حيث لا توجد قيود على اسم الملف ، ثم يخرج مرة أخرى إلى موجه الأوامر العادي.