Erstelldatum vieler Dateien ändern (aus Dateinamen abgeleitet)
Hallo,
ich suche ein Batch womit ich das Erstellungsdatum nach den 1. Nummern (Datum) des Dateinamens verändern kann.
Beispiel:
2014-12-Video_04711.mpeg ist mit Änderungsdatum 10.01.2017
Nach Batchlauf
2014-12-Video_04711.mpeg > Änderungsdatum 01.12.2014
oder teilweise habe die Dateien auch diese Beschreibung
01.12.2014-Video_04711.mpeg ist mit Änderungsdatum 10.01.2017
Nach Batchlauf
01.12.2014-Video_04711.mpeg Änderungsdatum 01.12.2014
Viele Grüße
Horst
ich suche ein Batch womit ich das Erstellungsdatum nach den 1. Nummern (Datum) des Dateinamens verändern kann.
Beispiel:
2014-12-Video_04711.mpeg ist mit Änderungsdatum 10.01.2017
Nach Batchlauf
2014-12-Video_04711.mpeg > Änderungsdatum 01.12.2014
oder teilweise habe die Dateien auch diese Beschreibung
01.12.2014-Video_04711.mpeg ist mit Änderungsdatum 10.01.2017
Nach Batchlauf
01.12.2014-Video_04711.mpeg Änderungsdatum 01.12.2014
Viele Grüße
Horst
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 331264
Url: https://administrator.de/forum/erstelldatum-vieler-dateien-aendern-aus-dateinamen-abgeleitet-331264.html
Ausgedruckt am: 23.12.2024 um 08:12 Uhr
11 Kommentare
Neuester Kommentar
Hallo Horst.
Windows hat dafür kein Batch-Tool an Bord. Suche mal im Netz nach Progrämmchen mit Name "touch". Findest du nichts, könnte ich dir mein eigenes zur Verfügung stellen.
Da ich aber weiß, dass das Ganze per PowerShell machbar ist, warte besser erst auf die PS Experten, dann brauchst du keine Drittprogramme ...
Grüße
rubberman
Windows hat dafür kein Batch-Tool an Bord. Suche mal im Netz nach Progrämmchen mit Name "touch". Findest du nichts, könnte ich dir mein eigenes zur Verfügung stellen.
Da ich aber weiß, dass das Ganze per PowerShell machbar ist, warte besser erst auf die PS Experten, dann brauchst du keine Drittprogramme ...
Grüße
rubberman
Servus,
Kannst du im Skript aber einfach anpassen, Es gibt $_.CreationTime (Erstelldatum) und $_.LastWriteTime (Änderungsdatum). Ich habe einfach mal beide geändert.
Grüße Uwe
Zitat von @rubberman:
Da ich aber weiß, dass das Ganze per PowerShell machbar ist, warte besser erst auf die PS Experten, dann brauchst du keine Drittprogramme ...
Bidde Da ich aber weiß, dass das Ganze per PowerShell machbar ist, warte besser erst auf die PS Experten, dann brauchst du keine Drittprogramme ...
gci 'D:\Videos' -Filter *.mpeg | ?{!$_.PSIsContainer -and $_.Basename -match '^(\d{4}-\d{2}|\d{2}\.\d{2}\.\d{4})'} |%{
$d = get-date $matches[1]
$_.CreationTime = $d; $_.LastWriteTime = $d
}
womit ich das Erstellungsdatum
Änderungsdatum
Ja watt denn nu??Änderungsdatum
Kannst du im Skript aber einfach anpassen, Es gibt $_.CreationTime (Erstelldatum) und $_.LastWriteTime (Änderungsdatum). Ich habe einfach mal beide geändert.
Grüße Uwe
Ist ja auch ein Linux-Tool
Fertig.
Gruß
Es währe also gut wenn du mir dieses zur Verfügung stellen würden.
Mit Power Shell habe ich keine Erfahrung.
Ein Batch währe für mich am einfachsten.
powershell kannst du ganz einfach in Batch direkt ausführen!Mit Power Shell habe ich keine Erfahrung.
Ein Batch währe für mich am einfachsten.
@echo off
powershell -E Bypass -c "gci 'D:\Videos' -Filter *.mpeg | ?{!$_.PSIsContainer -and $_.Basename -match '^(\d{4}-\d{2}|\d{2}\.\d{2}\.\d{4})'} | %%{$d = get-date $matches[1];$_.CreationTime = $d; $_.LastWriteTime = $d}"
Gruß
Ein Batch währe für mich am einfachsten.
Das wage ich zu bezweifeln, die PoweShell-Lösung ist da weitaus einfacher zu verstehen. Aber des Menschen Wille ...https://www.dropbox.com/s/c64qmz0arwfgzsp/touch.zip?dl=0
Verwendung auf eigene Gefahr, versteht sich. Hilfe gibt's per
TOUCH -?
Das Tool zusammen mit der Batchdatei in das Überverzeichnis deiner MPEGS speichern. Es werden rekursiv alle Dateien in den Unterverzeichnissen verarbeitet.
@echo off &setlocal
for /f "delims=" %%i in (
'dir /a-d /b /s *.mpeg^|findstr /rie "\\20[0-9][0-9]-[01][0-9]-[^\\]*\.mpeg \\[0-3][0-9]\.[01][0-9]\.20[0-9][0-9]-[^\\]*\.mpeg"'
) do (
set "file=%%~i"
for /f "tokens=1-3 delims=-." %%j in ("%%~ni") do (
set "m=%%k"
if %%j lss 2000 (
set "d=%%j"
set "y=%%l"
) else (
set "y=%%j"
set "test=1"
for /f "delims=1234567890" %%m in ("%%l") do set "test="
if defined test (set "d=%%l") else set "d=01"
)
)
setlocal EnableDelayedExpansion
touch -p "!file!" -a -Y !y! -M !m! -D !d!
endlocal
)
Falls du doch colinardo's PowerShell-Aufruf aus einer Batchdatei in ähnlicher Weise (rekursiv, ausgehend vom Arbeitsverzeichnis) nutzen willst, dann etwa so:
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -Command "gci '%~dp0' -Filter *.mpeg -Recurse | ?{!$_.PSIsContainer -and $_.Basename -match '^(\d{4}-\d{2}|\d{2}\.\d{2}\.\d{4})'} | %%{$d = get-date $matches[1]; $_.CreationTime = $d; $_.LastWriteTime = $d}"
Grüße
rubberman
Hi,
erster Fehler: Du pastest das direkt in die Konsole = Falsch, das kommt in eine Batchdatei!
Zweiter Fehler des PS Skripts :
Das wird nicht in die PS Konsole gepastet sondern kommt ebenfalls in eine Batchdatei, und wird in der CMD ausgeführt nicht in der PS Konsole, also alles falsch gemacht was man falsch machen kann .
Gruß schnappi
erster Fehler: Du pastest das direkt in die Konsole = Falsch, das kommt in eine Batchdatei!
Zweiter Fehler des PS Skripts :
Das wird nicht in die PS Konsole gepastet sondern kommt ebenfalls in eine Batchdatei, und wird in der CMD ausgeführt nicht in der PS Konsole, also alles falsch gemacht was man falsch machen kann .
Gruß schnappi
Bei der Einleitung ...
@X-Spezi
Eine Batchdatei ist eine Textdatei mit Endung .bat oder .cmd
Grüße
rubberman
ich suche ein Batch
... sollte man davon ausgehen, dass das bekannt ist Zumal ich bereits erklärt hatte:Das Tool zusammen mit der Batchdatei in das Überverzeichnis deiner MPEGS speichern.
Man erlebt immer wieder Überraschungen.@X-Spezi
Eine Batchdatei ist eine Textdatei mit Endung .bat oder .cmd
Grüße
rubberman
Hallo Horst.
Das ist grundsätzlich eine gute Idee, ebenso wie
1) Der Code gehört trotzdem in eine Batchdatei. Du rufst dann die Batchdatei mit ihrem Name aus der Konsole auf. (Kannst die Datei bspw. direkt auf das Konsolefenster ziehen, um Schreibfehler zu vermeiden.)
2) Du musst in der Konsole vorher in das Arbeitsverzeichnis der Batchdatei navigieren, wenn der Code von diesem abhängig ist. (Hast du richtig gemacht.)
Grüße
rubberman
Bisher hatte ich zu Prüfen einen normalen Batch immer direkt in Konsole getestet um evtl. Fehler zu sehen.
Das ist grundsätzlich eine gute Idee, ebenso wie
echo on
zu setzen, um zu sehen was genau passiert. Dabei sind 2 Dinge zu beachten:1) Der Code gehört trotzdem in eine Batchdatei. Du rufst dann die Batchdatei mit ihrem Name aus der Konsole auf. (Kannst die Datei bspw. direkt auf das Konsolefenster ziehen, um Schreibfehler zu vermeiden.)
2) Du musst in der Konsole vorher in das Arbeitsverzeichnis der Batchdatei navigieren, wenn der Code von diesem abhängig ist. (Hast du richtig gemacht.)
Grüße
rubberman