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-Key: 334167

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

Printed on: April 24, 2024 at 23:04 o'clock

Member: Pjordorf
Pjordorf Apr 05, 2017 at 15:24:37 (UTC)
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
Member: zimbosmurf
zimbosmurf Apr 05, 2017 at 15:30:31 (UTC)
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
Member: zimbosmurf
zimbosmurf Apr 05, 2017 at 15:36:54 (UTC)
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.
Mitglied: 132895
Solution 132895 Apr 05, 2017 updated at 15:40:50 (UTC)
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
Member: rubberman
Solution rubberman Apr 05, 2017 updated at 15:42:56 (UTC)
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
Member: zimbosmurf
zimbosmurf Apr 05, 2017 at 15:42:54 (UTC)
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
Member: Pjordorf
Pjordorf Apr 05, 2017 at 15:45:02 (UTC)
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
Mitglied: 132895
132895 Apr 05, 2017 updated at 15:48:29 (UTC)
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
Member: zimbosmurf
zimbosmurf Apr 05, 2017 at 16:09:37 (UTC)
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!