Zum Inhalt wechseln


Foto

Batch: Dateinamen umbenennen und Erstellungsdatum hinzufügen


  • Bitte melde dich an um zu Antworten
15 Antworten in diesem Thema

#1 Barchie

Barchie

    Newbie

  • 6 Beiträge

 

Geschrieben 27. Januar 2017 - 15:38

Hallo,

 

ich habe einen Ordner mit mehreren Dateien.

Ich möchte alle Dateien "test.msg" im Ordner auf einmal umbenennen in "Datum_Zeit_test.msg" und dabei das Datum und die Zeit von der Erstellung der Datei nehmen.

@echo off &setlocal 
for /f "tokens=1-3*" %%i in ('dir /a-d /tc "E:\Test\*"^|findstr /vbc:" "') do ( 
  set "fdate=%%i" 
  set "ftime=%%j" 
  set "fname=%%l" 
  setlocal EnableDelayedExpansion 
    echo !fdate!_!ftime!_!fname!
    echo -------------------------------------------- 
  endlocal 
)
pause

Ich habe schon das er mir das als echo ausgibt aber ich möchte das die Dateien umbenannt werden.

 


#2 lefg

lefg

    Expert Member

  • 20.476 Beiträge

 

Geschrieben 27. Januar 2017 - 15:44

Moin,

 

Umbenennen von Dateien kann mit dem Befehl Rename (ren) und Parameter geschehen. Siehe ren /?


Bearbeitet von lefg, 27. Januar 2017 - 15:45.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#3 Barchie

Barchie

    Newbie

  • 6 Beiträge

 

Geschrieben 27. Januar 2017 - 16:19

Moin,

 

Umbenennen von Dateien kann mit dem Befehl Rename (ren) und Parameter geschehen. Siehe ren /?

 

Sorry da wäre ich ja nie im Leben drauf gekommen. *Ironie*

Natürlich habe ich das schon ausprobiert und auch in vielen Varianten aber beim mir kommt immer der Fehler, das er die Datei nicht finden kann. Ich will doch aber nur genau diese nehmen die er dann auch anzeigt.



#4 testperson

testperson

    Board Veteran

  • 4.510 Beiträge

 

Geschrieben 27. Januar 2017 - 16:24

Hi,

 

muss es Batch sein? Wieso nicht PowerShell?

 

Gruß

Jan


Good morning, that's a nice TNETENNBA!

#5 Barchie

Barchie

    Newbie

  • 6 Beiträge

 

Geschrieben 27. Januar 2017 - 16:55

Hi,

 

muss es Batch sein? Wieso nicht PowerShell?

 

Gruß

Jan

 

Hätte ich auch gerne gemacht aber das soll ein Nutzer ausführen dürfen.



#6 testperson

testperson

    Board Veteran

  • 4.510 Beiträge

 

Geschrieben 27. Januar 2017 - 16:57

Was hindert den Nutzer an der Ausführung eines PowerShell Scriptes?

 

Und warum soll ein Script manuel ausgeführt werden? Wenn du schon scriptest, kannst du es auch als Aufgabe planen o.ä..


Good morning, that's a nice TNETENNBA!

#7 massaraksch

massaraksch

    Newbie

  • 152 Beiträge

 

Geschrieben 29. Januar 2017 - 21:28

Hi,

 

mit Powershell wäre das ungefähr so:

(gci -Path "E:\Test" -Filter *.msg) | foreach { rni $_.FullName ($_.LastWriteTime.ToString("yyyy-MM-dd_HH-mm-ss") + "_" + $_.Name) -whatif }

Kurzerläuterung:

 

gci -> get-childitem

rni -> rename-item

whatif -> Parameter zum Testen des Befehls (es wird nur Ergebnis angezeigt, noch nichts umbenannt) -> weglassen für die wirkliche Ausführung

 

LastWriteTime -> Letzte Änderung (möglich wäre auch CreationTime)

Bedeutung dieser unterschiedl. Zeiten beachten!

 

Beispielzeitformat (sollte sich logisch erschließen) -> "yyyy-MM-dd_HH-mm-ss"

 

Ergebnis:

Blabla Foo.msg -> 2016-02-29_22-27-59_Blabla Foo.msg

 

PS:

Der Fehler bei Umbenennung ist sehr wahrscheinlich die ausgewertete Zeit (Doppelpunkte!) -> solche Namen mögen FAT/NTFS nicht.

DOS/CMD-Batches sind überhaupt ein Fehler, jedenfalls bei solchen Manipulationen ;)


Bearbeitet von massaraksch, 29. Januar 2017 - 21:31.

mfg, massaraksch

#8 lefg

lefg

    Expert Member

  • 20.476 Beiträge

 

Geschrieben 29. Januar 2017 - 22:43

 

Natürlich habe ich das schon ausprobiert und auch in vielen Varianten aber beim mir kommt immer der Fehler, das er die Datei nicht finden kann. Ich will doch aber nur genau diese nehmen die er dann auch anzeigt.

 

Ich vermute am Ende der Zeichenkette ein Leerzeichen


Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#9 Barchie

Barchie

    Newbie

  • 6 Beiträge

 

Geschrieben 30. Januar 2017 - 07:50

Ich vermute am Ende der Zeichenkette ein Leerzeichen

 

Nein


Hi,

 

mit Powershell wäre das ungefähr so:

(gci -Path "E:\Test" -Filter *.msg) | foreach { rni $_.FullName ($_.LastWriteTime.ToString("yyyy-MM-dd_HH-mm-ss") + "_" + $_.Name) -whatif }

Kurzerläuterung:

 

gci -> get-childitem

rni -> rename-item

whatif -> Parameter zum Testen des Befehls (es wird nur Ergebnis angezeigt, noch nichts umbenannt) -> weglassen für die wirkliche Ausführung

 

LastWriteTime -> Letzte Änderung (möglich wäre auch CreationTime)

Bedeutung dieser unterschiedl. Zeiten beachten!

 

Beispielzeitformat (sollte sich logisch erschließen) -> "yyyy-MM-dd_HH-mm-ss"

 

Ergebnis:

Blabla Foo.msg -> 2016-02-29_22-27-59_Blabla Foo.msg

 

PS:

Der Fehler bei Umbenennung ist sehr wahrscheinlich die ausgewertete Zeit (Doppelpunkte!) -> solche Namen mögen FAT/NTFS nicht.

DOS/CMD-Batches sind überhaupt ein Fehler, jedenfalls bei solchen Manipulationen ;)

 

Danke Dir :)


Was hindert den Nutzer an der Ausführung eines PowerShell Scriptes?

 

Und warum soll ein Script manuel ausgeführt werden? Wenn du schon scriptest, kannst du es auch als Aufgabe planen o.ä..

 

Das ist ein Firmenrechner und er darf Powershell öffnen aber darf keine Scripte ausführen, weil das nicht gewollt ist.

Das Script soll manuell ausgeführt werden, weil die Nutzerin dies immer wieder braucht und ich ihr nur helfen will.


Bearbeitet von Barchie, 30. Januar 2017 - 05:40.


#10 BOfH_666

BOfH_666

    Junior Member

  • 132 Beiträge

 

Geschrieben 30. Januar 2017 - 08:50

Das ist ein Firmenrechner und er darf Powershell öffnen aber darf keine Scripte ausführen, weil das nicht gewollt ist.

Das Script soll manuell ausgeführt werden, weil die Nutzerin dies immer wieder braucht und ich ihr nur helfen will.

 

Wenn es in dem Fall nur im die ExecutionPolicy geht - so lange das nicht durch andere Mechanismen verhindert wird, kannst Du ihr eine Verknüpfung auf das von Dir erstellte Powershell-Script ins Startmenü oder sonstwohin packen und die Powershell mit der Option "-ExecutionPolicy Bypass" aufrufen. 


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#11 massaraksch

massaraksch

    Newbie

  • 152 Beiträge

 

Geschrieben 30. Januar 2017 - 21:25

Hi,

 

hier mal ein CMD-Batch-Versuch. Puh, lange her solche SET-Frickeleien...

(etwas anderer Ansatz ohne DIR usw.)

@echo off
for %%i in ("E:\Test\*.msg") do (
set fdate=%%~ti
set fname=%%~nxi
set fullname=%%~fi
setlocal EnableDelayedExpansion
set datum=!fdate:~0,10!
set stunde=!fdate:~-5,2!
set minute=!fdate:~-2!
rem Testanzeige
echo ren "!fullname!" "!datum!_!stunde!-!minute!_!fname!"
)

Genaue Erläuterung spar ich mir jetzt mal... Findet man im Netz.

Nur soviel: Habe die Dateizeit wegen des nicht erlaubten Doppelpunkts "auseinandergenommen" und mit Bindestrich versehen.


Bearbeitet von massaraksch, 30. Januar 2017 - 21:31.

mfg, massaraksch

#12 MurdocX

MurdocX

    Board Veteran

  • 546 Beiträge

 

Geschrieben 31. Januar 2017 - 07:39

Falls es auch Powershell sein darf, kannst du dieses Skript nutzen: 

 
Suchen & Umbenennen von Dateinamen mit Powershell

http://www.it-explor...mit-powershell/


Mit freundlicher Unterstützung
Jan


#13 Barchie

Barchie

    Newbie

  • 6 Beiträge

 

Geschrieben 31. Januar 2017 - 11:27

Wenn es in dem Fall nur im die ExecutionPolicy geht - so lange das nicht durch andere Mechanismen verhindert wird, kannst Du ihr eine Verknüpfung auf das von Dir erstellte Powershell-Script ins Startmenü oder sonstwohin packen und die Powershell mit der Option "-ExecutionPolicy Bypass" aufrufen. 

 

Das geht leider auch nicht weil die Nutzer nicht in die Registry schreiben dürfen.


Hi,

 

hier mal ein CMD-Batch-Versuch. Puh, lange her solche SET-Frickeleien...

(etwas anderer Ansatz ohne DIR usw.)

@echo off
for %%i in ("E:\Test\*.msg") do (
set fdate=%%~ti
set fname=%%~nxi
set fullname=%%~fi
setlocal EnableDelayedExpansion
set datum=!fdate:~0,10!
set stunde=!fdate:~-5,2!
set minute=!fdate:~-2!
rem Testanzeige
echo ren "!fullname!" "!datum!_!stunde!-!minute!_!fname!"
)

Genaue Erläuterung spar ich mir jetzt mal... Findet man im Netz.

Nur soviel: Habe die Dateizeit wegen des nicht erlaubten Doppelpunkts "auseinandergenommen" und mit Bindestrich versehen.

 

danke dir und habe ich probiert aber dann nennt er die datei "!datum!_!stunde!-!minute!_!fname!" und auch ohne erweiterung msg.

 

ich habe es so probiert aber dann sagt er, das es die datei schon gibt.

 

@echo off &setlocal
for /f "tokens=1-3*" %%i in ('dir /a-d /tc "D:\Test\*"^|findstr /vbc:" "') do (
  set "fdate=%%i"
  set "ttime=%%j"
  set "ftime=%ttime:~0,2%.%ttime:~3,2%"
  set "fname=%%l"
    ren "D:\Test\%%l" "!fdate!_!ftime!_!fname!"
)
pause

Bearbeitet von Barchie, 31. Januar 2017 - 11:29.


#14 lefg

lefg

    Expert Member

  • 20.476 Beiträge

 

Geschrieben 31. Januar 2017 - 11:34

Zeige dir die Parameter doch einmal zusaätzlich mit echo an!


Bearbeitet von lefg, 31. Januar 2017 - 12:24.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#15 massaraksch

massaraksch

    Newbie

  • 152 Beiträge

 

Geschrieben 31. Januar 2017 - 12:07

Hm, bei mir ging es korrekt (allerdings mit wenigen Testdateien und nicht allzu langen Namen)...

 

Ergänze mal ein "endlocal":

@echo off
for %%i in ("C:\Test\*.msg") do (
set fdate=%%~ti
set fname=%%~nxi
set fullname=%%~fi
setlocal EnableDelayedExpansion
set datum=!fdate:~0,10!
set stunde=!fdate:~-5,2!
set minute=!fdate:~-2!
rem Testanzeige
ren "!fullname!" "!datum!_!stunde!-!minute!_!fname!"
endlocal
)

mfg, massaraksch