Batch-Grundlagen

enrixk
Goto Top
Hallo

ich möchte mit einer CMD-Datei prüfen, ob ein Verzeichnis leer ist.

Nun habe ich hier in den Tiefen des Forums die folgende Befehlskette aufgeschnappt:


Die allgemeine Syntaxregel lautet für die IF-Anweisung wie folgt:


  • Ich möchte gern wissen, ob die Anweisung dir /b /a:d %extensionsdir% in diesem Fall <command> ist oder ob die Anweisung zur IF-EXIST-Bedingung dazugehört.

  • Ein weiterer Punkt ist mir aufgefallen: Seltsamerweise wird die Ausgabe "C:\Users\Benutzername\Desktop\vscode\extensions ist nicht leer" auch dann noch ausgegeben, wenn ich das zu Testzwecken in dem Verzeichnis %extensionsdir% erstellte Test-Verzeichnis wieder lösche. Woran kann das liegen?

Content-Key: 667187

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

Ausgedruckt am: 19.08.2022 um 01:08 Uhr

Mitglied: SeaStorm
SeaStorm 31.05.2021 um 09:24:11 Uhr
Goto Top
Hi

nimm Powershell und gönne Batch endlich seine Ruhe im Grab.
Mitglied: 148656
148656 31.05.2021 um 09:43:41 Uhr
Goto Top
Zitat von @SeaStorm:

Hi

nimm Powershell und gönne Batch endlich seine Ruhe im Grab.

Ich unterstreiche die Antwort mit folgendem Lösungsvorschlag face-smile
Mitglied: TK1987
TK1987 31.05.2021, aktualisiert am 01.06.2021 um 08:14:53 Uhr
Goto Top
Moin,

Zitat von @Enrixk:
Nun habe ich hier in den Tiefen des Forums die folgende Befehlskette aufgeschnappt:
keine Ahnung wo du das her hast, aber das kann so nicht funktionieren, weil dir /ad auch dann erfolgreich ausgeführt wird, wenn es keine Unterverzeichnisse gibt.
Darüber hinaus ist es ziemlich ineffizient, 2x hintereinander das selbe If-Statement zu überprüfen.

Die allgemeine Syntaxregel lautet für die IF-Anweisung wie folgt:
  • Ich möchte gern wissen, ob die Anweisung dir /b /a:d %extensionsdir% in diesem Fall <command> ist oder ob die Anweisung zur IF-EXIST-Bedingung dazugehört.
Natürlich ist das der Befehl.

* Ein weiterer Punkt ist mir aufgefallen: Seltsamerweise wird die Ausgabe "C:\Users\Benutzername\Desktop\vscode\extensions ist nicht leer" auch dann noch ausgegeben, wenn ich das zu Testzwecken in dem Verzeichnis %extensionsdir% erstellte Test-Verzeichnis wieder lösche. Woran kann das liegen?
Siehe oben.

Lass das mit dem Batch besser bleiben und greife zeitgemäß gleich zu Powershell

Gruß Thomas
Mitglied: Pedant
Pedant 31.05.2021 um 10:04:28 Uhr
Goto Top
Hallo Enrixk,

Deine Codebeispiel kann ich nicht wirklich nachvollziehen.
Ich kann Dir aber eine Alternative vorschlagen.

ich möchte mit einer CMD-Datei prüfen, ob ein Verzeichnis leer ist.
Der von mir verwendetet Befehl
dir %extensionsdir%\*.* /b
produziert keine Ausgabe wenn weder Dateien noch Unterverzeichnisse gefunden werden.
Objekte die das Attribut "versteckt" oder "system" haben, werden vom Befehl übersehen.
Falls das stören sollte, kann man da nachbessern.

Gruß Frank
Mitglied: Enrixk
Enrixk 01.06.2021 um 22:45:29 Uhr
Goto Top
Vielen Dank fürs Mitdenken.

Ich habe mich für eine Lösung mit Powershell entschieden.
Mitglied: Pedant
Pedant 02.06.2021 um 09:47:05 Uhr
Goto Top
Hallo Enrixk,
... ob ein Verzeichnis leer ist.
... eine Lösung mit Powershell ...
Wie sieht die Abfrage jetzt aus?

Gruß Frank
Mitglied: Enrixk
Enrixk 02.06.2021 um 15:33:52 Uhr
Goto Top
Hallo @Pedant

Die Lösung sieht wie folgt aus:
Mitglied: Pedant
Pedant 02.06.2021 um 16:02:54 Uhr
Goto Top
Hallo Enrixk,

danke fürs (mit)teilen.

Eine kleine Anmerkung für alle, die per Suche über den Code stolpern:
Es werden sowohl Dateien, als auch Unterordner gezählt.
Falls alle Elemente im zu prüfenden Verzeichnis das Attribut "versteckt" haben oder in einem Unterordner liegen der seinerseits "versteckt" ist, wird das zu prüfenden Verzeichnis als leer gewertet.

Gruß Frank