pozelei
Goto Top

Batch Shell Frage

Frage zu Batch & Shell

Hallo Community,
ich möchte wirklich gerne von euch wissen,wie ich eine Batch-Datei schreiben, die mir jeden Samstag einen neueren stand der .vhd extra eine kopie macht oder so und nicht immer die alte überschreibt wie mache ich das nun?

Würdet Ihr mir ggf. helfen? wäre echt nett, hier mein Script zum drüber schauen, was muss ich ändern? Möchte das 4 Sicherungen in Monat gemacht werden, also Jeden Samstag eine. Es sollte nahc möglichkeit keine überschrieben werden wie gehe ich vor & wie kann ich diese dann als Aufgabe einplanen, damit dies läuft ohne angemeldet zu sein?

REM Hyper-V Virtual Machine Backup

REM Shutdown virtual machines
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1 c:\scripts\vmbackup\FABONS002Stop.txt 1

REM Copy virtual machines, /Y overwrites the file if it already exists
copy /Y "D:\Programme\Hyper-V\Virtual Hard DisksFABONS002.vhd" "E:\Backup\FABONS002\FABONS002.vhd"
"


REM Power on virtual machines
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1 c:\scripts\vmbackup\FABONS002Start.txt 0

REM Finished!

Vielen Dank im vorraus, möchte nicht nerven!

Sorry

Content-ID: 160819

Url: https://administrator.de/forum/batch-shell-frage-160819.html

Ausgedruckt am: 23.12.2024 um 03:12 Uhr

CondCPP
CondCPP 15.02.2011 um 14:16:12 Uhr
Goto Top
Hallo,
damit die einzelnen Sicherungen nicht überschrieben werden solltest du unterschiedliche Dateinamen für die Sicherungen verwenden.....das einfachste ist du baust das aktuelle Datum ein. Der Vorteil dabei ist du siehst auch gleich von wann die Sicherung ist.
Damit das ganze dann jeden Samstag startet kannst du das Script als Aufgabe in der Aufgabenverwaltung hinterlegen.
Pozelei
Pozelei 15.02.2011 um 14:21:19 Uhr
Goto Top
Vielen Dank CondCPP, jedoch weiß ich dass es möglich ist aber welchen Befehl mus sich eingeben mit dem Datum, hatte shcon verschiedenes durchprobiert jedoch error erhalten, wenn ich das Script nun als Aufgabe plane für der Rechnre es nicht aus (wenn kein Benutzer angemeldet ist), wie kann ich das umgehen?

Grüße Pozelei

Könnte ich es so machen?

REM Hyper-V Virtual Machine Backup

REM Shutdown virtual machines
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1

c:\scripts\vmbackup\FABONS002Stop.txt 1

REM Copy virtual machines, /Y overwrites the file if it already exists
copy /Y "D:\Programme\Hyper-V\Virtual Hard DisksFABONS002.vhd" "E:\Backup\FABONS002\FABONS002.vhd"
var datum = (time(now,yyyymmtt))
ren "E:\Backup\FABONS002\FABONS002.vhd" "E:\Backup\FABONS002\FABONS002&datum.vhd"


REM Power on virtual machines
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1

c:\scripts\vmbackup\FABONS002Start.txt 0

REM Finished!
Skyemugen
Skyemugen 15.02.2011 um 15:13:02 Uhr
Goto Top
Aloha,

dein Datum erinnert mich an VBS ;)

Vielleicht gefällt dir %date% ja besser =)

greetz André

Edit: du willst ja es etwas anders wie ich sehe

REM TT.MM.JJJJ soll zu JJJJMMTT
FOR /f "tokens=1-3 delims=." %%a in ("%date%") do Set Datum=%%c%%b%%a  

EDIT²: Äh zu spät editiert, der Biberle war schneller *grml* ^.^
Biber
Biber 15.02.2011 um 15:17:28 Uhr
Goto Top
Moin Pozelei,

willkommen im Forum.
Du vermischt in deinem Schnipsel Batchsprachelemente und VBSkript-Bröckchen.

Wenn du das für den CMD-Interpreter abgreifbare Datum über die Umgebungsvariable %date% umformatieren willst, ginge es so:
[Demo am CMD-Prompt]
>echo %date%
15.02.2011

>for /f "delims=. tokens=1-3" %i in ("%date%") do @echo set "mydate=%k%j%i"  
set "mydate=20110215"  
Wenn "dein" %date% anders aussieht, muss die Umformatiererei etwas angepasst werden.
Und wenn du dann irgendwas Brauchbares in deiner Variable %myDate% stehen hast, dann

STREICHE
ren "E:\Backup\FABONS002\FABONS002.vhd" "E:\Backup\FABONS002\FABONS002&datum.vhd"

SETZE
ren "E:\Backup\FABONS002\FABONS002.vhd" "FABONS002%mydate%.vhd"

Grüße
Biber
Pozelei
Pozelei 15.02.2011 um 15:21:54 Uhr
Goto Top
Vielen Dank erstmal für die Wilkommengrüße, aber wie ist es nun richtig so?

REM Hyper-V Virtual Machine Backup, fehlt dort noch etwas?

REM Shutdown virtual machines
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1 c:\scripts\vmbackup\FABONS002Stop.txt 1

REM Copy virtual machines, /Y overwrites the file if it already exists
copy "D:\Programme\Hyper-V\Virtual Hard DisksFABONS002.vhd" "E:\Backup\FABONS002\FABONS002.vhd"
set "mydate=20110215"
ren "E:\Backup\FABONS002\FABONS002.vhd" "E:\Backup\FABONS002\FABONS002%mydate%.vhd"


REM Power on virtual machines
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1 c:\scripts\vmbackup\FABONS002Start.txt 0

REM Finished!
Skyemugen
Skyemugen 15.02.2011 um 15:24:06 Uhr
Goto Top
Zitat von @Pozelei:
fehlt dort noch etwas?

Aloha,

joa, ohne for-Schleife = kein set mydate möglich ;)

Biberles Auszug war aus dem Prompt =) aber einbauen musst du
for /f "delims=. tokens=1-3" %%i in ("%date%") do set "mydate=%%k%%j%%i"
auf jeden Fall (dein set mydate kann raus, das war nur das echo) - %mydate% ist deine neue Datumsvariable (die du ja bereits eingebaut hast, wie ich sehe)

greetz André

P.S.: Warum überhaupt das ren? Kopiere doch gleich nach [Pfad\Datei%mydate%.Dateiendung]
Pozelei
Pozelei 15.02.2011 um 15:29:10 Uhr
Goto Top
Sorry, aber ich versteh das nicht gnaz wo kommt nun dieser Befehl hin?

for /f "delims=. tokens=1-3" %%i in ("%date%") do set "mydate=%%k%%j%%i" ?
Skyemugen
Skyemugen 15.02.2011 um 15:32:28 Uhr
Goto Top
Aloha,

@echo off & setlocal
REM Hyper-V Virtual Machine Backup

REM Shutdown virtual machines
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1 c:\scripts\vmbackup\FABONS002Stop.txt 1

REM Datum TT.MM.JJJJ wird zu JJJJMMTT
for /f "delims=. tokens=1-3" %%i in ("%date%") do set "mydate=%%k%%j%%i"  

REM Copy virtual machines, /Y overwrites the file if it already exists
copy "D:\Programme\Hyper-V\Virtual Hard Disks\FABONS002.vhd" "E:\Backup\FABONS002\FABONS002_%mydate%.vhd"  

REM Power on virtual machines
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1 c:\scripts\vmbackup\FABONS002Start.txt 0

echo Finished!
pause

Anmerkung: Habe dein ren gestrichen, mir ergibt sich der Sinn nicht (und ein _ mit eingefügt, sieht doch besser aus als der reine Zahlensalat)

greetz André

edit: fehlendes \ hinzugefügt
Pozelei
Pozelei 15.02.2011 um 15:36:55 Uhr
Goto Top
Wenn ich es übernehme, ruft er mir nur die txt Datein auf und macht nix :P
Biber
Biber 15.02.2011 um 15:46:08 Uhr
Goto Top
Moin Pozelei,

ich kann zwar deine Fehlerbeschreibung nicht deuten, aber es sollte doch möglich sein, nur die beiden Befehle in Zeile 08 und Zeile 11 einzeln am CMD-Prompt oder inem proof-of-concept-Batch zu testen.
Da kann doch begrenzt wenig schiefgehen.

Ob nun davor und danach VMs gestartet oder Säcke mit Reis gestapelt werden... das hat doch mit dem Datumsumgefriemele nichts zu tun...

Grüße
Biber
Pozelei
Pozelei 15.02.2011 um 15:47:16 Uhr
Goto Top
Wenn ich es übernehme, ruft er mir nur die txt Datein auf und macht nix :P

Edit: Habe den Fehler entdeckt hast ein \ vergessen bei dem Pfad hier:
@echo off & setlocal 

REM Hyper-V Virtual Machine Backup 

REM Shutdown virtual machines 

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1 c:\scripts\vmbackup\FABONS002Stop.txt 1 

REM Datum TT.MM.JJJJ wird zu JJJJMMTT 

for /f "delims=. tokens=1-3" %%i in ("%date%") do set "mydate=%%k%%j%%i"  

REM Copy virtual machines, /Y overwrites the file if it already exists 

copy "D:\Programme\Hyper-V\Virtual Hard Disks\FABONS002.vhd" "E:\Backup\FABONS002\FABONS002_%mydate%.vhd"   

REM Power on virtual machines 

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\scripts\vmbackup\StartStopVms.ps1 c:\scripts\vmbackup\FABONS002Start.txt 0 

echo Finished! 

pause
Skyemugen
Skyemugen 15.02.2011 um 15:50:57 Uhr
Goto Top
Aloha,

nur ein kleiner Schönheitshinweis:

Ein Skript, das mit getagged ist, liest sich angenehmer. =)

greetz André

P.S.: hab nur c&p, der Fehler war bereits in deinem Beitrag davor, aus dem ich kopierte
Pozelei
Pozelei 15.02.2011 um 15:59:02 Uhr
Goto Top
Immer diese Copier & Paster :P
Naja läuft nun einbandfrei, vielen Dank an alle Beteiligten. Fast als gelöst makiert, wie kann ich es jetz noch verwirklichen, dass er die älteste von den 4 Backups löscht nach 4 Wochen?


Grüße Pozelei
Skyemugen
Skyemugen 15.02.2011 um 16:06:27 Uhr
Goto Top
Aloha,

am einfachsten mit delage32, der zwar mit Tagen arbeitet aber 28 Tage sind ja bekanntlich auch 4 Wochen =)

Sprich:
"Laufwerk\Pfad_zur\delage32.exe" "Laufwerk\Pfad_der_zu_löschenden_Datei" 28 /parameter_siehe_Dokumentation  
Dokumentation hier zu finden

greetz André
Pozelei
Pozelei 15.02.2011 um 16:46:01 Uhr
Goto Top
Zitat von @Skyemugen:
Aloha,

am einfachsten mit delage32, der zwar mit Tagen arbeitet aber 28 Tage sind ja
bekanntlich auch 4 Wochen =)

Sprich:
> "Laufwerk\Pfad_zur\delage32.exe" "Laufwerk\Pfad_der_zu_löschenden_Datei" 28  
> /parameter_siehe_Dokumentation
Dokumentation hier zu finden

greetz André


Wie baue ich das nun in mein Script ein ;)
Pozelei
Pozelei 16.02.2011 um 11:14:49 Uhr
Goto Top
Wäre der Code so richtig?

"C:\delage32\delage32.exe" "E:\Backup\FABONS002\FABONS002_%mydate%.vhd" 28  

Am Anfang des Scripts eingetragen, da sagt er mir da ich es mal mit 1 statt 28 probiert habe zum test, delage32 - No files !
Skyemugen
Skyemugen 16.02.2011 um 11:33:12 Uhr
Goto Top
Aloha,

nur als Hinweis: Du solltest keine Datei angeben, sondern ein Verzeichnis ... und mit %mydate% ist beim Löschen schonmal gar nicht gut Kirschen essen - lies dir am Besten nochmal die Doku dazu durch und teste es irgendwo mit Testordnern & Dateien.

Learning by doing, man muss ja nicht alles vorkauen =) jedenfalls nicht solch simple Sachen

greetz André
Pozelei
Pozelei 16.02.2011 um 11:51:47 Uhr
Goto Top
Aber wenn ich doch ein Verzeichnis hinten angebe löscht er mir das Komplette Verzeichnis oder leige ich dort falsch?

Grüße Pozelei
Skyemugen
Skyemugen 16.02.2011 um 11:55:08 Uhr
Goto Top
Aloha,

nur Dateien, die älter als die angegebenen Tage sind [das Verzeichnis dürfte ja immer jünger und nicht leer sein ...] (ich ging davon aus, dass dort auch nur diese Backups .vhs drin sind dann) - ansonsten könntest du auch
"C:\delage32\delage32.exe" "E:\Backup\FABONS002\FABONS002_*.vhd" 28
versuchen (ich sehe schon, du hast die Dokumentation (klick mich) immernoch nicht gelesen ...)

greetz André

P.S: Ohne Parameter wie /created oder /modified bin ich mir nicht 100% sicher, ob da viel passieren wird ... ansonsten /subonly kommt auch oftmals gut
P.P.S.:
DelAge32 löscht Dateien, und entfernt gegebenenfalls leere Ordner. DelAge32 wurde nicht konzipiert, um Verzeichnis-Strukturen in Abhängigkeit von der Alter des Ordners (unabhängig vom Alter der enthaltenen Dateien) zu löschen.
Pozelei
Pozelei 16.02.2011 um 12:02:50 Uhr
Goto Top
Hatte es schon vor dir hinbekommen :D

Danke nochmals habe die Doku gelesen:
So funtzt es auch musste halt das Datum nach vorne verlegen mit Windows Date um es zu testen:
"C:\delage32\delage32.exe" "C:\Users\offlimits\Desktop\Neuer Ordner\*.*" 1 /created /modified  


PS: Kannst du mir ne seite zum lernen von Powershell empfehlen, soll demnächst die batch direkt in eine Powershell einbinden damit man nicht unnötig eine *bat bzw *cmd file hat!

Grüße Pozelei
Skyemugen
Skyemugen 16.02.2011 um 12:12:06 Uhr
Goto Top
Zitat von @Pozelei:
PS: Kannst du mir ne seite zum lernen von Powershell empfehlen, soll demnächst die batch direkt in eine Powershell einbinden
damit man nicht unnötig eine *bat bzw *cmd file hat!

Aloha,

nope, kann ich nicht - nutze ich nicht brauche ich nicht

Aber, wenn die Sache hier von der Thematik her geklärt ist, kannst du ja mal Wie kann ich einen Beitrag als gelöst markieren?.

greetz André
Pozelei
Pozelei 16.02.2011 um 12:20:07 Uhr
Goto Top
Häckchen wurde schon gesetzt (F5) Bitte face-smile

Grüße Pozelei