افتح أحد سلسلة الملفات باستخدام ملف دفعي
-
09-06-2019 - |
سؤال
لدي ما يصل إلى 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 .
إذا كنت تريد الفرز على شيء آخر، أضف أمر "فرز" إلى السطر الثاني.
استخدم التعبير العادي لتحليل الأعداد الصحيحة ذات الصلة ومقارنتها.