Alten Namen löschen + Datum und Uhrzeit als Dateiname? (Batch)?
Ich möchte das die jetzigen Screenshotsdateien die zum Beispiel "shot0000.png" (Zahl ganz hinten aufsteigend) heißt, umbenannt werden in 1. Datum (vorne) und 2. (hinten) Uhrzeit (am besten in englischer Version). Das ganze findet im Ordner "Screenshots" statt.
5 Antworten
Gleich mit bezugnehmend auf das laufende Projekt ( https://www.gutefrage.net/frage/rename-funktioniert-nicht-batch#answer-360511444) :
Da ich ohnehin schon in der Konvertierungsroutine eine Datei schreibe ist es mir natürlich völlig Wurst wohin ich diese Schreibe und wie ich den Namen der Datei gestalte. Innerhalb des HilfsSripts in Powershell macht es dann auch nur eine Zeile aus das Ziel zu justieren.
Da ich die Datei nun direkt in einen Zielordner scheibe wird copy, move, rename übeflüssig.
Letztlich bleibt am Ende nur die Frage ob man die Original.BMP-Dateien behält oder löscht.
In der Powershell-Zeile musst Du nichts mehr verändern. Die vertänderlichen Parameter habe ich an den Anfang der Batch in die BatchVariablen : %__search%, %__destinationFolder% und %__injekt% gelegt.
Als Zielordner kannst Du ebenso gut einen absoluten Pfad angeben:
set "__destinationFolder=%temp%\Desktop"
::oder
set "__destinationFolder=f:\irgendwo"
dann werden die konvertierten Dateien auch in die angegebenen Zielordner geschrieben
Die Batch habe ich in allen nur denkbaren Umgebungen getestet, es ist völlig egal in welchem Ordner es ausgeführt wird oder welchen Namen Du der Batch gibst, es tut was es soll.
convertScreenShots.cmd
@echo off
title SEF Screenshots folder script
rem sicherstellen Arbeitsverzeichnis ist da wo die Batch sich befindet (hoffentlich im Ordner \SEF ?)
cd /d "%~dp0"
rem Suchordner und Suchmuster hier festlegen
set "__search=system\*.bmp"
rem Zielordner, wo die konvertierten Dateien hinsollen. (absoluter Pfad oder relativer pfad) kein Backslasch am Ende....
set "__destinationFolder=Screenshots"
rem wenn du die folgende Zeile löscht (oder rem davor setzt) gibt das Powershellscript keine Statusmeldung aus!
set "__injekt='File written: '+$dst"
echo Just run it every time you want to have all your screenshots in the "Screenshots" folder in the SEF folder.
echo All screenshots are converted to .png format to make it easier to share the screenshots, for example on Discord.
md "%__destinationFolder%" 2>nul
if not exist "%__search%" goto :notFound
rem das Powerschellscript Convertiert di BMP nach PNG und legt die PPNG- dateien automatisch im Zielordner ab.
rem Move und Rename etc. sind nicht mehr nötig
rem das Script funktioniert! nichts daran verändern! nur über obige Variablen %__search% , %__destinationFolder% und %__injekt% steuern
powershell $file=Get-Item '%__search%'; Add-Type -AssemblyName System.Drawing;$file^|ForEach{$DF='%__destinationFolder%';$dst='{0}\{1}-{2}.png' -f $DF,$_.CreationTime.toString('yyyyMMddHHmmssffff'),$_.BaseName;$I = new-object System.Drawing.Bitmap $_.Fullname;$I.Save($dst,[Drawing.Imaging.ImageFormat]::PNG);%__injekt%};
echo Delete original Screenshot Files?
choice
if %errorlevel% equ 1 (
rem Ich lösche nie in TestScripten, Zum Scharfmachen echo vor dem del entfernen..
echo del /q "%__search%"
)
pause
exit /b
:notFound
if not exist "System" (
echo "%~f0" ...
echo ..."%cd%" ...
) else (
echo Cannot find images in the "%cd%\System" !
)
pause
die Powershellzeile nochmal in lesbarer Form:
Add-Type -AssemblyName System.Drawing
$file=Get-Item 'Pfad\suchMuster*';
$file|ForEach{
$DestinationFolder='PfadZielordner';
# .CreationTime.toString('yyyyMMddHHmmssffff') legt eine nutzerspezifische Formatierung eines DatumObjekts fest.
$DestinationFile='{0}\{1}-{2}.png' -f $DestinationFolder,$_.CreationTime.toString('yyyyMMddHHmmssffff'),$_.BaseName;
$Image = new-object System.Drawing.Bitmap $_.Fullname;
$Image.Save($DestinationFile,[Drawing.Imaging.ImageFormat]::PNG);
};
Damit nicht irgendein Gejammer hinsichtlich viel "Rot" von Powershell kommt:
Du kannst deine Ordner Swat ,Swat 4 , SEF auch HalloKitty oder Schneewitchen nennen es macht der Batch nichts aus.
- ...ach so... wollen wir noch über das Honorar reden... die batch get ja klammheimlich in Dein geistiges Eigentum über... 🤔...alles gut🤣
- solange Du es nicht in einer Bat2Exe versteckst ist alles kannst damit machen was du möchtest.
...so...und jetzt muss mein Mopie k💩💩💩

Also vielen Dank für deine Arbeit. Ich habe dich in die Credits rein geschrieben. Dieses Skript wird jetzt den Spielern das Leben etwas erleichtern. Hier der Downloadlink: https://easyupload.io/57u1lw
Just run it every time you want to have all your screenshots in the "Screenshots" folder in the SEF folder.
All screenshots are converted to .png format to make it easier to share the screenshots, for example on Discord.
new-object : Ausnahme beim Aufrufen von ".ctor" mit 1 Argument(en): "Ungültiger Parameter."
In Zeile:1 Zeichen:196
+ ... $_.BaseName;$I = new-object System.Drawing.Bitmap $_.Fullname;$I.Save ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:1 Zeichen:241
+ ... $_.Fullname;$I.Save($dst,[Drawing.Imaging.ImageFormat]::PNG);'File w ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
File written: Screenshots\202007261751339332-shot0001.png
Delete original Screenshot Files?
[J,N]?
es erscheint mir 2020 zwar fast unmöglich, aber arbeitest Du mit Windows 7 oder älter?
.unter windows 10 ist standardmäßig .Net-Framework 4.8 installiert.
Der Fehler tritt eigentlich nur auf, wenn (aus welchen Gründen auch immer) der Constructor eines Objects nicht aufgerufen werden kann.
Hast Du die Möglichkeit das Script auf einem anderen (Win 10) Rechner zu testen?
Ich arbeite mit Windows 10 auf dem aktuellsten Stand sogar Windows 2009 also die 20H2 Version.
Ich habe gerad mal etwas total Abwegiges geteste. Ich habe einfach ine Textdatei ,Leerdatei erzeugt ud bmp benannt. Mit dem Inhalt kann Die Routine natürlich nichts anfangen!
Ich habe mien Testbild in JPG ,Gif,PNG,Tiff konvertiert (mit Irfanview) und zu bmp umbenannt. Die Dateiendung is meinem Script egal. (mit dem Webp-Format kann mein Script nichts anfangen.)
Also wenn Du schon Testest verwende eine echte Bilddatei! ...und keine irgendwasDatei, welche Du BMP nennst.
Du wirst doch irgendeine Bildatei haben, die auch angezeigt wird?
...der fehler tritt auf wenn die Eingabedatei kein Bild enthält.
File written: Screenshots\202007261954154767-EE ava.gif.png
File written: Screenshots\202007260208369421-shot0001.png
File written: Screenshots\202007260208369461-shot0002.png
File written: Screenshots\202007260209391728-shot0003.png
File written: Screenshots\202007260209391798-shot0004.png
File written: Screenshots\202007262008541395-test.jpg.png
File written: Screenshots\202007262005002594-test.png.png
new-object : Ausnahme beim Aufrufen von ".ctor" mit 1 Argument(en): "Ungültiger Parameter."
In Zeile:1 Zeichen:196
+ ... $_.BaseName;$I = new-object System.Drawing.Bitmap $_.Fullname;$I.Save ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
File written: Screenshots\202007262021311646-test.txt.png
new-object : Ausnahme beim Aufrufen von ".ctor" mit 1 Argument(en): "Ungültiger Parameter."
In Zeile:1 Zeichen:196
+ ... $_.BaseName;$I = new-object System.Drawing.Bitmap $_.Fullname;$I.Save ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
File written: Screenshots\202007262003415310-tet.webp.png
Delete original Screenshot Files?
[J,N]?
..genau das löst bei mier den Fehler aus...
Just run it every time you want to have all your screenshots in the "Screenshots" folder in the SEF folder.
All screenshots are converted to .png format to make it easier to share the screenshots, for example on Discord.
File written: Screenshots\202007262020533545-Shot00000.png
new-object : Ausnahme beim Aufrufen von ".ctor" mit 1 Argument(en): "Ungültiger Parameter."
In Zeile:1 Zeichen:196
+ ... $_.BaseName;$I = new-object System.Drawing.Bitmap $_.Fullname;$I.Save ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
File written: Screenshots\202007261751339332-shot0001.png
Delete original Screenshot Files?
[J,N]?
Also es hat jetzt funktioniert, allerdings gefallen mir die Zahlen vorne nicht. Ich finde es nicht schlimm, wenn kein Datum und Zeit vorne ist, aber es sollte wenigstens eine Nummerierung vorne sichtbar sein, also das shot0001 usw. Fehlermeldung kommt trotzdem. Und das löschen funktioniert nicht. Datum/Uhrzeit hat den Vorteil das man gut die wichtigsten Daten sehen kann und das die Dateien nicht überschrieben werden, wenn der Dateiname gleich ist. Im Systemordner werden nämlich immer wieder von vorne gezählt also shot000 wenn dort keine anderen shot Dateien sind. Also mir geht es nur darum das die Dateien nicht überschrieben werden indem sie nicht den gleichen Namen haben und eine Nummerierung haben.
Dann ist shot0001.bmp noch immer keine Echte Bilddatei.
was das datumsformat angeht, kannst du durchaus damit spielen :
('yyyyMMddHHmmssffff') bedeutet 4Stelliges Jahr , 2St. Monat 2St Tag.. 2Stunden usw ffff sind Millisekunde (probiere doch einfach 1 oder 2 stellen für Jahr, reicht schon mal für 10 /100jahre die Sekunden/Millisekunden sind auch her theoretischer Natur
und natürlich funktioniert das löschen nicht! Wer lesen kann is klar im Vorteil:
rem Ich lösche nie in TestScripten, Zum Scharfmachen echo vor dem del entfernen..
ich setze immer in Testscripten ein Echo vor zerstörende Befehle. Damit wird angezeigt was passieren Würde...
Der Rechner eines Fragestellers ist nicht der meine... damit liegt es in der Verantwortung des Fragestellers einen Zerstörenden Befehl "scharf" zu machen... das ist mein Splint an der Handgranate...
Ich kann lesen mir ist aber gerade aufgefallen das ich dabei das del mit entfernt habe.
PWolf hat sich bereits redlich abgestrampelt...
Einen Zeitstempel mit Batch zu Basteln ist wahrlich keine Anfängeraufgabe.
Ich mache jetzt weder ein rename noch beziehe ich mich auf Dein Projekt.
Solange Du nicht Abläufe selbst nachvollziehen kannst kann Dir niemand wirklich helfen. Bisher hast Du mehr oder weniger abgeschrieben und mit ach und krach ein paar einfache Dateioperationen gelernt. (das ist keine Kritik, für ein Paar Tage ist das ganz normaler Lernfortschritt und total ok)
Eigentlich solltest Du Dein Projekt bei seit legen und einfach mal ein paar Probedateien anlegen und ein paar kleine Demo Batches schreiben, bei denn du die Grondlagen erlernst... Alles andere ist wertlos...
...und wenn Du Dir von den Helfern Stück für Stück Deine Batch schreiben lässt ist es nicht mehr Dein Werk und du weißt natürlich nicht wirklich wie es abläuft.
Wie auch PWolf komme ich nicht umhin Daten aus anderen Programmen mit for/f-Loops zu filtern und Variablen zuzuweisen. Das bringt es auch mit sich, das wir mit verzögerter Expansion arbeiten müssen. Das ist selbst für die meisten Fortgeschrittenen erstmal harter Toback.
der befehl um den Millisekundengenauen Zeitstempel eier Datei abzurufen wäre zB.
wmic datafile where name='C:\\Users\\Erzesel Secure\\Desktop\\demo.txt' get CreationDate
beachte die Verdopplung de Backslash!
TimeStamp_demo.cmd
@echo off
rem ohne verzögerte Expansion würde es höllisch!!!
setlocal enableDelayedExpansion
rem erzeuge ein paar Probierdateien bei denen Du nichts kaput machen kannst
for /l %%a in (1000,1,1010) do (
echo Text %%a >"Tstfile%%a.blubb"
rem es wird tatsächlich nötig eine kleine warteschleife einzubauen, da bei einer SSD innerhalb einer Microsekund mehrere Dateien erstellt werden können
for /l %%. in (1,1,20000) do rem
)
rem nur mal zu demo nichts umbenenen ...nur möglichen zeitstempel für Dateien im aktuellen ordner anzeigen
for %%a in (*.blubb) do (
rem vollen Namen in variable speichern
set "__filename=%%~fa"
rem Backslash für WMIC verdoppeln !__filename:\=\\!
rem wmic datafile where name='!__filename:\=\\!' get CreationDate,Status
for /f "usebackq skip=2 tokens=2,3 delims=,.+ " %%f in (`"wmic datafile where name='!__filename:\=\\!' get CreationDate,Status /format:csv 2>nul"`) do (
echo original Datei: %%~fa
rem Der Zeitstempel ist auf die Millisekunde genau!
echo Zielname waere: %%f%%g-%%~na.neueEndung
echo:
)
)
pause
solche Monster sind dann auch der Grund weshalb Programmierer bei aller liebe zu Bach , dan doch Powershell die Arbeit machen lassen.
@echo off
powershell Get-ChildItem *.blubb ^|%%{ 'original Datei: {0}' -f $_.FullName;'Zielname waere: {0}-{1}.neueRndung' -f ($_.CreationTime).toString('yyyyMMddHHmmssffff'),$_.BaseName;''}
pause
das soll nicht bedeuten, das man jetzt besser alles in Powershell schreiben sollte. PowershellScripte unterliegen sehr harten Sicherheitsbeschränkungen, welch sich eben nur in Verbindung mit Batch umschiffen lassen.
Komplexe Scripte lassen sich nur schwer in einer Zeile unterbringen. Es gibt zwar Tricks wie ich jedes Script an den Ausführungsbeschränkungen vorbeimogle, aber dann brennt Dir garantiert die "Lampe" durch und du bekommt eine schöne neue Jacke... (mit sehr langen Ärmeln)
Übrigens die Batch mit dem convertscript ist in arbeit, ich baue dan auch gleich den Zeitstempel ein...
...aber Lernen wie es funktioniert sollst du trotzdem...
kleiner tipp: ::@echo off oder echo on ist manchmal sehr nützlich um zu sehen was passiert... auch in Schleifen kan man eine Pause schreiben...
Also ich würde schon ganz gerne das Projekt beenden, auch wenn mit viel Hilfe. Ich habe vor danach mich mit einfacheren und kleineren Projekten zu beschäftigen. Und ja ich habe mich schon über Powershell informiert, das Problem ist halt das man eine Powershell Datei schwieriger ausführen kann aufgrund der Sicherheit, aber eigentlich ist Powershell die Zukunft zumindest ist es von Microsoft so gewollt. Man muss aber auch sagen das .bat Dateien eigentlich nur für das eigene Netzwerk gedacht sind und nicht um es unbedingt Leuten anzubieten.
Wie sieht es eigentlich aus mit Python? Kann man da das Gleiche machen in Form einer .exe? Ich habe nämlich gelesen das Python Batch ziemlich ähnlich sein soll.
Welches Datum? Das Dateierstellungdatum? Oder das aktuelle???
Probier mal https://www.bulkrenameutility.co.uk/ oder http://www.den4b.com/products/renamer
Das soll ein .bat Skript erledigen und kein zusätzliches Programm, weil es viel zu umständlich ist, das Programm extra herunterzuladen und auszuführen.
Als Alternative kann auch statt Datum und Uhrzeit im Dateinamen auch eine Nummer verwendet werden die von 0 bis 10.000.
Das Folgende berücksichtigt, dass du in einem Kommentar geschrieben hast, dass du das Erstellungsdatum benötigst.
Mit Beibehaltung des alten Namens (hab ich ausprobiert):
for %# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %A in (`dir /tc "%#" ^| findstr /B /V /C:" "`) do @ren "%#" "%C-%B-%A %D.%E %#")
Ohne Beibehaltung des alten Namens:
for %# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %A in (`dir /tc "%#" ^| findstr /B /V /C:" "`) do @ren "%#" "%C-%B-%A %D.%E")
(Hier fehlt nur das %# am Ende)
-----
Wenn du auch die Sekundenangabe benötigst, wird es komplizierter, hier müsste man vermutlich FORFILES verwenden.
Oft reichen nicht mal die Sekunden... um eine klare Trennung herzustellen
Wo hast Du denn das Monster ausgebuddelt?😱 Das mit dem Dir /tc ist nicht nötig. die Parametervariable %%~t# enthält das gleiche, was du so umständlich ausfilterst...
habs mal auf mehrere Zeilen verteilt:
@echo off
for %%# in (*) do (
for /f " tokens=1-5 delims=.: " %%f in ("%%~t#") do (
rem nix umbenennen nur tun als ob...
echo @ren "%%~f#" "%%h%%g%%f%%i%%j-%%~n#.neueEndung"
echo:
)
)
pause
echo off
cd Screenshots
for %# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %A in (`dir /tc "%#" ^| findstr /B /V /C:" "`) do @ren "%#" "%C-%B-%A %D.%E")
pause
exit /b
Bei mir hat es keine Auswirkung.
Sorry, hab vergessen, dass in einer Batch-Datei die Prozentzeichen verdoppelt werden müssen:
for %%# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %%A in (`dir /tc "%%#" ^| findstr /B /V /C:" "`) do @ren "%%#" "%%C-%%B-%%A %%D.%%E")
Liefert übrigens das Zeitformat
JJJJ-MM-TT hh:mm
Vorteil: alphabetische und zeitliche Sortierung stimmen überein
Bei mir ist kein hh:mm sondern hh.mm und das Problem ist das jetzt alle Dateien keine .png und .bmp Endung haben und somit unbrauchbar sind.
Stimmt. Sorry, hab vergessen: der Doppelpunkt ist als Bestandteil eines Namens nicht zulässig, deshalb hatte ich ihn durch einen Punkt ersetzt.
Für die Dateiendung:
for %# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %A in (`dir /tc "%#" ^| findstr /B /V /C:" "`) do @ren "%#" "%C-%B-%A %D.%E%~x#")
Jetzt hat es gar keine Auswirkung.
Aber an sich die Datums und Uhranzeige finde ich gut. Nur am besten wäre ein Doppelpunkt bei der Uhranzeige und das .png und .bmp beibehalten wird.
Hoffentlich hast du noch ein Backup der Dateien, sonst ist es schlecht - dann müsste man in die Dateien hineinschauen, um den Typ zu ermitteln. Dürfte auch gehen, ist aber mit reinen Bordmitteln schwierig.
Wie gesagt, der Doppelpunkt hat eine besondere Bedeutung und kann deshalb nicht für Dateinamen verwendet werden. (Wie ?<>|& u. a.)
Das mit der Dateiendung funktioniert bei mir nicht. Also es funktioniert gar nicht. Ich habe neue .png und .bmp Dateien erstellt und es funktioniert nicht mehr.
Den Dateityp "BMP" kann man daran erkennen, dass die Datei mit "BM" beginnt; den Dateityp "PNG" daran, dass Zeichen 2 bis 4 "PNG" sind.
Erkennen:
type %dateiname% | findstr /b /r "BM" >NUL
if errorlevel 1 goto :keinBMP
ren "%dateiname%" "%dateiname%.bmp"
:keinBMP
bzw.
type %dateiname% | findstr /b /r ".PNG" >NUL
if errorlevel 1 goto :keinPNG
ren "%dateiname%" "%dateiname%.png"
:keinPNG
wobei %dateiname% natürlich auch durch %%A, %%# oder die entsprechende Laufvariable von FOR ersetzt werden kann.
Sorry, hab wieder die doppelten Prozentzeichen vergessen:
for %%# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %%A in (`dir /tc "%%#" ^| findstr /B /V /C:" "`) do @ren "%%#" "%%C-%%B-%%A %%D.%%E.%%~x#")
Ok, jetzt funktioniert es. Was ist wenn eine Datei doppelt ist also mit Datum und Uhrzeit?
Dann gibt es eine Fehlermeldung.
Das könnte man mit "if exists "%#"" abfangen und dann ggf. eine Nummer so lange hochzählen, bis man einen eindeutigen Dateinamen hat.
@echo off
title SEF Screenshots folder script
color 0F
echo Just run it every time you want to have all your screenshots in the "Screenshots" folder in the SEF folder.
echo All screenshots are converted to .png format to make it easier to share the screenshots, for example on Discord.
md "Screenshots" 2>nul
if not exist "system\*.bmp" goto :notFound
move /-y "System\shot*.bmp" "Screenshots\"
pause
cd Screenshots
ren *.bmp *.png
cd Screenshots
for %%# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %%A in (`dir /tc "%%#" ^| findstr /B /V /C:" "`) do @ren "%%#" "%%C-%%B-%%A %%D.%%E.%%~x#")
set dateiname=%%C-%%B-%%A %%D.%%E.%%~x#
set nummer=0
:existloop
if not exist "%filename" goto :endexistloop
set /a nummer+=1
set filename=%%C-%%B-%%A %%D.%%E (%nummer%).%%~x#
goto :existloop
:endexistloop
ren "%%#" "%filename%"
pause
exit /b
:notFound
if not exist "System" (
echo "%~f0" ...
echo ..."%cd%" ...
) else (
echo Cannot find images in the "System" folder!
)
pause >NUL
Tipp: rechts neben dem Kommetar-Eingabe-Fenster ist ein blau umrandetes "Tt" - wenn man darauf klickt, öffnet sich auch bei Kommentaren die Formatierungsleiste. Mit "</>" kann man einen Text als Quellcode formatieren. Das macht den Code leichter lesbar.
-----
Die Zeile
for %%# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %%A in (`dir /tc "%%#" ^| findstr /B /V /C:" "`) do @ren "%%#" "%%C-%%B-%%A %%D.%%E.%%~x#")
ist mit der Umbenennung nicht unbedingt verträglich - wenn ein Dateiname schon existiert, führt es zu einer Fehlermeldung. Das ist zwar noch nicht schlimm; schlimm ist, dass die Umbenennung für alle Dateien vorgenommen werden muss:
for %%# in (*) do @(for /F " usebackq tokens=1-5 delims=.: " %%A in (`dir /tc "%%#" ^| findstr /B /V /C:" "`) do (
set dateiname=%%C-%%B-%%A %%D.%%E.%%~x#
set nummer=0
:existloop
if not exist "%filename" goto :endexistloop
set /a nummer+=1
set filename=%%C-%%B-%%A %%D.%%E (%nummer%).%%~x#
goto :existloop
:endexistloop
ren "%%#" "%filename%"
)
Es ändert jetzt den Namen nicht mehr (Datum und Uhrzeit).
Das geht zum Beispiel mit XnView MP.
- Alle Screenshots markieren
- Rechtsklick
- Stapel-Umbenennen
- Auf den Pfeil links neben Vorlage löschen
- Erstelldatum auswählen.
- Ersetzen anhaken und " CEST" durch nichts ersetzen
- Überprüfen und bei Gefallen OK.

Das soll ein .bat Skript erledigen und kein zusätzliches Programm, weil es viel zu umständlich ist, das Programm extra herunterzuladen und auszuführen.
"...ach so... wollen wir noch über das Honorar reden... die batch get ja klammheimlich in Dein geistiges Eigentum über... 🤔...alles gut🤣"
Wenn man etwas freiwillig macht, dann aus dem Herzen heraus. Naja klammheimlich muss nicht sein. Wenn du willst kann ich dich in den Credits erwähnen das ist kein Problem für mich.