Neuste cfg Datei anzeigen

dinoldo

Cadet 4th Year
Registriert
Juni 2017
Beiträge
104
Hallo Leute,

wie kann ich mir per Batch / CMD vom Datum her die neuste Datei des Dateityps *.cfg im Verzeichnis C:\Daten anzeigen lassen?
Als Ergebnis brauche ich nur den Name ohne .cfg

Gruß,
Dino
 
Mit Hilfe des aktuellsten Änderungsdatums:

Code:
REM Gibt letzte geaenderte cfg-Datei im angegeben Ordner aus
@ECHO OFF
ECHO Letzte geaenderte Datei: 
FOR /F %%I IN  ('dir C:\Daten\*.cfg /B /O:-D') DO ECHO %%I & PAUSE & EXIT
 
Guten Morgen z0tti,

das passt sehr gut.

Frage: wie bekomme ich das Ergbniss "Master_2016_Pro1.cfg" ohne dem Punkt und Dateierweiterung (soll am Ende "Master_2016_Pro1"?

Gruß,
Dino
 
Aus
Code:
%%I
Code:
%%~nI
machen. Siehe auch die cmd-Hilfe zu for /?
 
Hallo simpsonsfan,

es funktioniert - herzlichen Dank!

Ich möchte das Ergebnis weiter hin in der Batch Datei an x-beliebige Stelle nutzen.
Muss ich das Ergebnis in eine Variable packen?

So geht es erstmal nicht...

Code:
ECHO Letzte geaenderte CFG-Datei ohne Dateiendung: 
FOR /F %%I IN  ('dir ""D:\Daten\*.cfg"" /B /O:-D') DO ECHO %%~nI
set FILE=%%~nI
echo %FILE%
pause

Bitte um Hilfe, damit ich mein Arbeit heute noch fertig stellen kann.

Besten Dank im Voraus!

Gruß,
Dino
 
Dann musst du am Anfang des Batch-Skripts ein
Code:
setlocal enableDelayedExpansion
einfügen und bei der Verwendung der Variable dann statt Prozentzeichen Ausrufezeichen verwenden. Also
Code:
echo !FILE!
In einem anderen Thread hat r0b0t noch ein paar weitere Worte dazu.
r0b0t schrieb:
 
dinoldo schrieb:
So geht es erstmal nicht...

Wenn Du mit Schleifenvariablen zur Laufzeit arbeiten willst, dann musst Du vorher ein
Code:
SETLOCAL EnableDelayedExpansion
einfügen.

Code:
ECHO Letzte geaenderte CFG-Datei ohne Dateiendung:

SETLOCAL EnableDelayedExpansion
 
FOR /F %%I IN  ('dir ""D:\Daten\*.cfg"" /B /O:-D') DO ECHO %%~nI
set FILE=%%~nI
echo !FILE!

ENDLOCAL

pause

/edit: zu langsam ...
 
Code:
@echo off
color A0

ECHO Letzte geaenderte CFG-Datei ohne Dateiendung:

SETLOCAL EnableDelayedExpansion
FOR /F %%I IN  ('dir ""C:\Daten\*.cfg"" /B /O:-D') DO ECHO %%~nI
set FILE=%%~nI
echo !FILE!

ENDLOCAL

pause

Damit bekomme ich nicht !FILE! raus, sondern alle Dateien:

Letzte geaenderte UPF-Datei ohne Dateiendung
master_2017.0
cadison
untitled
TSK_2017.0
Losta_1
FLUG_2014
examples
KIT
%~nI
Drücken Sie eine beliebige Taste . . .
 
dinoldo schrieb:
Damit bekomme ich nicht !FILE! raus, sondern alle Dateien:
Ja natürlich - du durchläufst ja auch eine Schleife über alle Dateien, nach Änderungsdatum sortiert. Einfach die Schleife verlassen, wenn der 1. Wert gefunden ist.

Code:
@ECHO OFF

FOR /F %%I IN  ('dir ""C:\Daten\*.cfg"" /B /O:-D') DO (
  set FILE=%%~nI
  IF EXIST %%I GOTO Found
)
  
:Found

ECHO %File%

pause

edit: Alternativ geht natürlich auch exit, wie bereits von z0tti in seinem Posting verwendet.
 
Zuletzt bearbeitet:
jetzt bekomme ich eine Datei ohne Dateiendung. Das ist schon mal gut.
Die Datei die ich erhalten haben ist nicht die zuletzt geänderte, sondern die zuerst geänderte.
 
Entferne das Minus-Zeichen in Zeile 3 vor dem D.
Passiert ist folgendes: Der dir-Befehl gibt dir eine Liste der cfg-Dateien im Verzeichnis aus. Durch die Einstellung /O:-D nach Datum sortiert mit der neuesten Datei ganz oben.
z0tti hat in seinem Codebeispiel nach der ersten Zeile das Skript abgebrochen. So wurde die erste Zeile, also die neueste Datei ausgegeben.
Dadurch, dass du nicht mehr abbrichst, wird die For-Schleife für alle gefundenen Einträge durchgegangen und jedesmal die Variable FILE mit dem Dateinamen aus der aktuellen Zeile überschrieben. Damit bleibt logischerweise als letztes der Dateiname aus der letzten Zeile drin. In der eingestellten Sortierung (Info mittels dir /?) steht in der letzten Zeile die Datei mit dem niedrigsten Datum.
Wenn du das Minus entfernst, ist die Reihenfolge gerade andersrum.

Edit: Hab Posts #8 und 9 übersehen. Mit dem Code von
Andreas_ brichst du ja doch noch ab. Bei mir funktioniert das so und es wird die zuletzt geänderte Datei ausgegeben. Dann allerdings wieder ohne enableDelayedExpansion.
 
Zuletzt bearbeitet:
Herzlichen Dank für die ausführliche Erklärung! Jetzt funktioniert es wie gewollt.
 
Zurück
Oben