m.fessler
Goto Top

Ordner umbennen mit Datum in Ordnernamen

Hallo,

eigentlich nichts besonders, aber ich bekomme es nicht hin. face-sad
Habe einen Ordner der zB. "Z:\datenstand_2011-04-14" heißt.
Dieser soll nun umbenannt werden mit dem heutigen Datum - also "Z:\datenstand_2011-05-29".

Wie geht das am einfachsten?

Danke sehr,
Grüße

Martin
Kommentar vom Moderator Biber am May 30, 2011 um 04:30:04 Uhr
Ordner umbennen mit Datum in Ordnernamen
Set /a rgc+=1
#760

Content-Key: 167143

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

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

Mitglied: 60730
60730 May 29, 2011 at 22:08:35 (UTC)
Goto Top
Moin,

Ordner umbennen mit Datum in Ordnernamen

da hast du Glück, sowohl für das umbennen, als auch für Datumsformate haben wir unseren Biber.
Biber hat auch ein (das) Tutorial zum Thema Batch und Datum geschrieben.
Les es dir durch.

Gruß
Member: Friemler
Friemler May 29, 2011 at 23:17:52 (UTC)
Goto Top
Hallo Martin,

um solche "Datumsfragen" beantworten zu können, müssen zuerst folgende Dinge geklärt werden:

  1. Ist diese Umbenennungsaktion einmalig oder soll das öfter/regelmäßig passieren?
  2. Soll das auf einer Maschine oder auf mehreren Maschinen durchgeführt werden?
  3. Bist Du der einzige, der Datumseinstellungen auf der/den Maschine(n) vornehmen kann?

Der Grund für diese Fragen ist: Es gibt viele mögliche Datumsformate auf Windowssystemen, abhängig von der Sprachversion und den Einstellungen auf den jeweiligen Systemen. Außerdem gibt es eine einfache/primitive und unsichere Methode, Datumswerte zu ermitteln (per Batch) und eine aufwändigere aber sicherere Methode (per VBS). Die einfache Version kann man nur bei einmaligen Aktionen oder für den Fall empfehlen, dass die Umbenennungsaktion nur auf einer Maschine, die von Dir kontrolliert wird, ausgeführt werden soll.

Die Batch-Methode funktioniert über das Zerlegen des Inhalts der Variablen %DATE%, wozu man deren vom Datumsformat abhängigen Aufbau kennen muss.

Wenn Du Dich über die Möglichkeiten in VBS schlau machen willst, starte mal diesen Download, eine CHM-Datei mit der Sprachreferenz von VBS und JScript.

Gruß
Friemler
Member: bastla
bastla May 30, 2011 at 06:25:01 (UTC)
Goto Top
@Friemler
eine aufwändigere aber sicherere Methode (per VBS)
Um den Aufwand auch gleich zu demonstrieren face-wink:
@echo off & setlocal
set G=%temp%\GetDateFormatted.vbs
>%G% echo D=DateAdd("d",WScript.Arguments(0),Date):WScript.Echo Year(D)^&"-"^&Right("0"^&Month(D),2)^&"-"^&Right("0"^&Day(D),2)  
for /f %%i in ('cscript //nologo %G% 0') do set "Datum=%%i"  
echo %Datum%
Die 0 in Zeile 4 steht für die Differenz in Tagen ab heute, womit auch gleich die immer wieder gern gestellte Frage nach dem Datum von gestern (-1) oder übermorgen (2) zu beantworten wäre ...

Grüße
bastla

P.S.: Bei http://www.dieseyer.de gab's vorhin auch noch die "de"-Version der "script56.chm" ...

[Edit] Zeile 4 korrigiert [/Edit]
Member: m.fessler
m.fessler May 30, 2011 at 10:27:02 (UTC)
Goto Top
Hallo,

@Friemler
1. Öfters
2. Einzige Maschine
3. Jap

@bastla
Da bekomme ich folgendes als Meldung: "C:\DOKUME~1\USER\LOKALE~1\Temp\GetDateFormatted.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Ungültiger Prozeduraufruf oder ungültiges Argument: 'DateAdd'"

Ginge es nicht auch so:

@echo off & setlocal
set datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%
set zielalt=datenstand_2011-04-14
set zielaltodatum=datenstand_

rename "Z:\%zielalt%" "%zielaltodatum%%datum%"  

Nur bräuchte ich statt der 3. Zeile eine Funktion die nachsieht wie der Ordner heißt. "dir /b z:"? Und diese dann eben als variabel setzt.
Und statt der 4. Zeile müsste er mir den Ordnernamen hernehmen und das Datum hinten - also alles nach dem underline (10 Stellen) wegschneiden.

Grüße
Martin
Member: bastla
bastla May 30, 2011 at 11:03:26 (UTC)
Goto Top
Hallo m.fessler!
Da bekomme ich folgendes als Meldung: "C:\DOKUME~1\USER\LOKALE~1\Temp\GetDateFormatted.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Ungültiger Prozeduraufruf oder ungültiges Argument: 'DateAdd'"
Nicht weiter verwunderlich - ich hatte zwar schon erklärt, was es mit der Null in Zeile 4 auf sich hätte, diese aber noch nicht eingetragen face-sad - ist jetzt oben korrigiert ...
Ginge es nicht auch so:
Hinsichtlich der Datumsermittlung: Natürlich, hatte ja Friemler oben angemerkt - VBS hat den Vorteil, nicht nur von den Datumseinstellungen, sondern auch von der Sprache des Systems unabhängig zu arbeiten (und den angesprochenen Zusatznutzen, sehr leicht auch ein Datum im Abstand einer vorgegebenen Anzahl von Tagen (zB -1 für "gestern") ermitteln zu können.

Dass in Deinem Ansatz für die Umbenennung eine zusätzliche Variable (für den konstanten Namensteil) sowie nur ein Teil des Pfades verwendet wird, finde ich etwas weniger schön - und würde das eher so anlegen (unter der Voraussetzung, dass der konstante Teil immer bis zum ersten "_" des Dateinamens reicht):
@echo off & setlocal
set "zielalt=Z:\datenstand_2011-04-14"  
set "datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%"  

for %%i in ("%zielalt%") do for /f "delims=_" %%a in ("%%~ni") do ren "%%i" "%%a_%datum%%%~xi"  
Grüße
bastla
Member: m.fessler
m.fessler May 30, 2011 at 11:49:34 (UTC)
Goto Top
Hallo bastla,

ok super, dann wäre ich nun bei:

@echo off & setlocal
set "datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%"  

for /f "delims=" %%i in ('dir /b "Z:\datenstand*"') do set "zielalt=%%i"  
for %%i in ("Z:\%zielalt%") do for /f "delims=_" %%a in ("%%~ni") do ren "%%i" "%%a_%datum%%%~xi"  

Oder lassen sich die Zeile 4+5 noch "verschmelzen"?
Wobei ich dann auch noch den letztendlichen Namen des Zielverzeichnis für Robocopy benötige.
Noch mal dir /b?

Grüße
Martin
Member: bastla
bastla May 30, 2011 at 11:57:52 (UTC)
Goto Top
Hallo m.fessler!

Etwa so (ungetestet):
for /f "delims=" %%i in ('dir /b "Z:\datenstand*"') do for /f "delims=_" %%a in ("%%~ni") do ren "Z:\%%i" "%%a_%datum%%%~xi"
wobei die oben von mir verwendete "for"-Schleife ohne "/f" den Vorteil hat, vollständige Pfade (und nicht nur Dateinamen) zu liefern - daher muss dann beim "ren" der Pfad ("Z:\") nicht zusätzlich angegeben werden.

Grüße
bastla
Member: m.fessler
m.fessler May 30, 2011 at 12:27:56 (UTC)
Goto Top
Hallo bastla,

funktioniert pefekt - DANKE!

Dann wäre ich also bei:

@echo off & setlocal
set "datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%"  

for /f "delims=" %%i in ('dir /b "Z:\datenstand*"') do for /f "delims=_" %%a in ("%%~ni") do (  
	ren "Z:\%%i" "%%a_%datum%%%~xi"  
	set "neuesziel="Z:\%%a_%datum%%%~xi""  
)

echo %neuesziel%

Zitat von @bastla:
wobei die oben von mir verwendete "for"-Schleife ohne "/f" den Vorteil hat, vollständige Pfade
(und nicht nur Dateinamen) zu liefern - daher muss dann beim "ren" der Pfad ("Z:\") nicht zusätzlich
angegeben werden.
Damit werde ich also wohl leben müssen? Kein Problem.

Grüße
Martin
Member: bastla
bastla May 30, 2011 at 12:35:14 (UTC)
Goto Top
Hallo m.fessler!
Damit werde ich also wohl leben müssen?
Keineswegs - Du kannst ja in meinem Ansatz oben
set "zielalt=Z:\datenstand_*"
verwenden oder, weniger übersichtlich, auch unmittelbar in Zeile 5 die entsprechende Suchmaske angeben:
for %%i in ("Z:\datenstand_*") do for /f "delims=_" %%a in ("%%~ni") do (
Grüße
bastla
Member: m.fessler
m.fessler May 30, 2011 at 13:50:24 (UTC)
Goto Top
Zitat von @bastla:
Hallo m.fessler!
> Damit werde ich also wohl leben müssen?
Keineswegs - Du kannst ja in meinem Ansatz oben
set "zielalt=Z:\datenstand_*"
verwenden
So?

@echo off & setlocal
set "zielalt=Z:\datenstand_"   
set "datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%"  

for /f "delims=" %%i in ('dir /b "%zielalt%*"') do for /f "delims=_" %%a in ("%%~ni") do (  
	ren "%zielalt:~0,3%%%i" "%%a_%datum%%%~xi"   
	set "neuesziel="%zielalt%%datum%%%~xi""  
)

echo %neuesziel%

Zitat von @bastla:
oder, weniger übersichtlich, auch unmittelbar in Zeile 5 die entsprechende Suchmaske angeben:
for %%i in ("Z:\datenstand_*") do for /f "delims=_" %%a in ("%%~ni") do (
Du meinst Zeile 4 oder? Funktioniert bei mir nicht wirklich - egal obiges funktioniert.

Grüße
Martin
Member: bastla
bastla May 30, 2011 at 18:11:48 (UTC)
Goto Top
Hallo m.fessler!
Du meinst Zeile 4 oder?
Ich meinte Zeile 5 in meinem Batch-Ansatz - und inzwischen auch bei Deiner Fassung ... face-wink

Wenn Du übrigens meinen Vorschlag für die Zeile 2 mit dem von Dir Geposteten (beides im Kommentar gleich oberhalb) vergleichst, dürftest Du einen kleinen, aber wesentlichen Unterschied finden ...

Grüße
bastla
Member: m.fessler
m.fessler May 30, 2011 at 18:50:17 (UTC)
Goto Top
Hallo bastla,

meinst du das Asterisk als Wildcard?
Das musste ich weglassen weil sonst das zusammensetzen beim rename und bei set "neuesziel=" nicht mehr funktioniert.
Aber so funktioniert es prächtig.
Ok beim rename extra den Laufwerksbuchstaben "rausschneiden" (ren "%zielalt:~0,3%....)sieht etwas "unübersichtlich" aus, aber es läuft.

Danke noch mal!

Grüße
Martin
Member: bastla
bastla May 30, 2011 at 18:54:22 (UTC)
Goto Top
Hallo m.fessler!
meinst du das Asterisk als Wildcard?
Das musste ich weglassen weil sonst das zusammensetzen beim rename und bei set "neuesziel=" nicht mehr funktioniert.
Deswegen wird die eigentliche Verarbeitung (vor allem Zerlegung) bei meinem Vorschlag auch anders realisisert ...

... aber wenn's so für Dich passt, soll's mir auch recht sein ... face-smile

Grüße
bastla
Member: m.fessler
m.fessler May 30, 2011 at 19:56:00 (UTC)
Goto Top
Bastla, ich steh auf dem Schlauch. face-smile
Welcher der Vorschläge meinst du genau?

Aber falls die Lösung von "30.05.2011, 15:50:24 Uhr" für dich "optisch" auch ok erscheint dann belassen wir es dabei.
Es funktioniert einmal prächtig und das ist die Hauptsache.

Grüße
Martin
Member: bastla
bastla May 30, 2011 at 20:35:47 (UTC)
Goto Top
Hallo m.fessler!

Meine (ungeteste) angepasste Version würde so aussehen:
@echo off & setlocal
set "zielalt=Z:\datenstand_*"  
set "datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%"  

for %%i in ("%zielalt%") do for /f "delims=_" %%a in ("%%~ni") do ren "%%i" "%%a_%datum%%%~xi" & set "neuesziel=%%~dpi%%a_%datum%%%~xi"  
echo %neuesziel%
Aber falls die Lösung von "30.05.2011, 15:50:24 Uhr" für dich "optisch" auch ok erscheint dann belassen wir es dabei.
Sie ist, aufgrund der Tatsache, dass Du den Pfad (konkret "Z:\") durch Angabe der Zeichenanzahl ermittelst, weniger übersichtlich und änderungsfreundlich - aber nochmals: Du musst damit leben - und wenn Du das gut kannst, dann belasse es bei der Variante ...

Grüße
bastla

[Edit] Überzähliges Anführungszeichen in Zeile 5 entfernt [/Edit]
Member: m.fessler
m.fessler May 31, 2011 at 11:11:48 (UTC)
Goto Top
Hallo bastla,

Bekomme nur ein "ECHO ist ausgeschaltet (OFF)." zurück.
Jap hatte das "ungetestet" gelesen. face-smile

Auch wenn deine Variante schön kurz gewesen wär - ja ich kann mit meiner leben. face-smile

Noch mal danke und noch nen schönen Tag,
Grüße

Martin
Member: bastla
bastla May 31, 2011 at 12:06:34 (UTC)
Goto Top
Hallo m.fessler!
Auch wenn deine Variante schön kurz gewesen wär - ja ich kann mit meiner leben. face-smile
Unabhängig davon habe ich das überzählige Anführungszeichen in Zeile 5 entfernt ...

Grüße
bastla
Member: m.fessler
m.fessler May 31, 2011 at 15:29:00 (UTC)
Goto Top
Hallo bastla,

nö funktioniert trotzdem nicht.
Aber wie gesagt... egal. face-smile

Grüße
Martin
Member: bastla
bastla May 31, 2011 at 15:36:29 (UTC)
Goto Top
Hallo m.fessler!

Inzwischen habe ich meinen Ansatz erfolgreich getestet - ist zwar unerfreulich, dass Dir das nicht hilft, aber für diesen Thread ist nun wirklich die Zeit gekommen ... face-wink

Grüße
bastla
Member: Friemler
Friemler May 31, 2011 at 15:39:01 (UTC)
Goto Top
Zitat von @bastla:
aber für diesen Thread ist nun wirklich die Zeit gekommen

ich schließe mich dem an face-wink ...

Gruß
Friemler
Member: m.fessler
m.fessler May 31, 2011 at 19:00:03 (UTC)
Goto Top
Hallo bastla,

tja keine Ahnung warum es bei mir nicht läuft.
Aber ich hab auch noch eine Lösung gefunden - recht kurz und übersichtlich:

@echo off & setlocal
set "zielalt=Z:\datenstand_"  
set "datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%"  

for /f "tokens=1,2 delims=_" %%i in ('dir /b "%zielalt%*"') do ren "%zielalt%%%j" "%%i_%datum%" & set zielneu="%zielalt%%datum%"  

echo %zielneu%

Die nehme ich nun - somit hat es sich nun wirklich erledigt. face-smile

Danke,
Grüße
Martin