دفعة العثور على امتداد الملف
-
02-07-2019 - |
سؤال
إذا قمت بالتكرار على كل ملف باستخدام:
@echo off
FOR %%f IN (*\*.\**) DO (
echo %%f
)
كيف يمكنني طباعة امتداد كل ملف؟حاولت تعيين %%f لمتغير مؤقت ثم استخدام الكود : echo "%t:~-3%"
للطباعة ولكن دون نجاح.
المحلول
يحتوي الأمر FOR على العديد من المفاتيح المضمنة التي تسمح لك بتعديل أسماء الملفات.حاول القيام بما يلي:
@echo off
for %%i in (*.*) do echo "%%~xi"
لمزيد من التفاصيل، استخدم help for
للحصول على قائمة كاملة بالمعدلات - هناك عدد غير قليل منها!
نصائح أخرى
يعمل هذا، على الرغم من أنه ليس سريعًا بشكل مذهل:
@echo off
for %%f in (*.*) do call :procfile %%f
goto :eof
:procfile
set fname=%1
set ename=
:loop1
if "%fname%"=="" (
set ename=
goto :exit1
)
if not "%fname:~-1%"=="." (
set ename=%fname:~-1%%ename%
set fname=%fname:~0,-1%
goto :loop1
)
:exit1
echo.%ename%
goto :eof
سامالجواب هو بالتأكيد الأسهل لما تريد.لكن أردت أن أضيف:
لا set
متغير داخل ()
'كنبة for
وتتوقع استخدامه على الفور، إلا إذا قمت بإصداره مسبقًا
setlocal ENABLEDELAYEDEXPANSION
وأنت تستخدم !
بدلاً من % لتغليف اسم المتغير.على سبيل المثال،
@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
set t=%%f
echo !t:~-3!
)
الدفع
set /?
لمزيد من المعلومات.
البديل الآخر هو استدعاء روتين فرعي للقيام بذلك set
, ، يحب باكس عروض.
لا تنتمي إلى StackOverflow