Öffnen Sie eine aus einer Reihe von Dateien mithilfe einer Batchdatei
-
09-06-2019 - |
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.
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.