سؤال

لدي ما يصل إلى 4 ملفات بناءً على هذه البنية (لاحظ أن البادئات هي تواريخ)

  • 0830اسم الملف.txt
  • 0907اسم الملف.txt
  • 0914اسم الملف.txt
  • 0921اسم الملف.txt

أريد فتح أحدث ملف (0921filename.txt).كيف يمكنني القيام بذلك في ملف دفعي؟

شكرًا.

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

المحلول

تستخدم هذه الطريقة تاريخ تعديل الملف الفعلي لمعرفة أي ملف هو الأحدث:

@echo off
for /F %%i in ('dir /B /O:-D *.txt') do (
    call :open "%%i"
    exit /B 0
)
:open
    start "dummy" "%~1"
exit /B 0

ومع ذلك، تختار هذه الطريقة الملف الأخير بالترتيب الأبجدي (أو الأول، بترتيب أبجدي عكسي)، لذلك إذا كانت أسماء الملفات متسقة - فستعمل:

@echo off
for /F %%i in ('dir /B *.txt^|sort /R') do (
    call :open "%%i"
    exit /B 0
)
:open
    start "dummy" "%~1"
exit /B 0

عليك في الواقع أن تختار الطريقة الأفضل بالنسبة لك.

نصائح أخرى

آسف، لإرسال بريد عشوائي لهذا السؤال، لكني أشعر حقًا بالرغبة في النشر الجواب الحقيقي.إذا كنت تريد البرنامج النصي BATCH الخاص بك تحليل و يقارن التواريخ الموجودة في أسماء الملفات، فيمكنك استخدام شيء مثل هذا:

@echo off

rem Enter the ending of the filenames.
rem Basically, you must specify everything that comes after the date.
set fn_end=filename.txt

rem Do not touch anything bellow this line.
set max_month=00
set max_day=00

for /F %%i in ('dir /B *%fn_end%') do call :check "%%i"
call :open %max_month% %max_day%
exit /B 0

:check
    set name=%~1
    set date=%name:~0,4%
    set month=%date:~0,2%
    set day=%date:~2,2%
    if /I %month% GTR %max_month% (
        set max_month=%month%
        set max_day=%day%
    ) else if /I %month% EQU %max_month% (
        set max_month=%month%
        if /I %day% GTR %max_day% (
            set max_day=%day%
        )
    )
exit /B 0

:open
    set date=%~1
    set month=%~2
    set name=%date%%month%%fn_end%
    start "dummy" "%name%"
exit /B 0

بطانة واحدة، باستخدام خدعة EXIT:

FOR /F %%I IN ('DIR *.TXT /B /O:-D') DO NOTEPAD %%I & EXIT

يحرر:

@بام:أنت على حق، كنت أفترض أن الملفات كانت مرتبة حسب التاريخ، ولكن يمكنك تغيير الأمر إلى:

FOR /F %%I IN ('DIR *.TXT /B /O:-N') DO NOTEPAD %%I & EXIT

ثم لديك قائمة الملفات مرتبة حسب الاسم بترتيب عكسي.

ها أنت ذا...(آمل ألا يضربني أحد عليه ...) (ستحتاج إلى حفظ الملف كـ LastText.bat أو شيء ما) سوف يفتح / تشغيل أقدم ملف .txt

dir *.txt /b /od > systext.bak 
FOR /F %%i in (systext.bak) do set sysRunCommand=%%i 
call %sysRunCommand%
del systext.bak /Y

ربما XP فقط.ها القوة الجبارة لDOS.
على الرغم من أن هذا يأخذ اسم الملف الأحدث حسب التاريخ - وليس حسب اسم الملف..

إذا كنت ترغب في الحصول على أحدث اسم للملف، فقم بتغيير /od إلى /on .
إذا كنت تريد الفرز على شيء آخر، أضف أمر "فرز" إلى السطر الثاني.

استخدم التعبير العادي لتحليل الأعداد الصحيحة ذات الصلة ومقارنتها.

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