2017-08-30 2 views
1

Ich habe eine Batch-Datei, die Operationen an einer bestimmten Datei jeden Tag ausführen muss. Bisher haben die Dateinamen das Muster EX_2017-08-30.DAT gefolgt, das bedeutet, dass ich die folgende verwenden könnte den genauen Dateinamen für den Tag zu kommen:Abrufen eines Dateinamens in eine Variable mit einer Batch-Datei

set today=%date:~-4,4%-%date:~-10,2%-%date:~-7,2% 
set filename=EZ_%today%.DAT 

Jetzt bin ich die Dateinamen gesagt, ändert sich um einen Zeitstempel enthalten, wie als EX_2017-08-30-231859.DAT. Die genaue Zeit wird jedoch vorher nicht bekannt sein (sie wird gesetzt, wenn ein bestimmter Prozess abgeschlossen ist).

Ich kann keinen Platzhalter in der Batchdatei verwenden, da der Dateiname in eine externe Datei geschrieben wird, damit eine andere Anwendung verwendet werden kann. Daher muss ich den genauen Dateinamen kennen. Gibt es trotzdem, dass ich eine Suche mit einem Platzhalter durchführen kann und den resultierenden vollständigen Dateinamen in einer Variablen speichern kann?

Antwort

1

Wenn Sie die Dateien in dem Verzeichnis Ihrer EX_ * Datei befindet auflisten können, können Sie tun:

for %%i in (EX_%today%-*.DAT) do (
    set filename=%%i 
) 

Die erste Zeile alle Dateien im Verzeichnis listet das Datum und die Erweiterung übereinstimmt, und dann setzt die letzte Datei auf die Variable filename. Seien Sie vorsichtig, da dies keine Warnungen auslöst, sollte mehr als eine Datei dem Ausdruck entsprechen.

Wenn Sie das Verzeichnis nicht auflisten können, ist Ihre einzige Chance Bruteforce. Es gibt nur 24 * 60 * 60 Möglichkeiten des Dateinamens, und wenn Sie in der Zeit rückwärts gehen, sollten Sie die gewünschte Datei in nur ein paar tausend Iterationen erreichen, vorausgesetzt, die Aufgabe wird normalerweise um Mitternacht abgeschlossen.

+0

Ich glaube, ich habe Zugriff auf die Dateien aufzulisten, so scheint dies den Trick zu tun. Bevor ich diese Antwort annehme, würde ich vorschlagen, dass Sie 'echo %% i' in' set filename = %% i' ändern, damit es meine Frage direkter beantwortet (indem Sie den Dateinamen auf eine Variable setzen und nicht nur Dateinamen auflisten). – techturtle

+0

@techturtle: Cool, ich habe genau das getan. Ich habe auch auf mögliche Probleme mit diesem Ansatz hingewiesen. –

Verwandte Themen