Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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)

Frage Entwicklung Batch & Shell

Mitglied: Blubberhorst

Blubberhorst (Level 1) - Jetzt verbinden

15.06.2012, aktualisiert 16.06.2012, 3760 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 (3)

Frage von yperiu zum Thema Batch & Shell ...

Batch & Shell
gelöst Verschachtelte FOR-Schleife mit einem Argument (3)

Frage von mp-home zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch zum auslesen bestimmter Einträge der IPconfig mit for-Schleifen (12)

Frage von Dantaros zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateinamen auslesen und in einer Schleife benutzen (12)

Frage von TeholBeddict zum Thema Batch & Shell ...

Neue Wissensbeiträge
Humor (lol)

Taschenrechner in IOS kaputt!

(7)

Information von Lochkartenstanzer zum Thema Humor (lol) ...

Sicherheit

Kanadischer Geheimdienst veröffentlicht erstmals Sicherheitssoftware

(3)

Information von BassFishFox zum Thema Sicherheit ...

Virtualisierung

Docker Monitoring und Steuerung per "sen"

Tipp von Frank zum Thema Virtualisierung ...

Heiß diskutierte Inhalte