pepper
Goto Top

Batch zum umbenennen einer vorhandenen Text-Datei in Datum.txt und kopieren und verschieben

Hallo zusammen,

irgendwie habe ich gerade eine Blockade, weshalb ich nicht wirklich weiter komme... face-sad

Ich muss eine Datei auf dem Server umbenennen und dann in einen Ordner auf einem anderen Server kopieren und dann die Datei in ein Unterverzeichnis verschieben.
Der Name der Datei soll das Datum JJMMTT enthalten.

Könnt Ihr mir bitte helfen?
Ist wahrscheinlich nur eine Kleinigkeit.

Trotzdem vielen herzlichen Dank!

Gruß
Christian

Content-ID: 367908

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

Ausgedruckt am: 26.11.2024 um 03:11 Uhr

Pjordorf
Pjordorf 13.03.2018 um 14:27:34 Uhr
Goto Top
Hallo,

Zitat von @Pepper:
Ich muss eine Datei auf dem Server umbenennen
Rechtsklick auf die Datei und umbenennen.

und dann in einen Ordner auf einem anderen Server kopieren
Kopieren oder Verschieben? Rechtsklick auf die Datei und Kopieren oder Verschieen auslösen. Ein Klick auf den Zielserver (da sind doch Freigaben erstellet, oder) und den Zielort - Einfügen

und dann die Datei in ein Unterverzeichnis verschieben.
Auf den Zielsystem anmelden, Explorer öffnen, Datei suchen und verschieben mittels Rechtsklick

Der Name der Datei soll das Datum JJMMTT enthalten.
Ist beim umbenennen zu berücksichtigen.

Ist wahrscheinlich nur eine Kleinigkeit.
Für eine (1) Datei ist das doch händisch schneller erledigt. Für viele Dateien ist ein Batch sinnvoll, allerdings fehlt da dann noch das fehlerabfangen und behandlung bei allen Fehlern die auftreten können. Ist doch ein wenig aufwendiger. Wie weit ist denn deine Batch schon bzw. an welcher Stelle hapert es denn?

Hier im Forum schon mal gesucht?
Batch-Datei Dateien umbenennen und verschieben
per Batch Dateien kopieren, umbenennen und nur die kopierten aus dem Ursprungsverzeichnis verschieben
Mit batch eine datei umbenennen und verschieben per zeitplan
Dateien verschieben und umbenennen mit Batch
Batch - Dateien kopieren und ggf. umbenennen
Batch - Dateien umbenennen Verschieben und Dateien von mit bestimmten Zeichen im Dateinamen von der Umbenennung ausschliessen

Ich hab jetzt ein MSDOS/Windows OS als gegeben betrachtet.

Gruß,
Peter
Pepper
Pepper 13.03.2018 um 14:33:28 Uhr
Goto Top
Oh Mann, ich sage doch, ich habe eine Blockade... face-smile
Ich meinte natürlich als Batch -Datei, die ich dann Nachts laufen lassen kann... *facepalm*
Pjordorf
Pjordorf 13.03.2018 um 14:40:15 Uhr
Goto Top
Hallo,

Zitat von @Pepper:
Ich meinte natürlich als Batch -Datei, die ich dann Nachts laufen lassen kann...
Und? Wie weit ist denn nun deine Batchdatei?
Woran hapert es?
Welches OS sind involviert? Nur Windows? Welche Versionen? Welche Rechte? Wie soll nachts definiert sein bzw. wer oder was sorgt dann dafür das deine Batch gestartet wird oder soll die ewig laufen?
.
.
.

Gruß,
Peter
Pepper
Pepper 13.03.2018 um 15:32:53 Uhr
Goto Top
Ich bin noch gar nicht weiter.

Es handelt sich um Windows 2012 R2 Server.
Das Batch soll mit administrativen Rechten als geplanter Task laufen.
Die Datei soll einmal pro Nacht umbenannt und kopiert und verschoben werden.
unauthorized-user
unauthorized-user 13.03.2018 um 15:41:22 Uhr
Goto Top
Hallo,

du kannst mit Move *Pfad* und ren *Datei* die Datei verschieben und umbenennen.

ren Ausgangsdatei.txt Umbenennen.txt
move C:\\Documents\umbennenen.txt \\123.213.123.12\Test

Hoffe das hilft dir schon mal weiter.
Pjordorf
Pjordorf 13.03.2018 um 16:43:00 Uhr
Goto Top
Hallo,

Zitat von @Pepper:
Ich bin noch gar nicht weiter.
Und? Wie weit bist du den nun? Überhaupt angefangen? face-smile
Ein
for /F "tokens=1,2,3,4 delims=. " %a in ('date /t') do set dateiname=%date:~0,2%%date:~3,2%%date:~6,4%  
sollte dir schon mal den ersten Teil deines Dateinamens geben, kannst du auch direkt in dein Batch einbauen (nur die entsprechenden % Zeichen vedopplen). Ansonsten die Variable dateiname verwenden....Oder
Set GesuchteDatei=TestDatei.txt

for /F "tokens=1,2,3,4 delims=. " %%a in ('date /t') do rename %GesuchteDatei%=%date:~0,2%%date:~3,2%%date:~6,4%.*  

Die Datei soll einmal pro Nacht umbenannt und kopiert und verschoben werden.
Warum Kopiert und verschoben?

Gruß,
Peter
Pepper
Pepper 14.03.2018 um 09:10:51 Uhr
Goto Top
Folgendes Batch habe ich mir jetzt zusammengeschustert:

@echo off
net use s: \\aaa\cdr_Dateien /persistent:no
net use i: \\bbb\Import /persistent:no
cd s:
ren s:\cdr660.txt s:\cdr_%date%-%time%.txt
copy s:\cdr_*.* i:
move s:\cdr_*.* s:\archiv\
net use i: /del /y
net use s: /del /y

Wenn ich die Batch ausführe (auf dem entsprechenden Server (aaa)), bekomme ich aber immer die Meldung, dass das Laufwerk nicht gefunden werden kann.
Pjordorf
Pjordorf 14.03.2018 um 14:25:24 Uhr
Goto Top
Hallo,

Zitat von @Pepper:
Folgendes Batch habe ich mir jetzt zusammengeschustert:
OK

@echo off
Fürs erste weglassen oder aus off ein on machen. Hilft ungemein beim Fehlersuchen.

net use s: \\aaa\cdr_Dateien /persistent:no
Passiert hier der Fehler?

net use i: \\bbb\Import /persistent:no
Oder passiert hier der Fehler?

Existiert \\aaa oder \\bbb und dann existiert die Freigabe cdr_Dateien oder Import? Welche Rechte sind dort in der Freigabe und in der NTFS Sicherheit zugeordnet? Darfst du überhaupt da drauf? Sind die \\aaa und \\bbb per IP auflösbar bzw. sind das FQDNs? Und ganz wichtig - welcher Fehler wird dir wo gemeldet?

ren s:\cdr660.txt s:\cdr_%date%-%time%.txt
Sicher das du ein 6.3.2018 oder ein 12.3.2018 oder ein 15.11.2018 als Datum gefolgt von der Uhrzeit haben willst? Was glaubst du was dein Dateisystem dir dann anbietet wenn du etwas suchst? Oder soll es nicht doch ein JJJJMMTT-HHMMSS sein?

net use i: /del /y
net use s: /del /y
Ist überflüssig da wenn deine Batch sich beendet auch deine Umgebung dort vernichtet wird.

Wenn ich die Batch ausführe (auf dem entsprechenden Server (aaa)), bekomme ich aber immer die Meldung, dass das Laufwerk nicht gefunden werden kann.
Und welche Fehlermeldung ist es nun?

Gruß,
Peter
Pepper
Pepper 14.03.2018 um 15:12:21 Uhr
Goto Top
Ja, das wäre natürlich besser, wenn es JJMMTT wäre.

Hier kommt mal der Ablauf:

net use s: \\aaa\cdr_Dateien /persistent:no
Der Befehl wurde erfolgreich ausgeführt.


net use i: \\bbb\Import /persistent:no
Der Befehl wurde erfolgreich ausgeführt.


cd s:
S:\

ren s:\cdr660.txt s:\cdr_14.03.2018.txt

copy s:\cdr_*.* i:
s:\cdr_*.*
0 Datei(en) kopiert.

move s:\cdr_*.* s:\archiv\

net use s: /del /y
s: wurde erfolgreich gelöscht.


net use i: /del /y
i: wurde erfolgreich gelöscht.
Pjordorf
Pjordorf 14.03.2018 aktualisiert um 16:25:30 Uhr
Goto Top
Hallo,

Zitat von @Pepper:
Ja, das wäre natürlich besser, wenn es JJMMTT wäre.
Dann nimm doch auch das. Z.B. mit
ren s:\cdr660.txt %date:~0,2%%date:~3,2%%date:~6,4%.txt
Hier kommt mal der Ablauf:
Bitte das Echo Off entfernen oder auskommentieren damit du siehst was wann passiert.

net use s: \\aaa\cdr_Dateien /persistent:no
Der Befehl wurde erfolgreich ausgeführt.
Kein Fehler mehr?

net use i: \\bbb\Import /persistent:no
Der Befehl wurde erfolgreich ausgeführt.
Ebenfalls keinen Fehler mehr.

ren s:\cdr660.txt s:\cdr_14.03.2018.txt
Baue hier ein dir s:\cdr_*.txt und ein Pause mal ein.

copy s:\cdr_*.* i:
s:\cdr_*.*
0 Datei(en) kopiert.
Findet er keine cdr_*.* datei?

Beim entwerfen von Batchdateien und zwecks testen hat man das CMD Fenster (Eingabeaufforderung) fast immer geöffnet damit man auch die Eingabe und die Ausgabe sehen kann. So wird das CMD-Fenster nicht nach der aussführung der Batch Datei geschlossen. Und wie schon gesagt - echo off ist erstmal aus zu lassen bzw. mit echo on zu ersetzen...

Und setze deine CMD medlungen hier in Code Tags ein (links vom Editor-Fenster die Zeichen für kleiner als Schrägstrich grösser als). Das hilft uns und somit auch dir.

Gruß,
Peter
Pepper
Pepper 14.03.2018 um 16:59:19 Uhr
Goto Top
C:\ProgramData\T-Com\cdr_Dateien>net use s: \\aaa\cdr_Dateien /persistent:no 
Der Befehl wurde erfolgreich ausgeführt.
Info: Da hatte ich noch nie Fehler

C:\ProgramData\T-Com\cdr_Dateien>net use i: \\bbb\Import /persistent:no 
Der Befehl wurde erfolgreich ausgeführt.
Info: Da hatte ich noch nie Fehler

C:\ProgramData\T-Com\cdr_Dateien>cd s: 
S:\

C:\ProgramData\T-Com\cdr_Dateien>ren s:\cdr660.txt 14032018.txt 
Info: Die Datei liegt da, ganz jungfräulich

C:\ProgramData\T-Com\cdr_Dateien>copy s:\cdr_*.* i:\ 
s:\cdr_*.* 
        0 Datei(en) kopiert.

C:\ProgramData\T-Com\cdr_Dateien>move s:\cdr_*.* s:\archiv\ 

C:\ProgramData\T-Com\cdr_Dateien>net use s: /del /y 
s: wurde erfolgreich gelöscht.


C:\ProgramData\T-Com\cdr_Dateien>net use i: /del /y 
i: wurde erfolgreich gelöscht.
Pjordorf
Pjordorf 14.03.2018 um 17:29:45 Uhr
Goto Top
Hallo,

Zitat von @Pepper:
Normalerweise würde wir uns jetzt für deine Info bedanken und in einer Kneipe gehen.

Info: Da hatte ich noch nie Fehler
Hast du nicht selbst
Wenn ich die Batch ausführe (auf dem entsprechenden Server (aaa)), bekomme ich aber immer die Meldung, dass das Laufwerk nicht gefunden werden kann.
geschrieben? Und da drauf bezog sich meine Antwort.

C:\ProgramData\T-Com\cdr_Dateien>cd s:
S:\
Wenn du schon ein CD machst, solltest du auch dorthin wechseln, oder willst du das nicht? Ein S: hilft in diesem fall.

C:\ProgramData\T-Com\cdr_Dateien>ren s:\cdr660.txt 14032018.txt
Info: Die Datei liegt da, ganz jungfräulich
Welche Datei genau liegt dort und ist jungfräulich? Was sagt ein Dir? Denn deine nächste Anweisung läuft ins leere

C:\ProgramData\T-Com\cdr_Dateien>copy s:\cdr_*.* i:\
s:\cdr_*.*
0 Datei(en) kopiert.
Ist wohl korrekt da ja in dein S:\ selbst jetzt nur noch die 14032018.txt liegt. Kopieren willst du aber die cdr_*.* (und die gibbet nicht), daher ist ein 0 Datei(en) kopiert auch richtig.

C:\ProgramData\T-Com\cdr_Dateien>move s:\cdr_*.* s:\archiv\
Das gleiche wie oben

Und du bist immer noch in C:\Programdata\.... und nicht in S:

Und wo ist der Dir und Pause eingebaut, dami du ordentlich debuggen kannst? Ein Programm kann grundsätzlich auch auf Papier mit einem Bleistift durchgespielt werden, dazu bedarf es keinen Computer mit einem OS. Geradezu bei Batch von Vorteil sich die einzelnen Schritte klar zu machen und was im einzelnen dort passiert. Vielleicht mal bei Rob van der Woude vorbeischauen.

Gruß,
Peter
Pedant
Pedant 14.03.2018 um 18:42:20 Uhr
Goto Top
Hallo Pepper,

ergänzen zu Pjordorfs Kommentaren:

In Deiner Betch sehe ich keinen Befehl, der zwingend einen Laufwerksbuchstaben erfordert.
Das net use kannst Du Dir eigentlich schenken und solltest es auch.

Statt s: und i: kannst Du die UNC-Pfade nutzen, also beispielsweise statt
copy s:\cdr_*.* i:\
einfach
copy \\aaa\cdr_Dateien\cdr_*.* \\bbb\Import\
schreiben.

Zitat von @Pepper:
Ich muss eine Datei auf dem Server umbenennen und dann in einen Ordner auf einem anderen Server kopieren und dann die Datei in ein Unterverzeichnis verschieben.
Der Name der Datei soll das Datum JJMMTT enthalten.

Zitat von @Pepper:
ren s:\cdr660.txt 14032018.txt
copy s:\cdr_*.* i:\
move s:\cdr_*.* s:\archiv\
Warum nennst Du dann erst eine Datei um und kopierst und verschiebst sie dann nicht, sondern alle anderen?

Sollte das nicht wie folgt aussehen?
ren s:\cdr660.txt 
copy s:\14032018.txt i:\  
move s:\14032018.txt s:\archiv\

Falls ja, dann sollte es insgesamt so aussehen:
@echo off
set neuername=%date:~0,2%%date:~3,2%%date:~6,4%.txt
ren \\aaa\cdr_Dateien\cdr660.txt %neuername%
copy \\aaa\cdr_Dateien\%neuername% \\bbb\Import\
move \\aaa\cdr_Dateien\%neuername% \\aaa\cdr_Dateien\archiv\

Gruß Frank
Pjordorf
Lösung Pjordorf 14.03.2018 um 19:28:48 Uhr
Goto Top
Hallo,

Zitat von @Pedant:
ren s:\cdr660.txt 14032018.txt
Hier scheint ja schon sein eklatanter Fehler zu stecken. face-smile Habe ich schon dem TO in vorgehender Antwort versucht zu sagen. Er soll schliesslich sein Script selbst erstellen und auch selbst Debuggen (können).

copy s:\cdr_*.* i:\
Er wird diese Dateinamenskonvention wohl nicht finden

move s:\cdr_*.* s:\archiv\
Und hier ebenfalls nicht

Sollte das nicht wie folgt aussehen?
ren s:\cdr660.txt
Hier fehlt das Ziel wohin oder in welchen Namen kopiert werden soll.

@echo off
Ist zum debuggen nicht geeignet. Besser ein Echo ON oder weglassen

ren \\aaa\cdr_Dateien\cdr660.txt %neuername%
Besser ein
ren \\aaa\cdr_Dateien\cdr660.txt cdr_%neuername%.txt

copy \\aaa\cdr_Dateien\%neuername% \\bbb\Import\
Besser ein
copy \\aaa\cdr_Dateien\cdr_%neuername%.txt \\bbb\Import\

move \\aaa\cdr_Dateien\%neuername% \\aaa\cdr_Dateien\archiv\
Besser ein
move \\aaa\cdr_Dateien\cdr_%neuername%.txt \\aaa\cdr_Dateien\archiv\

Oder unser TO packt sich den Quellname und den Zielname in eine Variable und nutz die mit %Name% oder !Name!.

Sorry Frank.

Gruß,
Peter
Pepper
Pepper 15.03.2018 um 14:41:22 Uhr
Goto Top
Hi zusammen,

ich danke Euch für die Hilfe!
Die letzten beiden Posts haben mir die Augen geöffnet und die Lösung gebracht.
Es klappt jetzt und alle sind glücklich und zufrieden.

Vielen vielen Dank.

Gruß
Christian
Pjordorf
Lösung Pjordorf 15.03.2018 aktualisiert um 15:09:23 Uhr
Goto Top
Hallo,

Zitat von @Pepper:
Die letzten beiden Posts haben mir die Augen geöffnet und die Lösung gebracht.
Und was war es? Magst du deinen (betreffenden) Code hier für die Nachwelt reinstellen?

Es klappt jetzt und alle sind glücklich und zufrieden.
Schön, und wenn du bitte noch einen grünen Balken dran machst Wie kann ich einen Beitrag als gelöst markieren?

Gruß,
Peter
Pepper
Pepper 15.03.2018 um 16:01:18 Uhr
Goto Top
Dem komme ich gerne nach...

set neuername=%date:~6,4%%date:~3,2%%date:~0,2%.txt 

ren \\aaa\cdr_Dateien\cdr660.txt cdr_%neuername%

copy \\aaa\cdr_Dateien\cdr_%neuername% \\bbb\Import\
move \\aaa\cdr_Dateien\cdr_%neuername% \\aaa\cdr_Dateien\archiv\

Wie gesagt, ich habe echt wie ein Ochs vor dem Berg gestanden.
Irgendwie habe ich den Wald vor lauter Bäumen nicht mehr gesehen...

Viele Grüße
Christian
Pjordorf
Pjordorf 15.03.2018 um 16:12:20 Uhr
Goto Top
Hallo,

Zitat von @Pepper:
Irgendwie habe ich den Wald vor lauter Bäumen nicht mehr gesehen...
Da ist sehr oft das @echo Off dran schuld face-smile

Gruß,
Peter