56921
Goto Top

FOR über alle Verzeichnisse AUSSER...

Hallo,

ich komme bei folgendem Problem nicht weiter und bin für ein paar Anregungen dankbar. face-wink

Ich will alle Unterverzeichnisse, die sich in einem Verzeichnis befinden, zippen, ausser die Verzeichnisse, die mit einem Underline (_) anfangen.

Bis hierhin bin ich schon mal gekommen:
FOR /D %%i IN (c:\temp\*) DO SET DIR_LIST=!DIR_LIST!,"%%i"
ENDLOCAL & SET DIR_LIST=%DIR_LIST%

Die _-Verzeichnisse wollte ich mit FINDSTR /R /C:"^[^_]" ausschließen, aber das matcht aus irgendeinem Grund nicht?!

Hat noch jemand ne andere Idee?

Danke & Gruß,
Carsten

Content-Key: 72729

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

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: bastla
bastla 05.11.2007 um 12:21:30 Uhr
Goto Top
Hallo carsten-h und willkommen im Forum!

Versuch es vielleicht eher so:
for /f "delims=" %%i in ('dir /b /ad c:\temp\*^|findstr /v /b "_"') do SET DIR_LIST=!DIR_LIST!,"c:\temp\%%i"  

Grüße
bastla

[Edit] Fehlendes "^" vor "|findstr ..." nachgetragen. [/Edit]
Mitglied: Biber
Biber 05.11.2007 um 14:23:00 Uhr
Goto Top
Moin carsten-h,

und die Strategie, die Du meintest, würde sich in etwa so lesen:
[Proof-of-concept am CMD-Prompt]
>for /d %i in (*) do @for /f "delims=" %i in ('echo %i^|findstr "^_"') do @echo set DIR_LIST=!DIR_LIST!;"c:\temp\%~i"  
set DIR_LIST=!DIR_LIST!;"c:\temp\_even older dir"  
set DIR_LIST=!DIR_LIST!;"c:\temp\_oldDir"  

Bzw mit und ohne DelayedExpansion im Batch:
::---- Mit DelayedExpansion
@echo off & setlocal EnableDelayedExpansion
Set DIR_LIST=
:: [....ergänzen: Wechseln ins "richtige" Verzeichnis, z.B. "c:\temp"]  
for /d %%i in (*) do for /f "delims=" %%i in ('echo %%i^|findstr /v "^_"') do set DIR_LIST=!DIR_LIST!;"c:\temp\%%~i"  

::---- Ohne DelayedExpansion
@echo off & setlocal
Set DIR_LIST=
:: [....ergänzen: Wechseln ins "richtige" Verzeichnis, z.B. "c:\temp"] 
for /d %%i in (*) do for /f "delims=" %%i in ('echo %%i^|findstr /v "^_"') do call setDIR_LIST "%~i"  
echo %DIR_LIST%
goto :eof

:setDIR_LIST
Set DIRLIST=%DIR_LIST%;"c:\temp\%~1"  
goto :eof
[ungetestete Skizzen]

Gruß
Biber
Mitglied: 56921
56921 05.11.2007 um 14:46:42 Uhr
Goto Top
Hallo,

danke für den Vorschlag. Prinzip hab ich verstanden, aber es funktioniert leider nur der innere Teil (dir /b usw.) der Zeile. Wenn ich nur den ausführe, werden mir auch nur die gewünschten Verzeichnisse angezeigt.

Führe ich den kompletten Befehl in der Kommandozeile aus, bekomme ich ein "| was unexpected at this time." zurück. Das Skript bricht ohne Fehlerausgabe einfach ab. Hab ich die falschen Quotes (') genommen oder ist es ein Problem, dass ich sozusagen ja 2 Befehle ausführen lasse?

Gruß,
Carsten
Mitglied: bastla
bastla 05.11.2007 um 14:56:26 Uhr
Goto Top
Hallo carsten-h!

War leider mein Fehler - vor dem "|" fehlte das "^" (ist inzwischen oben korrigiert).

Grüße
bastla
Mitglied: 56921
56921 05.11.2007 um 15:26:08 Uhr
Goto Top
Danke!!! Ich bin begeistert!

Gruß,
Carsten