سؤال

إذا قمت بالتكرار على كل ملف باستخدام:

@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, ، يحب باكس عروض.

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