WinFuture-Forum.de: Batch: Dateien umbenennen & verschieben - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Batch: Dateien umbenennen & verschieben vorhandene Dateien umbenennen und in einen Netzwerkordner verschieben


#1 Mitglied ist offline   fil3000 

geschrieben 02. September 2020 - 13:38

Liebe WinFuture-Forum-Menschen,

ich nutze auf der Arbeit einen Windows 10 Rechner, privat jedoch macOS und Linux - deshalb ersuche ich eure Hilfe zu Windows.

Ich erstelle jeden Mittag zwei PDF Dateien für den nächsten Tag und jeden Morgen zwei aktualisierte PDF Dateien für den aktuellen Tag. Diese werden mit verschiedenen Daten (tt-mm-jj) versehen und in mehrere Netzwerkordner kopiert, wo ggf. schon Dateien vorliegen, die gelöscht/ersetzt werden müssen. Bis jetzt mache ich dies über eine Weboberfläche oder einen Webdavordner, der im Arbeitsplatz eingebunden ist.

Ich schreibe hier nicht um mir die Arbeit von euch machen zu lassen, ich weiß nur nicht, wo ich anfangen soll. Deshalb möchte ich kurz den Ablauf beschreiben. Vielleicht habt ihr ja Tipps für mich :)

Ich habe einige Dateinamen und Pfade mit <> anonymisiert.

****************

Desktop:
C:\Users\<Usernummer>\Desktop

Ordner1: Pfad für Datei 1 (mit Datum im Dateinamen):
\\webdav.<serveradresse>@SSL\DavWWWRoot\Groups\<Pfad1>\<Pfad2>

Ordner2: Pfad für Datei 2 (mit Datum im Dateinamen):
\\webdav.<serveradresse>@SSL\DavWWWRoot\Groups\<Pfad3>\<Pfad4>

Ordner3: Pfad für Datei 1 & Datei 2 (ohne Datum im Dateinamen):
\\webdav.<server>@SSL\DavWWWRoot\Groups\<Pfad5>\<Pfad6>


Was die Dateien tun sollen:

1. Bat-Datei für Mittags für den NÄCHSTEN Tag:

- Die Dateien "Datei1.pdf" und "Datei2.pdf" befinden sich auf dem Desktop

- Die Datei "Datei1.pdf" wird in "Datei1_tt-mm-jj.pdf"umbenannt (tt-mm-jj stellt dabei das Datum des NÄCHSTEN Tages dar, bspw. 03-09-20)
- Die Datei "Datei1_tt-mm-jj.pdf" wird nach [Ordner1, s.o.] verschoben
- Wenn die Datei in Ordner1 bereits existiert, wird sie vorher gelöscht bzw. ersetzt

- Die Datei "Datei2.pdf" wird in "Datei2_tt-mm-jj.pdf"umbenannt (tt-mm-jj stellt dabei das Datum des NÄCHSTEN Tages dar)
- Die Datei "Datei2_tt-mm-jj.pdf" wird nach [Ordner2), s.o.] verschoben
- Wenn die Datei in Ordner2 bereits existiert, wird sie vorher gelöscht bzw. ersetzt

2. Bat-Datei für Morgens für den AKTUELLEN Tag:

- Die Dateien "Datei1.pdf" und "Datei2.pdf" befinden sich auf dem Desktop
- Beide Dateien werden nach [Ordner3, s.o.] verschoben
- Die vorhandenen Dateien werden vorher gelöscht bzw. ersetzt

- Die Datei "Datei1.pdf" wird in "Datei1_tt-mm-jj.pdf"umbenannt (tt-mm-jj stellt dabei das Datum des AKTUELLEN Tages dar)
- Die Datei "Datei1_tt-mm-jj.pdf" wird nach [Ordner1, s.o.] verschoben
- Die vorhandene Datei mit gleichem Namen (die, die gestern mit dem obigen Algorithmus erstellt wurde) wird vorher gelöscht bzw. ersetzt

- Die Datei "Datei2.pdf" wird in "Datei2_tt-mm-jj.pdf"umbenannt (tt-mm-jj stellt dabei das Datum des AKTUELLEN Tages dar)
- Die Datei "Datei2_tt-mm-jj.pdf" wird nach [Ordner2, s.o.] verschoben
- Die vorhandene Datei wird vorher gelöscht bzw. ersetzt

****************

Ergibt das Sinn?

Ich würde mich sehr freuen, wenn ihr mir Tipps zur Automatisierung dieses Tasks geben könntet.

Liebe Grüße
fil
0

Anzeige



#2 Mitglied ist offline   thielemann03 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.704
  • Beigetreten: 28. Januar 19
  • Reputation: 205
  • Geschlecht:Männlich
  • Wohnort:Marksuhl
  • Interessen:Garten, Simson Vogelserie, CAD, Kaninchenzucht(rheinische Schecken)

geschrieben 02. September 2020 - 15:31

nein, sieht nach Unsinnig aus
Niemand ist so gut, wie ich sein könnte.
0

#3 Mitglied ist offline   fil3000 

geschrieben 03. September 2020 - 14:44

Sehr konstruktiv, vielen Dank.
0

#4 Mitglied ist offline   thielemann03 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.704
  • Beigetreten: 28. Januar 19
  • Reputation: 205
  • Geschlecht:Männlich
  • Wohnort:Marksuhl
  • Interessen:Garten, Simson Vogelserie, CAD, Kaninchenzucht(rheinische Schecken)

geschrieben 03. September 2020 - 17:58

Wollte dir nicht auf den Schlips treten! Wenn man was archivieren will, dann macht man das aber kontinuierlich und ersetzt nicht täglich die Datei oder?
Niemand ist so gut, wie ich sein könnte.
0

#5 Mitglied ist offline   fil3000 

geschrieben 04. September 2020 - 06:20

Schon okay, danke.

Es handelt sich tatsächlich um einen Personalplan, in dem jeden Tag aufgrund von Einsätzen und Krankheitsfällen Änderungen auftreten.

LG
fil
0

#6 Mitglied ist offline   crashed 

  • Gruppe: aktive Mitglieder
  • Beiträge: 162
  • Beigetreten: 24. November 19
  • Reputation: 46
  • Geschlecht:Männlich

geschrieben 10. September 2020 - 14:47

Hallo fil3000,

vermutlich ist das Hauptproblem die Berechnung und Formatierung der Daten?!

Hier eine Lösung als reine Batch-Datei { :: Calculate tomorrow's date } :
https://www.robvande...t.php#Yesterday

..und hier könnte auch was brauchbares dabei sein:
https://www.it-swarm...pel/1040666020/

Falls es etwas moderner sein soll (Powershell), vielleicht das hier:
https://stackoverrun.com/de/q/11064802


Eine Konvertierung des Datums mittels VBS (DateAdd) sollte auch recht einfach sein - das Resultat könnte man dann als Umgebungsvariable setzen und in der Batch-Datei weiterverarbeiten.

Meine Umsetzung sieht in etwa so aus, wie in der angetackerten (Beta-Version!) Zip-Datei:

Angehängte Datei  heutemorgen.zip (890bytes)
Anzahl der Downloads: 52

Und falls es mir Cloudflare erlaubt, auch hier:

1.bat
@echo off

cscript .\heutemorgen.vbs

echo Datum von Heute : %AlignedDatumHeute%
echo Datum von Morgen: %AlignedDatumMorgen%

timeout /T 2


:cleanup
rem setx AlignedDatumHeute ""
rem setx AlignedDatumMorgen ""
set AlignedDatumHeute=
set AlignedDatumMorgen=



heutemorgen.vbs:
REM :: 20200910 Berlin/Tempelhof ::

Set objCMD = CreateObject("WScript.Shell")

REM Variablen im System-Kontext
''Set objEnvironment = objCMD.Environment("SYSTEM")

REM Variablen im User-Kontext
Set objEnvironment = objCMD.Environment("USER")

objEnvironment("AlignedDatumHeute") = TimeStampEx(0)
objEnvironment("AlignedDatumMorgen") = TimeStampEx(1)

WScript.Echo "AlignedDatumHeute: " & objEnvironment("AlignedDatumHeute")
WScript.Echo "AlignedDatumMorgen: " & objEnvironment("AlignedDatumMorgen")

Set objCMD = Nothing
Set objEnvironment = Nothing


Function TimeStampEx(Offset) ' rem Formatierung "tt-mm-jj" '
  Dim t
  
  t = DateAdd("d", Offset, now()) ' Morgen '

  TimeStampEx = _
	Right("0" & Day(t), 2) & _
	"-" & Right("0" & Month(t), 2)  & _
	"-" & Right(Year(t), 2)

End Function



Für die Umgebungsvariablen im Systemkontext (Also Systemweit und persistent):
@heutemorgen.vbs: Set objEnvironment = objCMD.Environment("SYSTEM")
@1.bat: setx

Für die Umgebungsvariablen im Userkontext (Also nur in der aktuellen Session und volatil):
@heutemorgen.vbs: Set objEnvironment = objCMD.Environment("USER")
@1.bat: set
und das jeweils andere auskommentieren. Derzeit ist es für den User-Kontext eingestellt.

Der Rest - also die Dateioperationen - sollte ja als Batch-Datei relativ einfach zu codieren sein, oder gibt es da Fragen?!

Gruß,
crashed
0

#7 Mitglied ist offline   crashed 

  • Gruppe: aktive Mitglieder
  • Beiträge: 162
  • Beigetreten: 24. November 19
  • Reputation: 46
  • Geschlecht:Männlich

geschrieben 10. September 2020 - 22:00

PS.: Noch ein paar Tipps:

Meine grundsätzliche Vorgehensweise ist zielorientiert - wobei ich ggf. versuche, alle relevanten Fehlermöglichkeiten zu berücksichtigen (was aber letztendlich die meiste Entwicklungszeit kostet).

Der Ablauf scheint von dir bereits relativ gut durchdacht zu sein, somit ist die Batchdatei recht einfach zu realisieren (auch wenn ich einige Details nicht so ganz nachvollziehen kann).

Also, einfach jenes in der Batch-Sprache schreiben, welches man - in genau der Reihenfolge - auch "tun" würde.

Eine Batchdatei ist ja nichts anderes, als eine Liste von Befehlen, welche nacheinander - ebendiese - ausführt.

Ein paar relevante Befehle an dieser Stelle:

Umbenennen - ren /?
Löschen - del /?
Verschieben - move /?
Kopieren - copy /? sowie xcopy /?
Existenz - if exist

Eine Beispiel-Batchdatei für das Kopieren der Datei1 von deinem Desktop auf den WebDav-Server1 und gleichzeitige Umbenennen anhand des morgigen Datums hab ich mal mit in die Zip-Datei gelegt (cpy_to_webdav1.bat).

Angehängte Datei  20200910.zip (977,28K)
Anzahl der Downloads: 105

(Hoffe, Cloudflare stresst jetzt nicht schonwieder.)

PPS.:
Falls COPY / XCOPY komische Fehler bringt, dann am besten mit den Parametern (force overwrite) rumspielen, bis es passt:
https://serverfault....not-empty-error

PPPS.:
Einen ganz brauchbaren Editor mit Syntaxhighlighting für Batchdateien hab ich auch mal in die Zip-Datei gepackt (R134), Quelle ist:
https://github.com/ProgerXP/Notepad2e
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0