Windows-Batch: Änderungsdatum der Datei in Dateiname schreiben (innerhalb von Schleife)

  • Sonstige

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Windows-Batch: Änderungsdatum der Datei in Dateiname schreiben (innerhalb von Schleife)

    Ich ermittle in einem Verzeichnis alle *.txt-Dateien. Dann ermittle ich pro Datei das letzte Änderungsdatum. Bis hierher klappt es. Dann möchte ich die Datei umbenennen und das Datum im Format YYYY-MM-DD in den Namen schreiben, mit anderen Infos. Im folgendem Beispiel wird der neue Dateiname erst mal nur per ECHO ausgegeben. Die drei Datumsvariablen werden aber nicht ersetzt (und das ist das Problem).

    Shell-Script

    1. SETLOCAL EnableDelayedExpansion
    2. for %%f in (*.txt) do (
    3. set date=%%~t
    4. set day=!date:~0,2!
    5. set month=!date:~3,2!
    6. set year=!date:~6,4!
    7. echo "Textdatei %%~nf (!year!-!month!-!day!).txt"
    8. )
    9. pause

    Was mache ich falsch? Statt !year! usw. habe ich natürlich auch schon %year% versucht, aber das klappt auch nicht. Entweder enthält die Variable dann keinen Inhalt oder es wird das angezeigt, was so im Skript steht.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo,
    Batch-Dateien sind so eine Sache. Käme evtl. PowerShell als Alternative in Frage?

    Quellcode

    1. Get-ChildItem -Path ./ -Filter '*.txt' | foreach { Rename-Item -Path $_.FullName -NewName "$($_.BaseName)_$($_.LastWriteTime.ToString("yyyy-MM-dd"))$($_.Extension)" }


    Das Script kannst du in eine Datei mit der Endung ps1 einfügen und so ausführen.
    Ich habe auch Probleme mit der Zwischenspeicherung in Variablen.
    Das funktioniert:

    Quellcode

    1. for %%f in (*.txt) do (
    2. set date=%%~t
    3. echo Textdatei %%~nf %date:~6,4%-%date:~3,2%-%date:~0,2%.txt
    4. )


    Edit:
    Nochmals getestet:

    Quellcode

    1. SETLOCAL EnableDelayedExpansion
    2. for %%f in (*.txt) do (
    3. set date=%%~t
    4. set day=%date:~0,2%
    5. set month=%date:~3,2%
    6. set year=%date:~6,4%
    7. echo Textdatei %%~nf !year!-!month!-!day!.txt
    8. )
    9. pause

    funktioniert
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    @ISliceUrPanties Danke, wäre eine Möglichkeit, allerdings würde ich gerne vorerst bei Batch bleiben.

    @petaod Danke, aber klappt leider nicht. Es wird nun immer das aktuelle Datum verwendet, also das heutige.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Ich habe mal ganz tief in meiner Erinnerung gekramt.
    Versuche folgendes:

    Quellcode

    1. ​@ECHO OFF
    2. SETLOCAL EnableDelayedExpansion
    3. for %%f in (*.txt) do (
    4. CALL :FormatDate %%~tf
    5. ECHO Textdatei %%~nf !dt!
    6. )
    7. pause
    8. GOTO :EOF
    9. :FormatDate
    10. SET _dt=%1
    11. SET dt=%_dt:~6,4%-%_dt:~3,2%-%_dt:~0,2%
    12. Goto :EOF
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Marcus Gräfe schrieb:

    über die anderen Wege nicht

    Nach nochmaligem Nachdenken klappt es auch mit einer leichten Modifikation über deinen ursprünglichen Weg.

    Quellcode

    1. SETLOCAL EnableDelayedExpansion
    2. for %%f in (*.txt) do (
    3. set date=%%~tf
    4. set day=!date:~0,2!
    5. set month=!date:~3,2!
    6. set year=!date:~6,4!
    7. echo "Textdatei %%~nf (!year!-!month!-!day!).txt"
    8. )
    9. pause

    Du hattest %%~t anstatt %%~tf verwendet, was einen Leerstring ergibt.
    Wenn man das behebt, funktionierts.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    Tatsache, so ein kleiner Fehler!

    Ich weiß nun auch, warum ich nicht auf den Fehler gekommen bin. Ein echo %date:~0,2% ergibt den Tag des aktuellen Datums. Daher ging ich davon aus, dass meine date-Variable grundsätzlich den korrekten Inhalt hat. War aber nicht so.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum