Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Verschachtelte Schleife in Batch (Config.txt auslesen)

Mitglied: Blubberhorst

Blubberhorst (Level 1) - Jetzt verbinden

15.06.2012, aktualisiert 16.06.2012, 3770 Aufrufe, 3 Kommentare

Hallo miteinander,

eigentlich konnte ich mich immer ganz gut davor bewahren in einem Forum nach Hilfe zu fragen, aber mittlerweile bin ich an einem Punkt angekommen, an dem ich schier am Verzweifeln bin.

Es geht um folgendes: Ich möchte aus einer Config.txt einen Ordner(namen) auslesen und in diesem dann den (Unter-)Ordner löschen, der am aktuellsten ist.

01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
 
04.
for /F "tokens=1,2 delims=	" %%a in ('type config.txt') do ( 
05.
	 
06.
	set count=0 
07.
	for /F %%g in ('dir /b %%a') do ( 
08.
		set /a count+=1 
09.
10.
	echo !count! 
11.
12.
 
13.
pause
Die äußere FOR-Schleife zieht die erste Spalte aus der Config, wie man an der Struktur sehen kann. In dieser stehen die Ordnernamen. Als nächstes will ich die Anzahl der vorhandenen Ordner in jedem dieser Ordner zählen. Dazu die innere Schleife. So, die Ausgabe über echo zeigt mir nun die richte, gewünschte Zahl an.
Doch wenn ich statt des echos ein
01.
rd "!count!. Ordner %date%" ::Namensschema der inneren Ordner
angebe, dann ist count leer bzw. es wird halt keine Datei mit Namen !count!... gefunden.

Wie kann ich den Ordnernamen, nach dem gelöscht werden soll so zusammenbauen, dass count tatsächlich die gefundene Zahl zeigt?

Oder alternativ, wie kann ich die Anzahl der Ordner ohne Schleife ermitteln? Sonstige Anregungen, Vorschläge? Oder eine andere Idee wäre ja, das Datum nicht aus dem Namen zu ermitteln, sondern aus den Attributen, falls das geht? Dann erspar ich mir das durchzählen vllt?

Vielen Dank schonmal,
MfG B.
Mitglied: bastla
15.06.2012, aktualisiert 16.06.2012
Hallo Blubberhorst und willkommen im Forum!

Falls es immer nur darum gehen sollte, den jüngsten Ordner zu löschen, dann ohne Zählerei etwa so:
01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
 
04.
for /F "delims=	" %%a in ('type config.txt') do ( 
05.
    for /F %%g in ('dir /b/ad/od "%%~a"') do set "Letzte=%%g" 
06.
    rd "%%~a\!Letzte!" 
07.
)
Dein Ansatz kann (wegen %date%) nur für Ordner mit dem heutigen Datum im Namen funktionieren - und das auch nur, wenn Du vorweg den Ordner "%%a" mit angibst, also
rd "%%~a\!count!. Ordner %date%"
Falls übrigens tatsächlich nur Ordner mit dem Tagesdatum infrage kommen, wäre in meinem Ansatz oben
    for /F %%g in ('dir /b/ad/od "%%~a\*%date%"') do set "Letzte=%%g"
zu verwenden ...

Was steht denn übrigens genau in der "config.txt"? Aufgrund der "for"-Schleife sähe das nach
Ordnername<TAB>noch was
aus (wobei nicht klar ist, ob der Ordnername ev unter Anführungszeichen steht, weswegen ich vorsichtshalber "%%~a" verwendet habe) ...
Noch zu
wie kann ich die Anzahl der Ordner ohne Schleife ermitteln?
Ganz ohne geht's zwar nicht, aber Du könntest es so machen:
for /f %%g in ('dir /ad "%%~a"') do set "Anzahl=%%g"
Grüße
bastla
Bitte warten ..
Mitglied: Blubberhorst
16.06.2012, aktualisiert um 11:58 Uhr
Hi bastla!

Danke für deine Antwort. Also das Datum steht immer auch im Ordnernamen, und daran soll es auch ausgemacht werden. Denn das ganze dient dazu, ein zuvor angestoßenes Ordner-Erstellen wieder rückgängig zu machen, also die erstellen Strukturen wieder zu löschen. Nicht, dass durch zweimaliges Ausführen noch ein Ordner von letzter Woche gelöscht wird, weil es auf einmal der jüngste ist! Sondern nur der mit dem heutigen Datum. Das habe ich falsch ausgedrückt.

Ui, stimmt, den Pfad zum Unterordner habe ich ganz vergessen! Wenn das jetzt daran gescheitert wäre... :D

Ja die Ordner sind ohne " und mit Tabs.

01.
@echo on 
02.
 
03.
setlocal enabledelayedexpansion  
04.
 
05.
for /F "delims=	" %%a in ('type config.txt') do (  
06.
	for /F "tokens=1-3" %%g in ('dir /b/ad/od "%%~a\*%date%"') do set "Letzte=%%g %%h %%i" 
07.
	rd /q "%%~a\!Letzte!"  
08.
09.
 
10.
pause
Auf jeden Fall war dein Code die Lösung! Musste nur noch %%g um %%h und %%i erweitern, damit er den gesamten Namen mitnimmt und nicht nur "5.", was ja wichtig beim nächsten Schritt ist, dem Löschen.

Also, was hab ich gelernt: Nicht umständlich irgendwas künstlich zusammenbauen, sondern das was eh schon vorhanden ist, einfach aus der For-Schleife mit rausziehen durch entsprechende Operatoren wie * z.B. :D Ich wusste das kann nicht so schwer sein *seufz*

Danke nochmal! =)
Bitte warten ..
Mitglied: bastla
16.06.2012 um 13:22 Uhr
Hallo Blubberhorst!
Musste nur noch %%g um %%h und %%i erweitern
Die noch bessere Lösung (hätte ich gleich berücksichtigen sollen) wäre
for /F "delims=" %%g in ('dir /b/ad/od "%%~a\*%date%"') do set "Letzte=%%g"
- damit wird, unabhängig davon, wie viele Leerzeichen enthalten sind, der Ordnername immer "am Stück" geliefert ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Verschachtelte For Schleife für Batch Neuling
Frage von yperiuBatch & Shell3 Kommentare

Hallo liebe Profis, ich habe eine sehr umfangreiche Benchmark-Schleife zum Laufen zu bringen, die ich ohne For 72 mal ...

Batch & Shell
Verschachtelte FOR-Schleife mit einem Argument
gelöst Frage von mp-homeBatch & Shell3 Kommentare

Hallo Forum, ich versuche mehrere FOR-Schleifen in eine verschachtelte FOR-Schleife zu ändern. Leider scheine ich zu doof für dieses ...

Batch & Shell
In einer verschachtelten For-Schleife Ping info auslesen
gelöst Frage von Tommy-TyrolBatch & Shell4 Kommentare

Hallo allerseits, quäle mich seit einiger Zeit mit folgendem Problem. In einer Textdatei (ipfil.txt) stehen IP-Adressen von rechnern welche ...

Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 3 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 3 TagenSicherheit12 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall10 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS9 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...

Windows Netzwerk
Zugriff auf den Desktop Ordner eines anderen Rechners in der gleichen Domäne
gelöst Frage von JensNomaWindows Netzwerk6 Kommentare

Guten Abend, ich war neulich mit unserem Admin am Tisch gesessen. Er an seinem Notebook angemeldet mit dem Domänen-Admin, ...