sascha27283
Goto Top

Erstellung Batch-Datei Kopieren und Umbenennen falls vorhanden

Hallo zusammen,

dies ist mein erster Post hier und ich hoffe ihr könnt mir helfen.

Ich habe eine kleine selbstgebastelte Lösung für unsere Verwaltung entwickelt. Ohne jetzt lange drum herum zu reden, will ich gleich zum Punkt kommen.
Es liegt eine Datei in einem Ordner (C:\Programme\Sicherung\Sicherung.xxx). Diese Datei soll auf ein Serverlaufwerk verschoben werden (U:\......\Sicherungen). Da die Datei bei allen Clients (ca. 60) aber genau gleich heisst, soll in der Batch-Datei beinhaltet sein, dass beim Kopiervorgang geprüft wird, ob die Datei bereits im Zielordner vorhanden ist und wenn ja, FORTLAUFEND umbenannt (also Sicherung_1.xxx, Sicherung_2.xxx) und anschliessend in den Ordner kopiert wird, sodass ich am Ende 60 Dateien mit Sicherung_x.xxx haben sollte. Es soll also keine Datei überschrieben werden. Es muss also geprüft werden, ob der Originalname vorhanden ist und bei Bedarf die letzte fortlaufende Nummerung verwendet wird. Sollte also bereits Sicherung_15.xxx vorhanden sein, soll die Datei in Sicherung_16.xxx umbenannt werden.
Da ich mich nur rudimentär mit Batch auskenne, bekomme ich sowas leider nicht und habe bislang auch keine Anleitung für eine fortlaufende automatische Nummerierung gefunden.

Ich würde mich sehr freuen, wenn sich jemand damit auskennt und mir möglicherweise den Text für diese Batch-Datei erstellen könnte oder mir zumindest behilflich sein kann.

Falls es noch Fragen gibt, einfach melden face-smile

Vielen Dank vorab!

MFG
Sascha

Content-Key: 214847

Url: https://administrator.de/contentid/214847

Printed on: April 26, 2024 at 23:04 o'clock

Member: tibor.nemes
tibor.nemes Aug 21, 2013 at 08:59:25 (UTC)
Goto Top
Hallo Sascha,

wäre es nicht sinnvoller im Dateinamen den Clientnamen hinzuzufügen?
Läuft die Batch auf jedem Client zur gleichen Zeit? Dann würde es bei deiner Variante zu inkonsistenten Zuständen kommt. Und wie würdest du die Rücksicherung realisieren?

Viele Grüße
Tibor
Member: bastla
bastla Aug 21, 2013 at 09:01:47 (UTC)
Goto Top
Hallo sascha27283 und willkommen im Forum!

Wäre es nicht ev sinnvoller, anstatt "Sicherung_1.xxx" die Sicherungsdatei "Sicherung_%computername%.xxx" zu benennen?

Wie (und von wo aus - Server / Client) wird übrigens der Batch gestartet?

Grüße
bastla
Member: B-free
B-free Aug 21, 2013 at 09:12:10 (UTC)
Goto Top
öhm. ich denke ungefähr so:
Qecho off

if not exist "C:\Programme\Sicherung\rename\NUL" md "C:\Programme\Sicherung\rename"  

set path1 = C:\Programme\Sicherung\
set serveradresse = ***!Hier serveradresse eintragen!***

set /p numerierung =<%path1%/letztenummer.log
set aktuellenummer = %numerierung% + 1
echo %aktuellenummer%>> %path1%/letztenummer.log

copy "C:\Programme\Sicherung\Sicherung.xxx" "C:\Programme\Sicherung\rename\Sicherung.xxx"  

cd %path1%

ren %path1%\rename\Sicherung.xxx sicherung_%aktuellenummer%.xxx

::Hab kein plan ob es geht :(

net use X: \\SERVER\Freigabe
move %aktuellenummer%.xxx X:

EXIT

wahrscheinlich wird es nicht funktionieren, aber es ist ne (einigermaßen) gute grundlage.

Tschau
B-Free
Member: sascha27283
sascha27283 Aug 21, 2013 updated at 09:19:26 (UTC)
Goto Top
Die Idee mit dem Namen ist zwar gut, aber leider darf dies nicht erfolgen. Die Dateinamen müssen personenunabhängig sein und nicht darauf hindeuten, von wem die Datei stammt. Zumindest nicht auf den ersten Blick.

Die Datei oder besser die Verknüpfung wird in den Autostart jedes Clients gelegt. Die Originaldatei befindet sich auf nem Serverlaufwerk. Dass sich zwei PCs genau gleichzeitig anmelden, halte ich für unwahrscheinlich.
Was meinst du mit Rücksicherung? Es handelt sich eigentlich nicht wirklich um ne Sicherung. Ich sags mal so, es werden Daten gesammelt, welche dann in das zentrale Verzeichnis verschoben werden sollen.

Achja die Dateien sollen nicht kopiert werden, sondern verschoben werden. Es soll also im Startordner keine Datei mehr zu finden sein, falls möglich. Ansonsten wird die Datei einfach immer überschrieben, was auch gehen würde. Aber falls möglich, sollte sie verschoben werden.

Grüße
Sascha
Member: B-free
B-free Aug 21, 2013 at 09:32:16 (UTC)
Goto Top
na dann erstze "copy" durch "Move" :D

B-free
Member: bastla
bastla Aug 21, 2013 at 13:05:56 (UTC)
Goto Top
Hallo sascha27283!
Die Dateinamen müssen personenunabhängig sein und nicht darauf hindeuten, von wem die Datei stammt.
Nur interessehalber (falls die gesammelten Dateien nicht auf einer FAT-Partition abgelegt werden) - was wird denn für
dir /x Sicherung_*.xxx
ausgegeben?

Grüße
bastla
Member: sascha27283
sascha27283 Aug 21, 2013 updated at 13:33:42 (UTC)
Goto Top
Ich weiss nicht, ob es das ist was du suchst, aber es wird das hier ausgegeben:

21.08.2013 15:08 122.098 SICHER~1.PCA Sicherung.xxx
1 Datei(en) 122.098 Bytes
0 Verzeichnis(se), 112.731.406.336 Bytes frei

@B-free

Dein Script funktioniert leider nicht. Ich verstehe das Script auch nicht ganz. Die Erstellung eines Ordners rename ist ja gar nicht gewünscht. Es soll lediglich die Datei verschoben werden und dabei geprüft werden, ob bereits eine Sicherung.xxx vorhanden ist. Falls ja, soll die zu kopierende Datei fortlaufend nummeriert werden (Sicherung_1.xxx). Das ist alles.
Gibt es noch weitere Vorschläge?
Member: bastla
bastla Aug 21, 2013 at 14:11:46 (UTC)
Goto Top
Hallo sascha27283!

Sorry face-sad - eigentlich hatte ich
dir /q Sicherung_*.xxx
gemeint ...

Grüße
bastla
Member: sascha27283
sascha27283 Aug 21, 2013 at 14:16:53 (UTC)
Goto Top
dann kommt

21.08.2013 15:10 782.991 Domäne\meinbenutzername Sicherung.xxx
1 Datei(en) 782.991 Bytes
0 Verzeichnis(se), 112.729.751.552 Bytes frei
Member: bastla
bastla Aug 21, 2013 updated at 14:25:34 (UTC)
Goto Top
Hallo sascha27283!
21.08.2013 15:10 782.991 Domäne\meinbenutzername Sicherung.xxx
Der Dateiname ist also tatsächlich "personenunabhängig" ...

Das Verschieben sollte sich (ungetestet) etwa so machen lassen:
@echo off & setlocal
set "Quelle=C:\Programme\Sicherung\Sicherung.xxx"  
set "Zielpfad=U:\......\Sicherungen"  

for %%i in ("%Quelle%") do (  
    set "Name=%%~ni"  
    set "Ext=%%~xi"  
)
if not defined Name goto :eof

set /a Nr=1
:Loop
set "Ziel=%Zielpfad%\%Name%_%Nr%%Ext%"  
if not exist "%Ziel%" (  
    move "%Quelle%" "%Ziel%"  
    goto :eof
)
set /a Nr+=1
goto :Loop
Grüße
bastla
Member: sascha27283
sascha27283 Aug 21, 2013 updated at 14:34:56 (UTC)
Goto Top
Tausend Dank bastla, das funktioniert super face-smile Ich hab zwar keine Ahnung was das alles heisst, aber es geht face-smile
Die Angabe mit Domäne und Benutzername habe ich nur anonymisiert ;) da steht schon was drin. Genauso wie beim Format der Sicherung.xxx

Tausend Dank, Thread kann geschlossen werden face-smile
Member: pieh-ejdsch
pieh-ejdsch Aug 21, 2013 updated at 14:41:22 (UTC)
Goto Top
moin Sascha,

Wenn die Daten/Backups sowieso anonymisiert auf der Kiste Gespeichert werden sollen und Du Dir da so Sicher bist es gibt nicht zwei PCs die sich genau gleichzeitig anmelden, dann nimm "Datum_Uhrzeit_Zufallszeichenfolge_Zufallszeichenfolge.EXT"

Damit hast Du Die Daten auch schön aufgereiht im Ordner abgelegt. ''Wozu überhaupt abzählen?''
20132208_065832_A5§78#_2Qc_Backup.bin
20132208_065848_Sd0r+_ybm[_Backup.bin
20132208_070103_lökajfg_8945ewn_Backup.Bin
...

[edit] Oh doch schon zu spät.[/edit]

Gruß Phil
Member: sascha27283
sascha27283 Aug 21, 2013 at 14:43:32 (UTC)
Goto Top
Sicher kann man sich natürlich nicht sein, aber die Wahrscheinlichkeit dass sich jemand in der gleichen Sekunden anmeldet halte ich für gering.
Mit deinem Tipp allein hätte ich allerdings nichts anfangen können. Dennoch Danke für deine Mühe.
Member: bastla
bastla Aug 21, 2013 at 14:44:44 (UTC)
Goto Top
Hallo sascha27283!
Die Angabe mit Domäne und Benutzername habe ich nur anonymisiert ;) da steht schon was drin.
Das meinte ich ja in Bezug auf "personenunabhängig" - es muss nicht der Rechner-/Benutzername im Dateinamen enthalten sein, um nachvollziehen zu können, von wem die Datei gespeichert wurde; demnach wäre es also eigentlich egal, ob der Name des Rechners oder Benutzers auch im Dateinamen auftaucht ...

Grüße
bastla
Member: bastla
bastla Aug 21, 2013 at 14:49:00 (UTC)
Goto Top
@ PH
_Zufallszeichenfolge_Zufallszeichenfolge
... wobei in Batch
_%random%_%random%
handlicher ist und zusammen mit Datum und Uhrzeit wohl ausreichend sein sollte ...

Grüße
bastla
Mitglied: 112778
112778 Aug 21, 2013 updated at 15:11:23 (UTC)
Goto Top
Hi,

die Zeit könnte man bis auf die Hundertstelsekunde genau bestimmen. Ob dabei zwei oder mehr User diese Hundertstelsekunde genau treffen würden, wage ich mal zu bezweifeln. Allerdings: Ausgeschlossen ist das nicht.

Gruß