zimbosmurf
Goto Top

Batch - IF - mehr als eine Datei eines bestimmten Typs

Hallo!

Ich möchte in einer Batchdatei eine Datei eines bestimmten Typs verarbeiten. Hierfür hole ich mir mit

for %%G in (*.type) do set "filename=%%G"

den Namen der Datei in die Variable filename.

Im Normalfall sollte im Arbeitsverzeichnis der Batchdatei nur genau diese eine Datei dieses Typs liegen.

Leider finde ich keinen einfachen Weg, zu überprüfen, ob das korrekt ist oder ob nicht aus irgendeinem doofen Grund doch eine zweite Datei dieses Typs existiert.

Kann mich irgendwer in die richtige Richtung schubsen?

Thomas

Content-ID: 334167

Url: https://administrator.de/contentid/334167

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

Pjordorf
Pjordorf 05.04.2017 um 17:24:37 Uhr
Goto Top
Hallo,

Zitat von @zimbosmurf:
Leider finde ich keinen einfachen Weg, zu überprüfen, ob das korrekt ist oder ob nicht aus irgendeinem doofen Grund doch eine zweite Datei dieses Typs existiert.
Ist nur der Dateiname entscheidend oder gar dessen inhalt?
IF "filename" == "deingesuchtername" ....

Gruß,
Peter
zimbosmurf
zimbosmurf 05.04.2017 um 17:30:31 Uhr
Goto Top
Leider weiss ich den Dateinamen gar nicht im Vorhinein.

Es ist ein Outputfile einer Diagnosefunktion, der Dateiname setzt sich aus Rechnername und Erstelldatum zusammen.

Gruß,
Thomas
zimbosmurf
zimbosmurf 05.04.2017 um 17:36:54 Uhr
Goto Top
Wenn mehr als eine Datei existiert "weiss" ich nicht, welche von beiden die korrekte ist. Meine for-Schleife liefert mir immer den Dateinamen der alphabetisch letzten Datei zurück.
Wenn mehr als eine Datei vom gesuchten Typ existieren möchte die das Skript abbrechen.
132895
Lösung 132895 05.04.2017 aktualisiert um 17:40:50 Uhr
Goto Top
@echo off
set "filename="  
for %%G in (*.type) do (
    if not defined filename (
        set "filename=%%G"  
    ) else (
        echo Zweite Datei des selben Typs gefunden, Abbruch!
        pause
        exit
    )
)
hauruck
rubberman
Lösung rubberman 05.04.2017 aktualisiert um 17:42:56 Uhr
Goto Top
Hallo Thomas,

relativ simple Möglichkeit:
@echo off &setlocal
for /f %%i in ('dir /a-d /b *.type 2^>nul^|find /c /v ""') do if %%i neq 1 (  
  echo Fehler
  pause
  exit /b
)

echo Anzahl ist 1, alles OK.
pause

Grüße
rubberman
zimbosmurf
zimbosmurf 05.04.2017 um 17:42:54 Uhr
Goto Top
Manchmal sind die einfachsten Lösungen die fernliegendsten:

set /a sum=0
for %%G in (*.type) do set "filename=%%G" & @set /a sum=sum+1 >nul

wenn sum hinterher grösser als 1 ist, springe ich raus!

/facepalm
Pjordorf
Pjordorf 05.04.2017 um 17:45:02 Uhr
Goto Top
Hallo,

Zitat von @zimbosmurf:
Leider weiss ich den Dateinamen gar nicht im Vorhinein.
Wenn du nicht weisst welche Datei (bei mehrfach vorkommen) deine gesuchte ist, wie sollen wir das dann wissen? Allerdings wird diese Datei eben nicht mehrfach vorkommen sofern das Erstelldatum auch eine Uhrzeit beinhalten sollte. Ansonsten wir dir immer je nach OS und Dateisystem der zuletzt aufgelistete Dateiname übergeben. Das muss nicht zwingend nach deiner Vorstellung sortiert sein.

Wenn du schon nicht weisst welche Datei du willst, ist es auch egal welche Datei du nimmst face-smile

Gruß,
Peter
132895
132895 05.04.2017 aktualisiert um 17:48:29 Uhr
Goto Top
Wenn du schon nicht weisst welche Datei du willst, ist es auch egal welche Datei du nimmst
Wenn dann schon anhand des Datums sortieren (dir /A-D /B /OD) und die aktuellste nehmen face-wink
zimbosmurf
zimbosmurf 05.04.2017 um 18:09:37 Uhr
Goto Top
Es ist mir ja im Grunde genommen schietegal, wie die Dateien heissen.

Meine Abbruchbedingung ist:

Wenn mehr als eine Datei vom Typ *.type existiert, Warnung an User und Abbruch!

Das Skript darf einfach nur dann ausgeführt werden, wenn *genau* eine Datei vom Typ *.type existiert.

Das habe ich mit meiner Zählvariable jetzt ja auch hinbekommen.

Danke für die Hilfen!