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

Frage Entwicklung Batch & Shell

Mitglied: Lightstar

Lightstar (Level 1) - Jetzt verbinden

11.03.2013, aktualisiert 15.03.2013, 1459 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 ...

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 ...

Exchange Server
Exchange 2013 Autodiscover funktioniert - manuelle Einrichtung nicht
Frage von mattsigExchange Server1 Kommentar

Hallo zusammen, habe ein merkwürdiges Problem mit meinem Exchange 2013 Server. Ich möchte mich über Outlook 2007 von extern ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 16 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 18 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...