Batch rmdir wildcards

CarlJohnson

Cadet 2nd Year
Registriert
Juni 2010
Beiträge
22
Hallo Zusammen

Ich muss mehrere Unterordner innerhalb von Profilen löschen. Bis jetzt sieht mein Script so aus.

Code:
type allprofiles.txt | lmod /l* rmdir \\DOMÄNE\users\profiles$\[$1]\ts\desktop /q /s  >> deletedesktop.txt

Kurze Erklärung: Im allprofiles.txt sind alle Profile augelistet. Lmod ersetzt das [$1] mit dem Profil Namen und gibt es nachher aus in deletedesktop.txt welches ich nachher als batch ausführe.

Nun ist es aber so das es von den zu löschenden Ornder noch Variationen gibt wie "desktopold" usw. Leider unerstützt rmdir keine Wildcards wie deltree früher. kennt ihr eine Alternative?
 
Ja is Windows Server 2003

Mit FOR hab ichs auch probiert das sieht dann irgendwie so aus
Code:
For /D %i in (\*.*ts*.*\*.*desktop*.*) do type allprofiles.txt |  lmod /l* rmdir "\\DOMÄNE\users\profiles$\[]\ %i " /q /s  >> testdeletebat.txt

Leider funktioniert das nicht, es erstellt kein testdeletebat.txt und gibt auch keine Meldung aus und ich weiss nciht wo der Fehler ist. Vielleicht wäre es am einfachsten das ganze über VBS zu machen
 
wieso machst du es denn umständlich über die text-datei? dem namen und der beschreibung nach zu urteilen, befinden sich eh alle profile darin (falls einige ungewünscht sind, einfach mit if abfragen und überspringen). genauso ist der pfad statisch. wieso dann nicht etwas wie
Code:
for /F "delims=;" %%x in ('dir /B \\DOMÄNE\users\profiles') do (
  set userpath=\\DOMÄNE\users\profiles\%%x\
rem ...
  rmdir /S /Q %userpath%\testxyz
)
?
falls kannst du auch immernoch auf die variante ausweichen:
Code:
for /F "delims=;" %%x in (allprofiles.txt) do (
  set userpath = \\DOMÄNE\users\profiles\%%x\
rem  ...
  rmdir /S /Q %userpath%\testxyz
)
mit pipes u.ä. wär ich in windows/batch-dateien so oder so vorsichtig, denn wirklich gut und sinnvoll implementiert ist der mist nämlich (leider gottes) nicht.
 
@claW.

Find ich gut deinen Ansatz, werde ich so übernehmen.

Ich habe eine paar Testordner mit Unterordner erstellt, sieht so aus
Directory of K:\Jack_Tools\delete_PMO_profiles\Testdelete\profile 1\st

25.06.2010 11:56 <DIR> .
25.06.2010 11:56 <DIR> ..
25.06.2010 09:51 <DIR> desktop
25.06.2010 09:51 <DIR> desktopold
25.06.2010 11:56 <DIR> dontdelete
25.06.2010 09:51 <DIR> olddesktop
0 File(s) 0 bytes
6 Dir(s) 31'878'868'992 bytes free

profile 1 steht für das userprofil, es gibt auch profile2 und oldprofile 1

Nun sollte das script alle Ordner mit desktop im Namen löschen.

Ich habe es ein bisschen abgeändert
Code:
for /F "delims=;" %%x in ('dir /B K:\Jack_Tools\delete_PMO_profiles\Testdelete') do (
  set userpath=K:\Jack_Tools\delete_PMO_profiles\Testdelete\%%x
rem ...
  For /D %%i in (*.*st*.*\*.*desktop*.*) do rmdir %userpath%\%%i /S /Q
)

Wenn ich es ausführe macht es aber folgendes
Code:
C:\>(
set userpath=K:\Jack_Tools\delete_PMO_profiles\Testdelete\profile 1
 rem ...
 For / %i in (*.*st*.*\*.*desktop*.*) do rmdir "K:\Jack_Tools\delete_PMO_profiles\Testdelete\profile
2"\%i /S /Q
)

Es setzt das " zu früh
 
das rem ... kannst du rauslöschen, das is nur ein kommentar.

is wahrscheinlich wieder mal das typische verhalten. wenn machst du es halt rekursiv und lässt dir alle ordner mit *desktop* auflisten, welche du dann nacheinander löschst.
Code:
@echo off
dir /A:D /S P:\tmp\test\*desktop* > .contents
for /f "delims=;" %%x in (.contents) do (
rmdir /S /Q "%%x"
)
del .contents
wäre wohl der einfachste weg von allen.
 
Zurück
Oben