@ECHO OFF
SETLOCAL
:: mainline - test first/not first
CALL :testfirst ###
IF DEFINED alreadyrun (ECHO ### already run) ELSE (ECHO ### first run)
CALL :testfirst $$$
IF DEFINED alreadyrun (ECHO $$$ already run) ELSE (ECHO $$$ first run)
CALL :testfirst ###
IF DEFINED alreadyrun (ECHO ### already run) ELSE (ECHO ### first run)
CALL :testfirst $$$
IF DEFINED alreadyrun (ECHO $$$ already run) ELSE (ECHO $$$ first run)
GOTO :eof
:testfirst
SET "targetdir=U:\destdir"
SET "alreadyrun=%date:/=-%"
IF EXIST "%targetdir%\%alreadyrun%.%1" GOTO :eof
DEL "%targetdir%\*.%1" 2>NUL >nul
echo,>"%targetdir%\%alreadyrun%.%1"
SET "alreadyrun="
GOTO :EOF
Sie müssten die Einstellung targetdir
an Ihre Umstände anpassen. U:\destdir
passt zu meinem System.
Die Idee hier ist, ein spezielles Verzeichnis einzurichten, in dem relevante Daten gespeichert werden. Ich wählte u:\destdir
als das ist bequem für mich. %temp%
oder %tmp%
kann eine offensichtliche Wahl sein, aber diese können jederzeit willkürlich gelöscht werden, sind also wahrscheinlich nicht die besten.
Der Hauptteil zeigt zwei verschiedene Prozeduren, die "run" genannt ###
und $$$
sind - die Namen sind nicht wichtig und können fast alles sein, was Sie möchten. Der kritische Teil ist die :testfirst
Subroutine (die ich als interne Unterprogramm geschrieben haben, könnte aber eine unabhängige Batch-Datei, wenn Sie es vorziehen - nur die call :testfirst
zu call testfirst
ändern)
Diese Routine setzt die Variable alreadyrun
auf das aktuelle Datum mit /
Zeichen in -
als /
umgewandelt ist kein gültiger Dateiname.
Dann sehen Sie, ob die Datei (transformiertes Datum).% 1 im ausgewählten Verzeichnis existiert (wobei% 1 durch das angegebene Argument ersetzt wird - ###
und $$$
im Beispiel). Wenn dies der Fall ist, beenden Sie einfach die Routine und kehren Sie mit alreadyrun
auf einen Wert zurück.
Wenn die Datei nicht existiert, löschen Sie alle Dateien mit der gleichen Erweiterung ###
aus dem Verzeichnis (sie wurden gestern oder früher erstellt) und erstellen Sie eine neue (heute). ### Datei. Löschen Sie dann die Umgebungsvariable alreadyrun
.
Das aufrufende Routing wird dann alreayrun
als undefined (nicht bereits ausgeführt) oder definiert (bereits heute ausgeführt), die Ihre Anforderung erfüllen sollte.
Ich brauche das in einem einzigen Zeilenbefehl – user2742622