كيفية جعل إخراج Filename يساوي اسم المجلد
-
23-08-2019 - |
سؤال
لقد قمت بإنشاء ملف دفعي لإخراج محتوى مجلد في قائمة الأسماء.
@echo off
cd /d %1
Title %~f1
dir %1 /b /l > %1\..\file_list.txt
كيف يمكنني إجراء file_list.txt لتكون "dir name" .txt؟
على سبيل المثال، أنا في مجلد ABC وأريد إخراج قائمة Dir بحيث يتم تسمية ملف النص النهائي باسم ABC.TXT بدلا من file_list.txt
تحرير: شكرا alconja، فإنه يعمل تماما. نظرا لأن هذا هو موقع معلومات وتعلم، هل تمانع في توسيع إجابتك لشرح المعلمات التي تضيفها؟
المحلول
بناء على المناقشة هنا, أعتقد أن هذا هو ما أنت بعد:
@echo off&setlocal enableextensions
Title %~f1
for %%* in (%1) do set MyDir=%%~n*
dir %1 /b /l > %1\..\"%MyDir%.txt"
endlocal&goto :eof
أعطاها اختبار سريع ويبدو أن تفعل ما تريد
... المقدمة كما هو / لا توجد ضمانات / الخ :)
نصائح أخرى
لا أعتقد أن هناك طريقة سهلة للحصول على الجزء الأخير من المسار الحالي في النص البرمجي الدفعي فقط.
ولكن، إذا كان لديك سيد على جهازك، يصبح سهلا نسبيا:
@echo off
cd /d %1
Title %~f1
for /F "usebackq delims=" %%i in (`"pwd | sed -e ""{s/.*\\//g}"""`) do dir %1 /b /l > %1\..\%%i.txt
تصحيح: إجابة alconja صحيح. على ما يبدو مع ملحقات إلى البرمجة النصية الدفعية، هذا ممكن. (أفهم الآن ~ f كذلك). لذلك، لا تحتاج إلى SED بعد الآن، وهذا يقلل من:
@echo off
cd /d %1
Title %~f1
for /F "usebackq delims=" %%i in (`pwd`) do dir %1 /b /l > %1\..\%%~ni.txt
يمكن القول، نظرا لأنك تغير الدليل، فأنت لا تحتاج إلى٪ 1 في مسار الإخراج أو أمر DIR، ويجب أن تكون قادرا فقط على استبدال٪ 1 للمسار، حتى تتمكن من محاولة (غير مهتم):
@echo off
cd /d %1
Title %~f1
dir /b /l > ..\%~n1.txt