Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch zum Löschen mit For - Schleife, in Verzeichnissen mit Zähler im Namen

Frage Entwicklung Batch & Shell

Mitglied: schauan

schauan (Level 1) - Jetzt verbinden

28.11.2008, aktualisiert 14:12 Uhr, 5967 Aufrufe, 6 Kommentare

Hallo,

ich habe im Prinzip folgende Ordnerstruktur:
X:\Test\Verz01\uVerz01\...
X:\Test\Verz01\uVerz02\...
X:\Test\Verz01\uVerzxy\...
X:\Test\Verz02\uVerz01\...
X:\Test\Verz02\uVerz02\...
X:\Test\Verz02\uVerzxy\...
X:\Test\Verz04\uVerz01\...
X:\Test\Verz04\uVerz02\...
X:\Test\Verz04\uVerzxy\...
...
also Verzeichnisse mit einem Zähler im Namen. Die Zähler der zweiten Ebene (Verznn) sind allerdings nicht durchgängig. Ich möchte hier nur in der dritten Ebene (uVerznn) und nur in allen uVerz01 und uVerz02 Dateien *.txt, *.rtf, *.vbs und *.doc löschen.

Im Moment habe ich für jedes Verzeichnis und jeden Datentyp eine Zeile in meiner batch. Ab und an entfallen Erweiterungen oder es kommen neue hinzu, und das ist eine recht müßige Änderungsarbeit.

Bekommt man das mit einer batch in einer Schleife hin und wenn ja, wie?





[Edit Biber] Verschoben aus "Windows" nach "Batch & Shell". [/Edit]
Mitglied: bastla
28.11.2008 um 08:29 Uhr
Hallo schauan!

Das könnte (ungetestet) so gehen:
01.
@echo off & setlocal 
02.
set "Basis=X:\Test" 
03.
set "Typen=txt rtf vbs doc" 
04.
 
05.
for /d %%i in ("%Basis%\*.*") do ( 
06.
    for %%t in (%Typen%) do ( 
07.
	    echo del "uVerz01\*.%%t" 
08.
	    echo del "uVerz02\*.%%t" 
09.
10.
)
Soferne es im "Basis"-Ordner ("X:\Test") noch andere als die nummerierten Unterordner gibt, müsste die Zeile 5 etwa so aussehen:
for /d %%i in ("%Basis%\Kennzeichen*.*") do (
wobei "Kennzeichen" dazu dient, die zu bearbeitenden Ordner festzulegen (lt Deinem Beispiel wäre das Kennzeichen "Verz").

Vor den beiden Löschbefehlen steht derzeit noch jeweils ein "echo", damit diese Befehle zum Testen nur angezeigt werden - wenn's passt, einfach dieses "echo" entfernen und dann wird tatsächlich gelöscht.

Grüße
bastla
Bitte warten ..
Mitglied: schauan
28.11.2008 um 11:01 Uhr
Hallo bastla,

danke für Deinen Vorschlag, war die richtige Richtung.
Ich habe den code etwas angepasst, und mit dir getestet.
So läuft er nun - erst mal ohne den Hinweis mit den anderen Unterordnern:

01.
@echo off & setlocal 
02.
set Basis="X:\Test" 
03.
set Typen="txt rtf vbs doc pdf" 
04.
 
05.
for /d %%i in ("%Basis%\*.*") do (  
06.
    for %%t in ("%Typen%") do (  
07.
            dir %%i\uVerz01\*.%%t  
08.
            dir %%i\uVerz02\*.%%t 
09.
	)  
10.
)
Bitte warten ..
Mitglied: schauan
28.11.2008 um 12:00 Uhr
Hallo bastla,

ich habe doch noch eine Frage. Die Befehlsausgabe bringt bei der ersten und letzen Erweiterung Anführungszeichen mit. Kann man das verhindern? Das funktioniert in diesem Falle zwar, sieht aber seltsam aus.

z.B.
dir /b X:\Test\Verz01\uVerz01\*.""txt
und
dir /b X:\Test\Verz01\uVerz01\*.pdf""

Vielleicht nutze ich so eine Schleife mal anderswo und die Anführungszeichen stören dann.

/b habe ich eingefügt, um die Ausgabe einzuschränken. Da kommt später noch 2>> nul ans Ende, damit ich nur das Ergebnis sehe.
Bitte warten ..
Mitglied: bastla
28.11.2008 um 12:40 Uhr
Hallo schauan!

Sorry wegen des vergessenen %%i in meinem ersten Ansatz (hatte leider etwas wenig Zeit), aber Du hast es ja erfreulicher Weise gleich richtig gestellt.
Die Anführungszeichen lassen sich sehr einfach vermeiden, indem Du die von mit vorgeschlagene Schreibweise verwendest:
set "Typen=txt rtf vbs doc"
und
for %%t in (%Typen%) do (
Sollte es wirklich nötig sein, Werte unter Anführungszeichen zu setzen, dann kämen diese ja paarweise vor (wie "Wert2 und 3" im folgenden Beispiel)
set "Werte=Wert1 "Wert2 und 3" Wert5 Wert8"
und ließen sich durch die Schreibweise
%%~t
entfernen.

Grüße
bastla
Bitte warten ..
Mitglied: schauan
28.11.2008 um 13:52 Uhr
Hallo Bastla,

danke, ich habe es mit den Anführungszeichen wie in Deinem ersten Posting gemacht. Da merkt man, wo es mir an Wissen fehlt. Ich habe mit meinen bescheidenen Kenntnissen experimentiert, und zuerst lief es nicht. Irgendwo hatte ich was von Set im Hinterkopf, und da war natürlich keine Variable Basis und Tyxpen im System. Da wurden die Anführungszeichen im nächsten Schritt versetzt ... Und irgendwann liefs irgendwie mit %%i

Ich nehme mal an, mit dieser Schreibweise sitzen die Variablen Basis und Typen nur zur Laufzeit und nur für dieses Script?
Bitte warten ..
Mitglied: Biber
28.11.2008 um 14:12 Uhr
Moin schauan,

Ich nehme mal an, mit dieser Schreibweise sitzen die Variablen Basis und Typen nur zur Laufzeit und nur für dieses Script?

Nur zur Laufzeit oder besser ausgedrückt: nur in dieser CMD-Session und allen CMD-Sessions, die aus dieser heraus gestartet werden
--> das gilt ohnehin immer.

...nur für dieses Skript --> das muss und sollte explizit angegeben werden.
Hat bastla mit dem Befehl "SetLocal" in der ersten Zeile auch getan.

Siehe "help setlocal" am CMD-Prompt (nur die ersten 4 Zeilen).

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...