Datensicherungs Batch Datei schreiben
Ich bin gerade dabei zu lernen mit Batch Dateien zu Programmieren und habe ein Paar Probleme die ich nicht einfach Googeln kann.
Also das Ziel ist:
Ich klicke auf die .bat Datei und diese Kopiert dann die Daten aus Ordner "A" in einen Ordner "B". Die Kopierten Daten sollen aber nicht die Alten des Ordners "B" ersetzen. Die Kopierten Daten aus "A" sollen an ihren Original Dokumentnamen noch das aktuelle Datum bekommen und dann in Ordner "B" abgespeichert werden.
Bis jetzt bin ich so weit das die Daten aus Ordner "A" in Ordner"B" kopiert werden...
Ich nehme an das ein paar Leute sich jetzt die hand vor den Kopf schlagen aber ich hoffe trotzdem das mir jemand ein Paar Tipps, Befehle oder auch ein Vollständiges Programm geben kann.
Ich danke schon einmal im Vorraus für die Hilfe
Also das Ziel ist:
Ich klicke auf die .bat Datei und diese Kopiert dann die Daten aus Ordner "A" in einen Ordner "B". Die Kopierten Daten sollen aber nicht die Alten des Ordners "B" ersetzen. Die Kopierten Daten aus "A" sollen an ihren Original Dokumentnamen noch das aktuelle Datum bekommen und dann in Ordner "B" abgespeichert werden.
Bis jetzt bin ich so weit das die Daten aus Ordner "A" in Ordner"B" kopiert werden...
Ich nehme an das ein paar Leute sich jetzt die hand vor den Kopf schlagen aber ich hoffe trotzdem das mir jemand ein Paar Tipps, Befehle oder auch ein Vollständiges Programm geben kann.
Ich danke schon einmal im Vorraus für die Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188079
Url: https://administrator.de/forum/datensicherungs-batch-datei-schreiben-188079.html
Ausgedruckt am: 17.04.2025 um 08:04 Uhr
10 Kommentare
Neuester Kommentar
Hallo HQToast und willkommen im Forum!
Eine wichtige Information fehlt dabei noch: Sind auch Unterordner zu berücksichtigen?
Außerdem hast Du nix über das Datumsformat gesagt ...
Im einfachsten Fall sähe das etwa so aus:
Mehr dazu findest Du im Tutorial zur for-Schleife bzw in der Online-Hilfe (etwa mit "
Grüße
bastla
[Edit] "
Eine wichtige Information fehlt dabei noch: Sind auch Unterordner zu berücksichtigen?
Außerdem hast Du nix über das Datumsformat gesagt ...
Im einfachsten Fall sähe das etwa so aus:
for /f "delims=" %%i in ('dir /b/a-d "D:\Ordner A"') do copy "D:\Ordner A\%%i" "D:\Ordner B\%%~ni%date%%%~xi"
dir /?
")...Grüße
bastla
[Edit] "
copy
"-Befehl noch angepasst [/Edit]
Moin Toasti,
willkommen in der Welt von Batch (ja auch ich sehe mich als Junger Padawan vom bastla)
Aber bei einem kann ich dir helfen, beim Datum.
Das Format sieht dann zwar so aus JJJJ.MM.DD, aber ich denke zur besseren sortierbarkeit, ist dies nicht weiter schlimm.
Variable mit dem Datum von heute belegen
(Frag mich bitte nicht, ich bin bis heute dabei zu verstehen was das alles heißen soll
)
Und um dieses dann von A nach B zu bekommen (Sicherlich arbeitest du mit xcopy):
Fürs nachsehen was die Einstellungen heißen in der CMD xcopy /? eingeben.
Ich denke das sind die Sinnvollsten wobei /J nicht sein muss - ich denke nur das auch große Datein dabei sein werden.
Hoffe konnte helfen.
Gruß Zero
willkommen in der Welt von Batch (ja auch ich sehe mich als Junger Padawan vom bastla)
Aber bei einem kann ich dir helfen, beim Datum.
Das Format sieht dann zwar so aus JJJJ.MM.DD, aber ich denke zur besseren sortierbarkeit, ist dies nicht weiter schlimm.
Variable mit dem Datum von heute belegen
set mydate=%date:~-4%%date:~-7,2%%date:~-10,2%
Und um dieses dann von A nach B zu bekommen (Sicherlich arbeitest du mit xcopy):
xcopy /E /I /Q /O /J "PFAD A\DateiA" "PFAD B\%mydate%_DateiA"
Fürs nachsehen was die Einstellungen heißen in der CMD xcopy /? eingeben.
Ich denke das sind die Sinnvollsten wobei /J nicht sein muss - ich denke nur das auch große Datein dabei sein werden.
Hoffe konnte helfen.
Gruß Zero
Hallo HQToast!
Ist eigentlich nicht ganz so wild - aber bis Du das verlinkte Tutorial durch hast, wird's vielleicht ein wenig dauern, daher vorweg eine kurze Erklärung zu der Zeile:
leitet eine Schleife ein, um alle Elemente des in der folgenden Klammer angegebenen Befehls (= hier alle Dateien des Ordners A) einzeln abzuarbeiten (und zwar so, dass der Dateiname nicht durch ev enthaltene Leerzeichen "zerrissen" würde)
listet alle Dateien (aber wegen des "
(ich habe noch die Angabe des Quellordners ergänzt) kopiert dann jede einzelne Datei (der Name steht in "
noch ein "_" als Trennzeichen vor dem Datum einbauen oder, nachdem vorweg die Zeile
ausgeführt wurde, auch das umformatierte Datum mit
integrieren ...
Hinsichtlich der Uhrzeit kann die Zerlegung ähnlich wie beim Datum erfolgen - zu beachten wäre dabei allerdings, dass einstellige Zeiten nicht mit 0, sondern mit einem Leerzeichen beginnen, was mit einer nachträglichen Ersetzung der Art
angepasst werden kann ...
Grüße
bastla
[Edit]
[/Edit]
Ist eigentlich nicht ganz so wild - aber bis Du das verlinkte Tutorial durch hast, wird's vielleicht ein wenig dauern, daher vorweg eine kurze Erklärung zu der Zeile:
for /f "delims=" %%i in
dir /b/a-d "D:\Ordner A"
/a-d
" keine Ordner) nur mit ihrem Namen (inkl Typ) auf.copy "D:\Ordner A\%%i" "D:\Ordner B\%%~ni%date%%%~xi"
%%i
") in den Zielordner, wobei der Name neu erstellt wird aus:%%~ni
= "Original"-Dateiname (zB "DSC01453")%date%
= Datum in der Schreibweise "TT.MM.JJJJ" (Überlegungen zu einer Verbesserung hat ColdZero89 ja unten angestellt) und%%~xi
= Dateityp inkl Punkt davor (also etwa ".jpg")
copy "D:\Ordner A\%%i" "D:\Ordner B\%%~ni_%date%%%~xi"
set mydate=%date:~-4%%date:~-7,2%%date:~-10,2%
copy "D:\Ordner A\%%i" "D:\Ordner B\%%~ni_%mydate%%%~xi"
Hinsichtlich der Uhrzeit kann die Zerlegung ähnlich wie beim Datum erfolgen - zu beachten wäre dabei allerdings, dass einstellige Zeiten nicht mit 0, sondern mit einem Leerzeichen beginnen, was mit einer nachträglichen Ersetzung der Art
>set "myTime=%myTime: =0%
Grüße
bastla
[Edit]
Sorry das ich das Programm normal reingeschrieben habe...wusste nicht wie man es so einfügen kann wie ihr ...
Findest Du unter "Quellcode, Code oder HTML Snippets" in der Formatierungshilfe (und kannst Du auch nachträglich noch reineditieren) ...[/Edit]
@ColdZero89!

Wie sich der Hilfe zu "
einfach: Verwende die letzten 4 Zeichen der Variablen %date% (die das Tagesdatum - defaultmäßig mit 4-stelliger Jahreszahl) enthält.
Weshalb die letzten 4 Stellen und nicht 4 Stellen ab Position 7 - Schreibweise dafür:
Unter W2000 wurde je nach Systemeinstellungen auch der Wochentag mit angegeben, sodass %date% dann zB
enthielt - durch das Zerlegen "vom Ende her" konnte diese und auch die danach übliche Schreibweise (ohne Wochentag) mit dem gleichen Code verarbeitet werden ...
"
Grüße
bastla
ich bin bis heute dabei zu verstehen was das alles heißen soll 
Na komm - so ganz glaube ich Dir das nicht ... Wie sich der Hilfe zu "
set
" entnehmen lässt, können mit der Tilde (~
) Teilstrings gebildet werden - so bedeutet%date:~-4%
Weshalb die letzten 4 Stellen und nicht 4 Stellen ab Position 7 - Schreibweise dafür:
%date:~6,4%
Mo 16.07.2012
"
xcopy
" ist natürlich sinnvoll, weil bei Bedarf damit auch die benötigte Ordnerstruktur erstellt wird - allerdings kann so wie von Dir dargestellt das Datum nur in den Zielordner integriert werden - die einzelnen Dateinamen werden nicht um das Datum ergänzt ...Grüße
bastla
Moinsen
Haha. So grob versteh ichs ja
es ist nur teilweise echt noch hirnverbrennend ^_^
Aber mit deiner erklärung ergibt das ganze gebilde für mich immernoch keinen genauen Sinn.
wieso -4? oder -7? ich hab nun gedacht 01.02.3456 wird ab der ersten 0 mit den stellen belegt..
verwirrend!!! ^^
Stimmt - nicht dran gedacht das der Kollege hier das Datum ZU dem eigentlichen Namen haben will - nagut dann Mixen wir deinen und meinen Vorschlag und dann geht das
Gruß Zero
Na komm - so ganz glaube ich Dir das nicht ... 
Haha. So grob versteh ichs ja
Aber mit deiner erklärung ergibt das ganze gebilde für mich immernoch keinen genauen Sinn.
mydate=%date:~-4%%date:~-7,2%%date:~-10,2%
wieso -4? oder -7? ich hab nun gedacht 01.02.3456 wird ab der ersten 0 mit den stellen belegt..
verwirrend!!! ^^
"
allerdings kann so wie von Dir dargestellt das Datum nur in den Zielordner integriert werden - die einzelnen Dateinamen werden
nicht um das Datum ergänzt ...
xcopy
" ist natürlich sinnvoll, weil bei Bedarf damit auch die benötigte Ordnerstruktur erstellt wird -allerdings kann so wie von Dir dargestellt das Datum nur in den Zielordner integriert werden - die einzelnen Dateinamen werden
nicht um das Datum ergänzt ...
Stimmt - nicht dran gedacht das der Kollege hier das Datum ZU dem eigentlichen Namen haben will - nagut dann Mixen wir deinen und meinen Vorschlag und dann geht das
Gruß Zero
Halo ColdZero89!
Position vom Ende her gezählt -4 und dann alle weiteren Stellen verwenden: 2012
Position vom Ende her gezählt -7 und dann 2 Stellen verwenden: 07
Position vom Ende her gezählt -10 und dann 2 Stellen verwenden: 17
Würde das Datum
geschrieben, würde das genauso funktionieren - deshalb die Zerlegung vom Ende her.
Wenn Du sicher bist, dass es den Wochentag vorneweg nicht gibt, kannst Du natürlich mit dem Zerlegen auch am Anfang beginnen:
Du beachten: Der erste Wert ist ein Offset (wieviele Zeichen sollen übersprungen werden) - daher für den Tag 0 (könnte auch weggelassen und als
BTW: Die (eigentlich gar nicht nötige Angabe) der 4 Stellen für die Jahreszahl funktioniert auch, wenn das Jahr nur zweistellig angegeben wäre - wenn aber auszuschließen ist, dass der Wochentag am Anfang des Datums steht, wäre
die kürzeste und (relativ) sicherste Schreibweise - noch genauer hat sich schon vor langer Zeit Tutorial der Thematik angenommen ...
Grüße
bastla
wieso -4? oder -7? ich hab nun gedacht 01.02.3456 wird ab der ersten 0 mit den stellen belegt..
Defaultmäßiges Datum:17.07.2012
Position vom Ende her gezählt -7 und dann 2 Stellen verwenden: 07
Position vom Ende her gezählt -10 und dann 2 Stellen verwenden: 17
Würde das Datum
Di 17.07.2012
Wenn Du sicher bist, dass es den Wochentag vorneweg nicht gibt, kannst Du natürlich mit dem Zerlegen auch am Anfang beginnen:
%date:~6,4%%date:~3,2%%date:~0,2%
%date:~,2%
geschrieben werden) ...BTW: Die (eigentlich gar nicht nötige Angabe) der 4 Stellen für die Jahreszahl funktioniert auch, wenn das Jahr nur zweistellig angegeben wäre - wenn aber auszuschließen ist, dass der Wochentag am Anfang des Datums steht, wäre
%date:~6%%date:~3,2%%date:~,2%
Grüße
bastla
Moin,
frage: Konnten wir dem Fragensteller denn nun helfen?
Ansonsten @bastla: Danke so erklärt sich mir das
du bist ein schatz *fg*, hier nen Bier.
Und Bibers Tuto muss ich mir mal genauer Reinziehen wenn ich die Zeit dazu mal habe... sieht aber seeeeeeeeeeeeehr interessant aus :D
Gruß Zero
frage: Konnten wir dem Fragensteller denn nun helfen?
Ansonsten @bastla: Danke so erklärt sich mir das
Und Bibers Tuto muss ich mir mal genauer Reinziehen wenn ich die Zeit dazu mal habe... sieht aber seeeeeeeeeeeeehr interessant aus :D
Gruß Zero
moin ColdZero,
für die Variablen gibts auch eins Variablen.
sonst sind auch noch paar andere .
Gruß Phil
für die Variablen gibts auch eins Variablen.
sonst sind auch noch paar andere .
Gruß Phil