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
GELÖST

geändert am Datum einer Datei in Dateinamen aufnehmen

Frage Entwicklung Batch & Shell

Mitglied: lulli1

lulli1 (Level 1) - Jetzt verbinden

28.04.2008, aktualisiert 29.04.2008, 5436 Aufrufe, 12 Kommentare

Hallo zusammen,
habe in einem Beitrag hier folgende von mir leicht abgewandelte batch gefunden.
Wenn man per Maus Dateien auf diesen batch zieht und loslässt, wird das aktuelle Datum in den Dateinamen übernommen und vor den alten Dateinamen gesetzt.
Wie bekomme ich denn auf dem selben Weg das "geändert am" Datum der Datei statt dem aktuellen Datum vor den Dateinamen?
Wie muss der Batch aussehen damit das klappt?
Danke für Eure Hilfe!!!

Grüße lulli1

:: *STARTDatum_in_Dateiname.bat
@ECHO OFF

FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%d%%c"-"%%b"-"%%a"_"
@echo %cdate%

:start
ren %1 "%cdate%%~n1%~x1"

if exist %2 goto weiter
goto EOF

:weiter
shift
goto start

:EOF
:: *STOP
Mitglied: bastla
28.04.2008 um 16:04 Uhr
Hallo lulli1 und willkommen im Forum!

Versuch es damit:
01.
:: *AenderungsDatum_in_Dateiname.bat 
02.
@echo off & setlocal 
03.
 
04.
for %%i in (%1) do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do set "CDATE=%%c-%%b-%%a" 
05.
@echo %cdate% 
06.
 
07.
:start 
08.
ren %1 "%cdate%_%~nx1%" 
09.
 
10.
if "%~2"=="" goto :eof 
11.
if not exist %2 goto :eof 
12.
 
13.
shift 
14.
goto :start
Dieser Batch ist, so wie auch die von Dir gespostete Version, auf die Verarbeitung von mehreren übergebenen Dateien/Ordnern ausgelegt.

Grüße
bastla
Bitte warten ..
Mitglied: lulli1
28.04.2008 um 16:54 Uhr
Hallo bastla,

genial !!!!! Funktioniert tadellos. Vielen Dank!!!!
Interessehalber:
Wie müsst das Script denn ausschauen, wenn man alle Dateien eines bestimmten Ordners, z.B. "C:\Test" automatisch mit dem Batch umbenennen will ohne diese erst auf den Batch zu ziehen?

Bei Euch kann man ne Menge lernen!

Gruß lulli1
Bitte warten ..
Mitglied: 60730
28.04.2008 um 17:08 Uhr
Wie müsst das Script denn ausschauen, wenn man alle Dateien eines bestimmten
Ordners, z.B. "C:\Test" automatisch mit dem Batch umbenennen will ohne diese erst auf den Batch zu ziehen?

Hi,

wenn du "name_der_batch" leerzeichen "Pfad&Ordner" - also c:\test- in eine andere Textdatei schreibst und diese als Batch .cmd oder .bat abspeicherst, mußt du an der Batch vom Bastla nichts mehr ändern
Bitte warten ..
Mitglied: bastla
28.04.2008 um 17:19 Uhr
@TimoBeil
Nicht ganz - damit würde nur der Ordner selbst umbenannt ...

@lulli1
Sollte etwa so gehen:
01.
:: *AenderungsDatum_aller_Dateien_in_Dateiname.bat 
02.
@echo off & setlocal 
03.
if not exist "%~1\" goto :eof 
04.
pushd %1 
05.
for /f "delims=" %%i in ('dir /b /a-d') do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do ren "%%i" "%%c-%%b-%%a_%%~nxi" 
06.
popd
Mit dieser Version werden alle Dateien, nicht aber Unterordner, des übergebenen Ordners umbenannt.

Grüße
bastla
Bitte warten ..
Mitglied: lulli1
28.04.2008 um 17:36 Uhr
...Klasse bastla,

geht! Vielen Dank!

Gruß lulli1
Bitte warten ..
Mitglied: Biber
28.04.2008 um 17:48 Uhr
Na ja, lulli1,

trotz aller Euphorie und trotz der gewohnten handwerklichen Perfektion von bastlas Lösung....

Nu' lass es uns erst mal in Gedanken durchspielen, ob das wirklich so nobelpreisverdächtig ist, was wir bis jetzt als den Plan kennen.

Wenn Du den Umbenenn/Änderungsstempelbatch tatsächlich nutzt bei Änderungen und Deine KrimsKramsNotizen.txt ist dabei, dann passiert innerhalb von drei Tagen folgendes:

  • Aus KrimsKramsNotizen.txt wird am 28.04.2008 um 18h ---> 2008-04-28_KrimsKramsNotizen.txt
  • Morgen wird daraus 2008-04-29_2008-04-28_KrimsKramsNotizen.txt, und zwar morgens um 14h.
  • und nachmittags stempelst Du nochmal das ganze Verzeichnis um 23h ---> 2008-04-29__2008-04-29_2008-04-28_KrimsKramsNotizen.txt

Ich denke, so nach 7 oder 8 Monaten des Änderungs-Stempelns werden die Dateinamen zur Hälfte bei Deinen Nachbarn zur Rechten über den Frühstückstisch hängen.

Wollen wir nicht "den Plan" (Version 0.01) nochmal öffentlich diskutieren/optimieren?

Grüße
Biber
Bitte warten ..
Mitglied: lulli1
28.04.2008 um 18:01 Uhr
ok, ok...
ist korrekt was biber schreibt. Merke gerade selbst die .bat, die ja in dem Ordner liegen muss, wird umbenannt und immer länger.
Der Batch müsste einen zugewiesenen Ordner anfahren und dann prüfen ob die Datei bereits mit einem Datumsschema beginnt und wenn nicht, dann loslegen. Sonst diese Datei überspringen....

Das ist vermutlich nicht umzusetzten, oder?
Dennoch zum lernen war der Beitrag von bastla klasse...

lulli1
Bitte warten ..
Mitglied: bastla
28.04.2008 um 19:20 Uhr
Hallo lulli1!

... die .bat, die ja in dem Ordner liegen muss ...
Diese Notwendigkeit besteht eigentlich nicht - eine Verknüpfung auf dem Desktop oder in einem anderen Ordner (zB "%userprofile%\SendTo" würde sich anbieten) sollte es doch auch tun - aber zur Sicherheit kann ja die Batchdatei selbst von der Umbenennung ausgenommen werden (siehe unten).

... prüfen ob die Datei bereits mit einem Datumsschema beginnt ...
... ginge mit "findstr" - zusammen mit der "Selbstkontrolle" etwa so:
01.
@echo off & setlocal 
02.
if not exist "%~1\" goto :eof 
03.
pushd %1 
04.
for /f "delims=" %%i in ('dir /b /a-d^|findstr /v "^20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]_"') do ( 
05.
	if /i "%%i" neq "%~0" for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do ren "%%i" "%%c-%%b-%%a_%%~nxi" 
06.
07.
popd
Damit die eine Zeile nicht gar so lang ist, habe ich sie ein wenig aufgeteilt.

Bliebe noch die Frage offen, was mit einer "blabla.txt" passieren soll, von der es bereits eine vom selben Tag stammende Version, zB "2008-04-28_blabla.txt", gibt - diese kann natürlich nicht umbenannt werden ...

Grüße
bastla

P.S.: Der Suchbegriff mit "^20[0-9]" ist zugegeben recht optimistisch angelegt ...
Bitte warten ..
Mitglied: Biber
28.04.2008 um 19:31 Uhr
@bastla
diese kann natürlich nicht umbenannt werden ...
... da sie aber schon durch das "FindStr /v .." von allen Veranstaltungen ausgeschlossen wird, ist die Frage eher ein zweitrangiges Problem.
Und den Batch selbst kann lulli1 jetzt auch unter einem leicht zu merkenden Namen im selben Verzeichnis lassen, z.B. als 2069-69-69_Stempler.bat...

Grüße
Biber

[Edit] Ach, doch nicht... die Suchmaske ist zu restriktiv.. aber 2000-08-15_batch ginge..[/Edit]
Bitte warten ..
Mitglied: bastla
28.04.2008 um 20:30 Uhr
@Biber

... da sie aber schon durch das "FindStr /v .." von allen Veranstaltungen ausgeschlossen wird ...
Wird sie nicht - gemeint war die erstere, und diese heißt ja bisher (und auch weiterhin, wenn eine Datei mit dem vorgesehenen neuen Namen bereits vorhanden ist) nur "blabla.txt".

Und den Batch selbst kann lulli1 jetzt auch unter einem leicht zu merkenden Namen im selben Verzeichnis lassen, z.B. als 2069-69-69_Stempler.bat...
Hatte ich mir auch überlegt (wenngleich mit leicht abweichendem Datum ) - allerdings wäre der Batch (wenn schon nicht auf dem Desktop) eine Ebene höher für das geplante "Draggen und dann Droppen" des Ordners ohnehin besser platziert ...

Grüße
bastla
Bitte warten ..
Mitglied: lulli1
29.04.2008 um 09:58 Uhr
...dank Euch erstmal für den Input.
hab die .bat nun in den send to ordner gepackt und das klappt auch.

Verstehe aber den Inhalt der batch nun nicht mehr. Zu hoch!

Kann mir da mal jemand Schritt für Schritt durchhelfen? Will sowas ja gerne auch mal ohne fremde Hilfe können. Würd mich freuen...
Bitte warten ..
Mitglied: bastla
29.04.2008 um 11:50 Uhr
Hallo lulli1!

Kann mir da mal jemand Schritt für Schritt durchhelfen?
Na dann geh'n wir mal los ...
01.
@echo off & setlocal 
02.
 
03.
::Falls der übergebene Ordner nicht existiert (bei Drag & Drop eher auszuschließen), Batch beenden 
04.
if not exist "%~1\" goto :eof 
05.
 
06.
::Vorübergehend in den Ordner wechseln - erspart die Berücksichtigung von Pfaden 
07.
pushd %1 
08.
 
09.
::Es sollen nur Dateien bearbeitet werden, daher eine Auflistung mit "dir /b /a-d" erzeugen, 
10.
::außerdem Dateinamen ausfiltern, die mit dem Suchmuster "20##-##-##_" beginnen, 
11.
::wobei, unter der Annahme eines gültigen Datums, jeweils nach "-" nur 0 oder 1 
12.
::(für die Monatszahl) bzw 0 bis 3 (für den Tag) berücksichtigt wird. 
13.
for /f "delims=" %%i in ('dir /b /a-d^|findstr /v "^20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]_"') do ( 
14.
 
15.
        ::Wenn der Dateiname nicht gleich dem Namen der Batchdatei ohne Berücksichtigung 
16.
        ::von Groß-/Kleinschreibung und ohne ev umschließende Anführungszeichen (daher 
17.
        ::anstelle von "%0" die Schreibweise "%~0") ist (die Batchdatei selbst soll ja nicht 
18.
        ::umbenannt werden), 
19.
 
20.
        ::Änderungsdatum auslesen und zerlegen sowie zum Umbenennen neu zusammensetzen 
21.
        ::(%%c = Jahr, %%b = Monat, %%a = Tag) und nach einem "_" den Namen und den Typ 
22.
        ::(die Extension) der Datei anfügen (anstelle von "%%~ni%%~xi" genügt "%%~nxi") 
23.
	if /i "%%i" neq "%~0" for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do ren "%%i" "%%c-%%b-%%a_%%~nxi" 
24.
25.
 
26.
::Zum ursprünglichen Ordner zurückkehren (das "pushd" rückgängig machen) 
27.
popd
Grüße
bastla
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 ...

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 ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...