كيف يمكنني العثور على الملفات التي يزيد طول مسارها عن 260 حرفًا في نظام التشغيل Windows؟

StackOverflow https://stackoverflow.com//questions/12697259

سؤال

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

هل كانت مفيدة؟

المحلول

افعل أ dir /s /b > out.txt ثم قم بإضافة دليل في الموضع 260

في بوويرشيل cmd /c dir /s /b |? {$_.length -gt 260}

نصائح أخرى

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

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

giveacodicetagpre.

كملائم لأبسط الحل، وإذا كنت لا تستطيع أو لا ترغب في تثبيت PowerShell، فقط تشغيل:

giveacodicetagpre.

أو (أسرع):

giveacodicetagpre.

والخطوط التي تزيد عن 260 ستصل إلى الجزء العلوي من القائمة.لاحظ أنه يجب عليك إضافة 1 إلى فرز المعلمة العمود (/ + n).

لقد قمت بإنشاء بديل للإجابات الجيدة الأخرى هنا التي تستخدم PowerShell، لكن إجابتي أيضًا تحفظ القائمة في ملف.سوف نشاركه هنا في حال أراد أي شخص آخر شيئًا كهذا.

تحذير: يقوم الرمز بالكتابة فوق "longfilepath.txt" في دليل العمل الحالي.أعلم أنه من غير المحتمل أن يكون لديك واحدة بالفعل، ولكن فقط في حالة!

أراد ذلك عمدا في سطر واحد:

Out-File longfilepath.txt ; cmd /c "dir /b /s /a" | ForEach-Object { if ($_.length -gt 250) {$_ | Out-File -append longfilepath.txt}}

تعليمات مفصلة:

  1. قم بتشغيل بوويرشيل
  2. انتقل إلى الدليل الذي تريد التحقق من أطوال مسار الملف (C:يعمل)
  3. انسخ الكود والصقه [انقر بزر الماوس الأيمن للصقه في PowerShell، أو Alt + Space > E > P]
  4. انتظر حتى الانتهاء ثم قم بعرض الملف: cat longfilepath.txt | sort

توضيح:

Out-File longfilepath.txt ; - قم بإنشاء (أو الكتابة فوق) ملف فارغ بعنوان "longfilepath.txt".فاصلة منقوطة لفصل الأوامر.

cmd /c "dir /b /s /a" | – تشغيل الأمر dir على PowerShell، /a لإظهار كافة الملفات بما في ذلك الملفات المخفية. | إلى الأنابيب.

ForEach-Object { if ($_.length -gt 250) {$_ | Out-File -append longfilepath.txt}} - لكل سطر (يُشار إليه بـ $_)، إذا كان الطول أكبر من 250، قم بإلحاق هذا السطر بالملف.

يمكنك إعادة توجيه stderr.

مزيد من التوضيح هنا, ، ولكن وجود أمر مثل:

MyCommand >log.txt 2>errors.txt

يجب الحصول على البيانات التي تبحث عنها.

وأيضًا، كخدعة، يتجاوز Windows هذا القيد إذا كان المسار مسبوقًا بـ \\?\ (msdn)

ربما تكون هناك خدعة أخرى إذا كان لديك جذر أو وجهة تبدأ بمسار طويل SUBST سوف يساعد:

SUBST Q: "C:\Documents and Settings\MyLoginName\My Documents\MyStuffToBeCopied"
Xcopy Q:\ "d:\Where it needs to go" /s /e
SUBST Q: /D

من http://www.powershellmagazine.com/2012/07/24/jaap-brassers-favorite-powershell-tips-and-tricks/:

Get-ChildItem –Force –Recurse –ErrorAction SilentlyContinue –ErrorVariable AccessDenied

الجزء الأول يتكرر فقط من خلال هذا والمجلدات الفرعية؛استخدام -ErrorVariable AccessDenied يعني دفع العناصر المخالفة إلى متغير بوويرشيل AccessDenied.

يمكنك بعد ذلك فحص المتغير بهذه الطريقة

$AccessDenied |
Where-Object { $_.Exception -match "must be less than 260 characters" } |
ForEach-Object { $_.TargetObject }

إذا كنت لا تهتم بهذه الملفات (قد يكون ذلك قابلاً للتطبيق في بعض الحالات)، فما عليك سوى إسقاط ملف -ErrorVariable AccessDenied جزء.

TLPD ("دليل المسار طويل جدا") هو البرنامج الذي أنقذه. سهل الاستخدام للغاية:

href="https://sourceforge.net/projects/tlpd/" rel="nofollow noreferrer"> https://sourceforge.net/projects/tlpd/

للحصول على مسارات أكبر من 260:
يمكنك استخدام:

giveacodicetagpre.

مثال على 14 حرفا:
لعرض أطوال المسارات:

giveacodicetagpre.

احصل على مسارات أكبر من 14:

giveacodicetagpre.

لقطة شاشة:
أدخل وصف الصورة هنا

لأسماء الملفات أكبر من 10:

giveacodicetagpre.

لقطة شاشة:
أدخل وصف الصورة هنا

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