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

gelöst Verschachtelte Schleife in Batch (Config.txt auslesen)

Mitglied: Blubberhorst

Blubberhorst (Level 1) - Jetzt verbinden

15.06.2012, aktualisiert 16.06.2012, 3784 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
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 2 TagenHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 2 TagenRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 3 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 3 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Netzwerkgrundlagen
VLAN - Offene Fragen
Frage von KnettenbrechNetzwerkgrundlagen17 Kommentare

Hallo zusammen, ich befasse mich derzeit mit dem Thema VLAN. Hierzu habe ich schon einige Guides gelesen, einschließlich des ...

Netzwerkmanagement
Netzwerkmanagment im Haus mit Switch, Panel und pfsense
gelöst Frage von CorraggiounoNetzwerkmanagement17 Kommentare

hi zusammen, wir sind gerade dabei das ganze Haus bzw. die einzelnen Zimmer mit netzwerkdosen zu versorgen. Vom Keller ...

Google Android
Empfehlung: Android Ortungsapp
gelöst Frage von certifiedit.netGoogle Android13 Kommentare

Guten Morgen, grundsätzlich vorweg, ich wollte mich eben schlau machen, bzgl einer Ortungsapp, welche Androidbasiert einem anderen Androidsmartphone mitteilt, ...

Router & Routing
VPN hinter zweiter Fritzbox nutzen im Nachbarhaus
gelöst Frage von georg2204Router & Routing11 Kommentare

Hallo zusammen, ich blicke hier leider nicht mehr so ganz durch. In Haus 1 steht eine Fritzbox 7390, diese ...