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

Löschbefehl funktioniert nur wenn manuell ausgeführt wird und nicht in .bat

Mitglied: Lightstar

Lightstar (Level 1) - Jetzt verbinden

11.03.2013, aktualisiert 15.03.2013, 1468 Aufrufe, 5 Kommentare, 1 Danke

Guten Tag,

ich habe ein kleines Problem mit einem Script.

Ich arbeite an einem Script, welches mir am 01. jedes Monats einen Ordner mit dem Namen "%Tagesdatum%_Serverbackup_Monatssicherung" erstellt. Die restlichen Tage des Monats soll ein Ordner mit "%Tagesdatum%_Serverbackup_Tagessicherung" erstellt werden. Am Anfang jedes Monats sollen alle Ordner bis auf die Monatssicherung "%Tagesdatum%_Serverbackup_Monatssicherung" gelöscht werden.

In dem Script verwende ich einen Befehl welcher mir alle Ordner mit dem Namen "*_Serverbackup_Tagessicherung" löschen soll. Dieser Befehl funktioniert aus irgendeinem Grund nur wenn ich ihn manuell in einer Komandozeile ausführe.

Die Zeile um die es geht lautet:
01.
IF %vormonat% == 12 (SET /a vorjahr=%yyyy%-1 && IF EXIST %sicherungspfad%\%vorjahr%\%vormonat% (FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%vorjahr%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%vorjahr%\%vormonat%\%i /s /q)) ELSE (IF EXIST %sicherungspfad%\%yyyy%\%vormonat% (FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%yyyy%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%yyyy%\%vormonat%\%i /s /q))
Hat jemand eine Idee warum das Problem besteht?


Ich hoffe ich habe die Frage/das Problem verständlich niedergeschrieben

Der gesamte Quellcode sieht folgendermaßen aus:

01.
:: --------------------------------------------------------------- 
02.
:: Variablen deklarieren 
03.
:: --------------------------------------------------------------- 
04.
SET dd=%DATE:~0,2% 
05.
SET mm=%DATE:~3,2% 
06.
SET yyyy=%DATE:~6,4% 
07.
SET yyyymmdd=%yyyy%_%mm%_%dd%_ 
08.
 
09.
SET sicherungspfad=D:\test_Sicherung 
10.
SET sicherungsname=Serverbackup_Tagessicherung 
11.
IF %dd% == 01 (SET sicherungsname=Serverbackup_Monatssicherung) ELSE (SET sicherungsname=Serverbackup_Tagessicherung && SET sicherungsname_=Serverbackup_Tagessicherung) 
12.
 
13.
SET log_pfad=D:\Admin\Script\Logs\%yyyy% 
14.
SET log_dateiname="test.log" 
15.
SET log=%log_pfad%\%log_dateiname% 
16.
 
17.
 
18.
 
19.
:: --------------------------------------------------------------- 
20.
:: Erstelle Sicherungspfad 
21.
:: --------------------------------------------------------------- 
22.
 
23.
IF NOT EXIST %sicherungspfad%\%yyyy%\%mm%\%yyyymmdd%%sicherungsname% MD %sicherungspfad%\%yyyy%\%mm%\%yyyymmdd%%sicherungsname% 
24.
 
25.
 
26.
:: --------------------------------------------------------------- 
27.
:: --------------------------------------------------------------- 
28.
:: Löschen der Vormonats Tagessicherungen 
29.
:: --------------------------------------------------------------- 
30.
:: --------------------------------------------------------------- 
31.
 
32.
:: 1.Ermittlung des Vormonats 
33.
SET /a vormonat=1%mm%-1 
34.
 
35.
SET vormonat=%vormonat:~-2% 
36.
 
37.
IF %vormonat% == 00 (SET vormonat=12) 
38.
 
39.
:: 2.Wenn Vormonat 12, muss das Jahr minus 1 gerechnet werden um Ordner Monat 12 aus Vorjahr zu löschen. 
40.
:: Wenn nicht lösche Vormonat aus aktuellem Jahr. 
41.
IF %vormonat% == 12 (SET /a vorjahr=%yyyy%-1 && IF EXIST %sicherungspfad%\%vorjahr%\%vormonat% (FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%vorjahr%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%vorjahr%\%vormonat%\%i /s /q)) ELSE (IF EXIST %sicherungspfad%\%yyyy%\%vormonat% (FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%yyyy%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%yyyy%\%vormonat%\%i /s /q))
Mitglied: bastla
11.03.2013, aktualisiert um 16:44 Uhr
Hallo Lightstar und willkommen im Forum!

Wenn Du innerhalb einer Zeile den Wert einer Variablen (zB %vorjahr%) veränderst, kannst Du diesen veränderten Wert nur dann in der gleichen Zeile verwenden, wenn Du "delayedexpansion" benutzt - allerdings könntest Du Dir das Leben leichter machen, wenn Du einfach %vorjahr% auf jeden Fall verwendest, also (ungetestet) etwa:
01.
SET /a vormonat=1%mm%-1 
02.
SET vormonat=%vormonat:~-2% 
03.
IF %vormonat%==00 SET /a vormonat=12 
04.
SET /a vorjahr=%yyyy% 
05.
IF %vormonat%==12 SET /a vorjahr-=1 
06.
IF EXIST %sicherungspfad%\%vorjahr%\%vormonat% FOR /f "tokens=*" %%i IN ('dir /ad/b %sicherungspfad%\%vorjahr%\%vormonat%\*%sicherungsname_%') DO RD /s /q %sicherungspfad%\%vorjahr%\%vormonat%\%%i
Grüße
bastla
Bitte warten ..
Mitglied: Lightstar
14.03.2013, aktualisiert 15.03.2013
Hallo bastla,

vielen Dank für die Hilfe!

Ich habe mein Script entsprechend angepasst.
Leider lässt sich das Script nach wie vor nur manuell (nach kopieren der einzelnen Befehle in die CMD) ausführen.

Ich habe die Batch mal über die CMD aufgerufen und in eine .txt umgeleitet.

Mein Script sieht mittlerweile folgendermaßen aus:

01.
:: --------------------------------------------------------------- 
02.
:: Variablen deklarieren 
03.
:: --------------------------------------------------------------- 
04.
SET dd=%DATE:~0,2% 
05.
SET mm=%DATE:~3,2% 
06.
SET yyyy=%DATE:~6,4% 
07.
SET yyyymmdd=%yyyy%_%mm%_%dd%_ 
08.
 
09.
SET sicherungspfad=D:\test_Sicherung 
10.
IF %dd% == 01 (SET sicherungsname=Serverbackup_Monatssicherung) ELSE (SET sicherungsname=Serverbackup_Tagessicherung) 
11.
 
12.
SET sicherungsname_=HW_Serverbackup_Tagessicherung 
13.
 
14.
SET log_pfad=D:\Admin\Script\Logs\%yyyy% 
15.
SET log_dateiname="test.log" 
16.
SET log=%log_pfad%\%log_dateiname% 
17.
 
18.
 
19.
 
20.
:: --------------------------------------------------------------- 
21.
:: Erstelle Sicherungspfad 
22.
:: --------------------------------------------------------------- 
23.
 
24.
IF NOT EXIST %sicherungspfad%\%yyyy%\%mm%\%yyyymmdd%%sicherungsname% MD %sicherungspfad%\%yyyy%\%mm%\%yyyymmdd%%sicherungsname% 
25.
 
26.
 
27.
:: --------------------------------------------------------------- 
28.
:: --------------------------------------------------------------- 
29.
:: Löschen der Vormonats Tagessicherungen 
30.
:: --------------------------------------------------------------- 
31.
:: --------------------------------------------------------------- 
32.
 
33.
:: 1.Ermittlung des Vormonats 
34.
SET /a vormonat=1%mm%-1 
35.
 
36.
SET vormonat=%vormonat:~-2% 
37.
 
38.
IF %vormonat% == 00 SET vormonat=12 
39.
 
40.
SET /a jahr_=%yyyy% 
41.
 
42.
IF %vormonat% == 12 SET /a jahr_=%yyyy%-1 
43.
 
44.
 
45.
IF EXIST %sicherungspfad%\%jahr_%\%vormonat% FOR /f "tokens=*" %i IN ('dir /ad /b %sicherungspfad%\%jahr_%\%vormonat%\*%sicherungsname_%') DO RMDIR %sicherungspfad%\%jahr_%\%vormonat%\%i)

Durch das umleiten in die .txt konnte ich feststellen, dass innerhalb der FOR-Schleife garkein Zugriff auf die Variablen möglich ist. Hier der Auszug:
01.
D:\test_Sicherung>IF EXIST D:\test_Sicherung\2012\12 FOR /f "tokens=*" sicherungspfadjahr_vormonatsicherungsname_sicherungspfadjahr_vormonati)
Hast du, oder jemand anderes eine Idee wie dieses Problem lösen kann?
Mich wundert es, dass genau die gleich Befehlszeile manuell erfolgreich abgesetzt werden kann...

Vielen Dank im voraus!
Bitte warten ..
Mitglied: bastla
14.03.2013 um 13:38 Uhr
Hallo Lightstar!

Du verwendest als Schleifenvariable %%i (also mit 2 Prozentzeichen)?

Grüße
bastla

P.S.: Formatiere bitte Codeschnipsel und Textausgaben mit <code> / </code> (lässt sich auch nachträglich hinzufügen) ...
Bitte warten ..
Mitglied: Lightstar
21.03.2013, aktualisiert um 23:00 Uhr
Hallo Bastla,

die Schleifenvariable habe ich bislang nicht genutzt.

Dies konnte das Problem aber tatsächlich lösen! Habe das Script jetzt ein paar Tage laufen und es läuft.

Leider verstehe ich nur noch nicht den genauen unterschied zwischen %i und %%i!?

1000 Dank schonmal für die super Hilfe!!!

Gruß
Lightstar
Bitte warten ..
Mitglied: bastla
21.03.2013 um 23:34 Uhr
Hallo Lightstar!
Leider verstehe ich nur noch nicht den genauen unterschied zwischen %i und %%i!?
Der genaue Unterschied ist: %

Ok, etwas ernsthafter: Im Gegensatz zur Direkteingabe in der CMD-Shell, wo nur ein Prozentzeichen zu verwenden ist, muss dieses in einem Batch für Schleifenvariablen verdoppelt werden ("gewöhnliche" Variablen werden auch im Batch %Variable% geschrieben, außer bei delayedExpansion - dann: !Variable!) ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Windows Server
Login .bat funktioniert nicht immer
gelöst Frage von xtra-longWindows Server5 Kommentare

Hallo. Ich habe ca 2x im Monat das Problem, dass die Netzlaufwerke nicht mehr funktioneren. Der Befehl beim start ...

Router & Routing

OpenVPN funktioniert nach reboot nicht ohne manuellen Eingriff

Frage von cgicloudRouter & Routing1 Kommentar

Hallo zusammen, Setup: Windows Server 2012 als FUNKTIONIERENDER OpenVPN Server. Problem: Sobald der Server neu gestartet wird kann man ...

Netzwerkprotokolle

Filezilla bat Upload funktioniert nicht CMD

gelöst Frage von iAmbrickstaNetzwerkprotokolle10 Kommentare

Hallo Community, glaube ich stehe echt mega auf dem Schlauch ! habe mir mal ne kleine Test FTP Umgebung ...

Netzwerke

Manuelle IP Adresse unter Windows 7 funktioniert nicht

gelöst Frage von MarkowitschNetzwerke5 Kommentare

Hallo liebe ITler, ich habe hier einen HP Pro Computer mit Windows 7 Pro. 64 Bit in einer kleinen ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 1 TagWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 1 TagSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 2 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 2 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
DSL, VDSL
Mindestgeschwindigkeiten DSL Telekom
Frage von justlukasDSL, VDSL13 Kommentare

Hallo zusammen, Seit diesem Jahr habe ich Verständnisprobleme mit dem Verhalten der Telekom. Wir haben seit einem Jahr VDSL ...

Switche und Hubs
LANCOM-Switch: Probleme (no link) mit SFP-Modulen?
Frage von THETOBSwitche und Hubs9 Kommentare

Hi zusammen, ich habe folgendes Problem: Und zwar habe ich an einem Standort drei Switche verbaut - LANCOM GS-2326P+, ...

Debian
Wie finde ich den betroffenen user
Frage von ProtectedDebian8 Kommentare

Hallo, Wie kann ich den User finden der dies verursacht hat? Betriebsystem ist Debian 7 your Server/Customer with the ...

Voice over IP
Vodafone IP Anlagenanschluss - TK-Anlage einrichten
Frage von BytedreherVoice over IP8 Kommentare

Moin Zusammen, wir hatten gestern bei uns die Umstellung auf den neuen IP Anschluss bei Vodafone. Vodafone IP Anlagenanschluss ...