Frage

Ich habe bis zu 4 Dateien, die auf dieser Struktur basieren (beachten Sie, dass es sich bei den Präfixen um Datumsangaben handelt).

  • 0830Dateiname.txt
  • 0907Dateiname.txt
  • 0914Dateiname.txt
  • 0921Dateiname.txt

Ich möchte die aktuellste Datei (0921Dateiname.txt) öffnen.Wie kann ich das in einer Batchdatei machen?

Danke.

War es hilfreich?

Lösung

Diese Methode verwendet das tatsächliche Dateiänderungsdatum, um herauszufinden, welche Datei die neueste ist:

@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

Diese Methode wählt jedoch die letzte Datei in alphabetischer Reihenfolge (oder die erste in umgekehrter alphabetischer Reihenfolge). Wenn die Dateinamen also konsistent sind, funktioniert sie:

@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

Sie müssen tatsächlich entscheiden, welche Methode für Sie besser ist.

Andere Tipps

Tut mir leid, dass ich diese Frage spamme, aber ich habe wirklich Lust, etwas zu posten Die wahre Antwort.Wenn Sie möchten, dass Ihr BATCH-Skript dies tut analysieren Und vergleichen die Daten in Dateinamen, dann können Sie so etwas verwenden:

@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

Einzeiler mit EXIT-Trick:

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

BEARBEITEN:

@pam:Sie haben Recht, ich bin davon ausgegangen, dass die Dateien nach Datum sortiert sind, aber Sie können den Befehl wie folgt ändern:

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

Dann haben Sie die Dateiliste in umgekehrter Reihenfolge nach Namen sortiert.

Bitte schön...(Ich hoffe, niemand hat mich dafür geschlagen ...) (Sie müssen die Datei als lastText.bat oder so speichern) Dies öffnet / Ausführung der ältesten .txt-Datei

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

Wahrscheinlich nur XP.SEHEN SIE: Die mächtige Kraft von DOS.
Dabei wird jedoch der neueste Dateiname nach Datum und NICHT nach Dateiname verwendet.

Wenn Sie den neuesten Dateinamen erhalten möchten, ändern Sie /od in /on .
Wenn Sie nach etwas anderem sortieren möchten, fügen Sie der zweiten Zeile den Befehl „Sortieren“ hinzu.

Verwenden Sie einen regulären Ausdruck, um die relevante Ganzzahl zu analysieren und zu vergleichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top