Barchie 0 Posted January 27, 2017 Report Share Posted January 27, 2017 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. Quote Link to comment
lefg 276 Posted January 27, 2017 Report Share Posted January 27, 2017 (edited) Moin, Umbenennen von Dateien kann mit dem Befehl Rename (ren) und Parameter geschehen. Siehe ren /? Edited January 27, 2017 by lefg Quote Link to comment
Barchie 0 Posted January 27, 2017 Author Report Share Posted January 27, 2017 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. Quote Link to comment
testperson 1,693 Posted January 27, 2017 Report Share Posted January 27, 2017 Hi, muss es Batch sein? Wieso nicht PowerShell? Gruß Jan Quote Link to comment
Barchie 0 Posted January 27, 2017 Author Report Share Posted January 27, 2017 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. Quote Link to comment
testperson 1,693 Posted January 27, 2017 Report Share Posted January 27, 2017 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.ä.. Quote Link to comment
massaraksch 41 Posted January 29, 2017 Report Share Posted January 29, 2017 (edited) 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 ;) Edited January 29, 2017 by massaraksch Quote Link to comment
lefg 276 Posted January 29, 2017 Report Share Posted January 29, 2017 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 Quote Link to comment
Barchie 0 Posted January 30, 2017 Author Report Share Posted January 30, 2017 (edited) 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. Edited January 30, 2017 by Barchie Quote Link to comment
BOfH_666 577 Posted January 30, 2017 Report Share Posted January 30, 2017 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. Quote Link to comment
massaraksch 41 Posted January 30, 2017 Report Share Posted January 30, 2017 (edited) 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. Edited January 30, 2017 by massaraksch Quote Link to comment
MurdocX 952 Posted January 31, 2017 Report Share Posted January 31, 2017 Falls es auch Powershell sein darf, kannst du dieses Skript nutzen: Suchen & Umbenennen von Dateinamen mit Powershell http://www.it-explorations.de/suchen-umbenennen-von-dateinamen-mit-powershell/ Quote Link to comment
Barchie 0 Posted January 31, 2017 Author Report Share Posted January 31, 2017 (edited) 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 Edited January 31, 2017 by Barchie Quote Link to comment
lefg 276 Posted January 31, 2017 Report Share Posted January 31, 2017 (edited) Zeige dir die Parameter doch einmal zusaätzlich mit echo an! Edited January 31, 2017 by lefg Quote Link to comment
massaraksch 41 Posted January 31, 2017 Report Share Posted January 31, 2017 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 ) Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.