Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Datensicherungs Batch Datei schreiben

Frage Entwicklung Batch & Shell

Mitglied: HQToast

HQToast (Level 1) - Jetzt verbinden

16.07.2012 um 12:46 Uhr, 2246 Aufrufe, 10 Kommentare

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
Mitglied: bastla
16.07.2012, aktualisiert um 15:16 Uhr
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:
for /f "delims=" %%i in ('dir /b/a-d "D:\Ordner A"') do copy "D:\Ordner A\%%i" "D:\Ordner B\%%~ni%date%%%~xi"
Mehr dazu findest Du im Tutorial zur for-Schleife bzw in der Online-Hilfe (etwa mit "dir /?")...

Grüße
bastla

[Edit] "copy"-Befehl noch angepasst [/Edit]
Bitte warten ..
Mitglied: HQToast
16.07.2012, aktualisiert um 13:29 Uhr
Ok also danke erstmal für deine Antwort

Unterordner sind eigentlich nicht geplant aber es wäre interessant zu wissen was ich machen müsste um auch Unterordner miteinzubeziehen.

Beim Datumsformat wäre es einfach DD.MM.JJJJ und wenn es kaum einen Unterschied macht kännte man auch noch die Uhrzeit hinzufügen. SS.MM

Um Noch ein paar infos dazuzulegen. Die Ordner A und B sind bei mir unter C:\ abgelegt

Oh Gott ._. Ich versuche gerade nachzuvollziehen was du geschrieben hast :D ich bin überfordert... Aber ich gebe mir weiter mühe es zum funktionieren zu bringen...
Bitte warten ..
Mitglied: ColdZero89
16.07.2012 um 14:29 Uhr
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

01.
set mydate=%date:~-4%%date:~-7,2%%date:~-10,2%
(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):

01.
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
Bitte warten ..
Mitglied: HQToast
16.07.2012 um 15:10 Uhr
Also mit dem Namenändern bin ich leider noch nicht weitergekommen aber ich habe mir eine sinnvollere, zwar nicht i der Aufgabenstellung vorgegebene, Möglichkeit überlegt. Die Daten werden in einen Ordner der mit dem aktuellen Datum und Stunde reinkopiert. So erspart man sich den riesen berg an unübersichtlichen Daten mit hässlichen Endungen...


Das ich das mit dem namenändern nich hinbekommen...Naja wer weiß vll. stell ich mich auch zu blöd :D

Hier is mal das was ich jetzt geschafft habe:

@echo off

echo ---------------------------------Datensicherung--------------------------

FOR /F "tokens=1,2,3 delims=/: " %%a in ('Time/T') do set CTIME=%%a

set Quellpfad="C:\A"
set Zielpfad="C:\B\%date%_%ctime%Uhr"

echo Wollen sie die Dateien von
echo.
echo %Quellpfad%
echo.
echo nach
echo.
echo %Zielpfad%
echo.
echo kopieren?
echo.
echo.

set /p kopieren=[J/N]

if /i %kopieren%==J goto Ja
exit

:Ja

xcopy %Quellpfad% %Zielpfad% /S/D/Y/i
echo.
echo COMPLETE
pause






Also dafür das ich das erste mal was per batch programmiere finde ich habe ich das ganz gut gemacht XD

Sorry das ich das Programm normal reingeschrieben habe...wusste nicht wie man es so einfügen kann wie ihr ...
Bitte warten ..
Mitglied: bastla
16.07.2012, aktualisiert 17.07.2012
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:
for /f "delims=" %%i in
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)
dir /b/a-d "D:\Ordner A"
listet alle Dateien (aber wegen des "/a-d" keine Ordner) nur mit ihrem Namen (inkl Typ) auf.
copy "D:\Ordner A\%%i" "D:\Ordner B\%%~ni%date%%%~xi"
(ich habe noch die Angabe des Quellordners ergänzt) kopiert dann jede einzelne Datei (der Name steht in "%%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")
- natürlich ließe sich zB auch mit
copy "D:\Ordner A\%%i" "D:\Ordner B\%%~ni_%date%%%~xi"
noch ein "_" als Trennzeichen vor dem Datum einbauen oder, nachdem vorweg die Zeile
set mydate=%date:~-4%%date:~-7,2%%date:~-10,2%
ausgeführt wurde, auch das umformatierte Datum mit
copy "D:\Ordner A\%%i" "D:\Ordner B\%%~ni_%mydate%%%~xi"
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
>set "myTime=%myTime: =0%
angepasst werden kann ...

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]
Bitte warten ..
Mitglied: bastla
16.07.2012, aktualisiert 17.07.2012
@ColdZero89!
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%
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:
%date:~6,4%
Unter W2000 wurde je nach Systemeinstellungen auch der Wochentag mit angegeben, sodass %date% dann zB
Mo 16.07.2012
enthielt - durch das Zerlegen "vom Ende her" konnte diese und auch die danach übliche Schreibweise (ohne Wochentag) mit dem gleichen Code verarbeitet werden ...
"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
Bitte warten ..
Mitglied: ColdZero89
17.07.2012, aktualisiert um 12:07 Uhr
Moinsen

Na komm - so ganz glaube ich Dir das nicht ...

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.
01.
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!!! ^^


"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
Bitte warten ..
Mitglied: bastla
17.07.2012, aktualisiert um 12:28 Uhr
Halo ColdZero89!
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 -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
Di 17.07.2012
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:
%date:~6,4%%date:~3,2%%date:~0,2%
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 %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%
die kürzeste und (relativ) sicherste Schreibweise - noch genauer hat sich schon vor langer Zeit Biber im entsprechenden Tutorial der Thematik angenommen ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
19.07.2012, aktualisiert um 14:14 Uhr
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
Bitte warten ..
Mitglied: pieh-ejdsch
19.07.2012, aktualisiert um 19:29 Uhr
moin ColdZero,

für die Variablen gibts auch eins Variablen.

sonst sind auch noch paar andere Wissenbeiträge.

Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...