cbli
Goto Top

Prüfen per Batch ob ein Verzeichnis leer ist

Problem:

ich möchte ein bestimmtes existierendes Verzeichnis auf dessen Status abfragen

d.h ob es leer ist oder Dateien enthält.
Unterordner sind keine vorhanden und werden auch nie angelegt.

entsprechend soll dann eine Meldung ausgegeben werden oder/und zu einer anderen Batch gesprungen werden die es z,b dann löscht.
zu berücksichtigen wären lange Dateinamen und Leerzeichen im Verzeichnispfad.
Habe hier im Board schon eine Suche gemacht und auch einen Thread gefunden ,der aber schon geschlossen ist.
Ich habe aus diesem Thread die Lösung übernommen,die entsprechenden Pfade ersetzt bekomme aber immer die gleiche Meldung egal ob das Verzeichnis leer ist oder nicht.
Außerdem möchte ich nichts löschen und neu erstellen ,sondern nur eine Art Statusabfrage machen lassen.

Kopie aus besagtem Thread Kopiervorgang nur wenn Verzeichnis leer
:: ----- snipp isDirLeer.bat
@echo off & setlocal
Set "testdir=d:\temp\MyDir"
if exist %testdir% rd %testdir% /s /q
md %testdir%
echo Leeres Verzeichnis wurde %testdir% angelegt..
call :ChkIfEmpty LeeresDir

:: jetzt mal irgendeine Datei dort reinstellen
echo blah>%testdir%\blubb.txt
call :ChkIfEmpty NichtLeeresDir
if exist %testdir% rd %testdir% /s /q
goto :eof

:ChkIfempty
Echo Teste ..%1
if exist %testdir% dir /b /A:-d %testdir%>nul 2>nul && @echo %testdir% ist nicht leer
goto :eof
:: ----- snapp isDirleer.bat

Danke für die Hilfe

Gruß
Claus

Content-ID: 44672

Url: https://administrator.de/forum/pruefen-per-batch-ob-ein-verzeichnis-leer-ist-44672.html

Ausgedruckt am: 30.12.2024 um 17:12 Uhr

bastla
bastla 16.11.2006 um 19:36:51 Uhr
Goto Top
Hallo Claus!

Du brauchst nur die folgenden Zeilen:
Set "testdir=d:\temp\MyDir"  
if exist "%testdir%" dir /b /A:-d "%testdir%">nul 2>nul || @echo %testdir% ist leer  
if exist "%testdir%" dir /b /A:-d "%testdir%">nul 2>nul && @echo %testdir% ist nicht leer  
Die "@echo"-Anweisungen ersetzt Du einfach durch etwas Genehmes.

HTH
bastla
cbli
cbli 17.11.2006 um 14:40:07 Uhr
Goto Top
Hallo Claus!

Du brauchst nur die folgenden Zeilen:
Set
> "testdir=d:\temp\MyDir"  
> if exist "%testdir%" dir /b /A:-d  
> "%testdir%">nul 2>nul ||  
> @echo %testdir% ist leer
> if exist "%testdir%" dir /b /A:-d  
> "%testdir%">nul 2>nul  
> && @echo %testdir% ist nicht leer
> 
Die "@echo"-Anweisungen ersetzt Du
einfach durch etwas Genehmes.

HTH
bastla

Hat funktioniert, Danke ! Lag wieder mal an den fehlenden Anführungszeichen die ich nicht gesetzt hatte.
Ich hätte noch ne kleine Frage:


@echo off & setlocal
set Inhalt="%Temp%\Inhalt.txt"
for %%i in ("C:\Temp\*.zip") do C:\Utils\7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr ".xls .doc .jpg .bmp .gif" %Inhalt% >nul && move /y "%%i" d:\dateien\verarbeitet

hat ja wunderbar funktioniert,doch nun möchte ich diese for schleife ein 2tes mal in der batch einsetzten.
Habe wieder alle Pfade korrigiert ,aber er bricht ohne Fehlermeldung ab.
Ich habe auch schon die Variablen veränder und den Inhalt.txt,hat auch nix geholfen.
Auch den endlocal Befehl habe ich gesetzt und nun bin ich ratlos.
Nochmals eine kleine Hilfestellung wäre nett.

Danke
Claus
Biber
Biber 17.11.2006 um 15:28:57 Uhr
Goto Top
Moin cbli,

nun möchte ich diese for schleife ein 2tes mal in der batch einsetzten...

In diesen Fällen eines mehrfach benötigten Teil-Schnipsels verwendet man/frau in der Regel Unter-Prozeduren, Sub's oder im Batch eben Call:Subblock's.

Dazu wäre hilfreich zu wissen, welche Parameter sich denn unterscheiden.

beim ersten Aufruf:
- Lese-Verzeichnis [und Dateimaske]: C:\temp\*.zip
- gesuchte Datei-Endungen: ".xls .doc .jpg .bmp .gif"
- Zielverzeichnis : d:\dateien\verarbeitet\


Beim zweiten Aufruf:
- Lese-Verzeichnis [und Dateimaske]: C:\temp\*.zip ---------->oder was anderes?
- gesuchte Datei-Endungen: ".xls .doc .jpg .bmp .gif" ---------->oder was anderes?
- Zielverzeichnis : d:\dateien\verarbeitet\ ---------->oder was anderes?

Gruß
Biber
cbli
cbli 17.11.2006 um 18:04:47 Uhr
Goto Top
Moin cbli,

nun möchte ich diese for schleife ein 2tes mal in der batch einsetzten...

In diesen Fällen eines mehrfach benötigten Teil-Schnipsels verwendet
man/frau in der Regel Unter-Prozeduren, Sub's oder im Batch eben Call:Subblock's.

Dazu wäre hilfreich zu wissen, welche Parameter sich denn unterscheiden.

beim ersten Aufruf:
- Lese-Verzeichnis [und Dateimaske]: C:\temp\*.zip
- gesuchte Datei-Endungen: ".xls .doc .jpg .bmp .gif"
- Zielverzeichnis : d:\dateien\verarbeitet\


Beim zweiten Aufruf:
- Lese-Verzeichnis [und Dateimaske]:
C:\temp\*.zip ---------->oder was anderes?

ja hier wird ein anderes Verzeichnis benutzt (eine Verzeichnisebene tiefer) c:\temp\tiefer\
sonst ist alles gleich

- gesuchte Datei-Endungen: ".xls .doc .jpg .bmp .gif" ---------->oder was anderes?
- Zielverzeichnis : d:\dateien\verarbeitet\
>oder was anderes?

auch hier wird ein anderes Verzeichnis benutzt (selbes laufwerk) d:\dateien\sortiert\

es sollen aber auch irgendwann mal die gesuchten Dateiendungen geändert werden,allerdings jetzt nicht für dieses Projekt.
Ist es generell möglich auf eine bestimmte Kombination von 2 oder mehreren Dateiendungen in Zips abzufragen ?

z.b wenn *.xls und *.doc in einer Zip Datei sind = verschieben
nur eine enthalten der beiden = nicht verarbeiten

Danke
Gruß
Claus
Biber
Biber 17.11.2006 um 18:42:59 Uhr
Goto Top
Okay, cbli,

ich versuche mal eine Skizze...

::-----snipp SortierMeineZips.bat
@echo off & setlocal
set Inhalt="%Temp%\Inhalt.txt"  
REM Erster Aufruf: ZIPDir=c:\Temp ZielDir=d:\dateien\verarbeitet
Call :MachMirDieZips c:\Temp d:\dateien\verarbeitet

REM Zweiter Aufruf: ZIPDir=c:\Temp\tiefer ZielDir=d:\dateien\sortiert
Call :MachMirDieZips c:\Temp\tiefer d:\dateien\sortiert
REM .... weitere Anweisungen...
goto :eof
~~~~~~~~
Raum für Notizen

~~~~~~~~
:MachMirDieZips Parameter 1: ZipDir Parameter2: ZielDir
for %%i in ("%~1\*.zip") do C:\Utils\7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr ".xls .doc .jpg .bmp .gif" %Inhalt% >nul && move /y "%%i" "%~2"  

Zur Frage zwei (wenn *.doc UND *.xls enthalten)...

Dann musst Du statt der einen ODER-Bedingung...
findstr ".xls .doc .jpg .bmp .gif" %Inhalt%  
...mehrere Findstr/Find-Bedingungen hintereinander stellen und mit UND, auf bätchisch "&&" verknüpfen.

findstr ".xls" %Inhalt%>nul  && findstr ".doc" %Inhalt%>nul && findstr ".bla" %Inhalt%>nul move ......  
=Wenn ".xls" gefunden UND ".doc" gefunden UND ".bla" gefunden DANN move ...

HTH Biber

[Ungetestete Skizze/ unausgelebte Phantasien... handle with care]

P.S. @cbli
Wollen wir Diesen Thread hier schließen?
Ich kann dafür Deinen geschlossenen Beitrag "Dateien abhängig vom Inhalt verschieben" wieder öffnen, wenn Du da noch weiterbasteln willst...
cbli
cbli 17.11.2006 um 19:18:49 Uhr
Goto Top
Okay, cbli,

ich versuche mal eine Skizze...

::-----snipp
> SortierMeineZips.bat
> @echo off & setlocal
> set Inhalt="%Temp%\Inhalt.txt"  
> REM Erster Aufruf: ZIPDir=c:\Temp
> ZielDir=d:\dateien\verarbeitet
> Call :MachMirDieZips c:\Temp
> d:\dateien\verarbeitet
> 
> REM Zweiter Aufruf: ZIPDir=c:\Temp\tiefer
> ZielDir=d:\dateien\sortiert
> Call :MachMirDieZips c:\Temp\tiefer
> d:\dateien\sortiert
> REM .... weitere Anweisungen...
> goto :eof
> ~~~~~~~~
> Raum für Notizen
> 
> ~~~~~~~~
> :MachMirDieZips Parameter 1: ZipDir
> Parameter2: ZielDir
> for %%i in ("%~1\*.zip") do  
> C:\Utils\7za l -slt "%%i" | findstr  
> /c:"Path = " > %Inhalt% &  
> findstr ".xls .doc .jpg .bmp .gif"  
> %Inhalt% >nul && move /y
> "%%i" "%~2"  
> 

Zur Frage zwei (wenn *.doc UND *.xls
enthalten)...

Dann musst Du statt der einen
ODER-Bedingung...
findstr ".xls .doc .jpg  
> .bmp .gif" %Inhalt%  
> 
...mehrere Findstr/Find-Bedingungen
hintereinander stellen und mit
UND, auf bätchisch
"&&" verknüpfen.

findstr ".xls"  
> %Inhalt%>nul  && findstr
> ".doc" %Inhalt%>nul &&  
> findstr ".bla" %Inhalt%>nul move  
> ......
> 
=Wenn ".xls" gefunden UND
".doc" gefunden UND
".bla" gefunden DANN move ...

HTH Biber

[Ungetestete Skizze/ unausgelebte
Phantasien... handle with
care
]

P.S. @cbli
Wollen wir Diesen Thread hier
schließen?
Ich kann dafür Deinen geschlossenen
Beitrag "Dateien abhängig vom
Inhalt verschieben" wieder öffnen,
wenn Du da noch weiterbasteln willst...

Ja,können wir so machen,ich denke es werden bestimmt noch andere Fragen auftauchen im Zusammenhang mit dem Ursprungsthread den du
netterweise wieder öffnen willst.
Danke dafür.
Wünsche noch ein schönes Wochenende und vielleicht kann ich ja irgendwie was von der Hilfe die ich hier erhalten habe, in irgendeiner
Form zurückgeben.

Gruß
Claus