Batch-Grundlagen
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 mit einer CMD-Datei prüfen, ob ein Verzeichnis leer ist.
Nun habe ich hier in den Tiefen des Forums die folgende Befehlskette aufgeschnappt:
@echo off
Set "extensionsdir=C:\Users\Benutzername\Desktop\vscode\extensions"
( if exist %extensionsdir% dir /b /a:d %extensionsdir%>nul 2>nul) || @echo %extensionsdir% ist leer
( if exist %extensionsdir% dir /b /a:d %extensionsdir%>nul 2>nul) && @echo %extensionsdir% ist nicht leer
Die allgemeine Syntaxregel lautet für die IF-Anweisung wie folgt:
if [not] exist <filename> <command> [else <expression>]
- 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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667187
Url: https://administrator.de/contentid/667187
Ausgedruckt am: 23.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
Ich unterstreiche die Antwort mit folgendem Lösungsvorschlag
update-help
get-help test-path -examples
Moin,
Darüber hinaus ist es ziemlich ineffizient, 2x hintereinander das selbe If-Statement zu überprüfen.
Lass das mit dem Batch besser bleiben und greife zeitgemäß gleich zu Powershell
Gruß Thomas
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.Nun habe ich hier in den Tiefen des Forums die folgende Befehlskette aufgeschnappt:
> @echo off
> Set "extensionsdir=C:\Users\Benutzername\Desktop\vscode\extensions"
>
> ( if exist %extensionsdir% dir /b /a:d %extensionsdir%>nul 2>nul) || @echo %extensionsdir% ist leer
> ( if exist %extensionsdir% dir /b /a:d %extensionsdir%>nul 2>nul) && @echo %extensionsdir% ist nicht leer
>
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:
Natürlich ist das der Befehl.- 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?
Siehe oben.Lass das mit dem Batch besser bleiben und greife zeitgemäß gleich zu Powershell
$Extensiondir = 'C:\Users\Benutzername\Desktop\vscode\extensions'
if ( Get-ChildItem $Extensiondir -ErrorAction SilentlyContinue ) { write-host "Ordner ""$Extensiondir"" ist nicht leer. " }
else { write-host "Ordner ""$Extensiondir"" ist leer. " }
Gruß Thomas
Hallo Enrixk,
Deine Codebeispiel kann ich nicht wirklich nachvollziehen.
Ich kann Dir aber eine Alternative vorschlagen.
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
Deine Codebeispiel kann ich nicht wirklich nachvollziehen.
Ich kann Dir aber eine Alternative vorschlagen.
@echo off
set extensionsdir=C:\Users\Benutzername\Desktop\vscode\extensions
set inhalt=
for /f %%i in ('dir %extensionsdir%\*.* /b') do set inhalt=%%i
if "%inhalt%"=="" goto ende
echo Hallo Welt
echo hier passieren tolle Sachen
goto ende
:ende
set extensionsdir=
set inhalt=
ich möchte mit einer CMD-Datei prüfen, ob ein Verzeichnis leer ist.
Der von mir verwendetet Befehldir %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
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
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