
Ich habe einen Ordner mit Dateien, deren Namen Datumsangaben sind. Ich muss die Namen der Dateien von mm-dd-yyyy.eXtension
in ändern yyyy-mm-dd.eXtension
.
Das habe ich derzeit:
03-31-2019.txt
03-31-2020.txt
03-31-2021.txt
03-31-2022.txt
Das ist gewünscht:
2019-03-31.txt
2020-03-31.txt
2021-03-31.txt
2022-03-31.txt
Ich verstehe die ren
Funktion, bin mir aber nicht sicher, wie ich alle Namen, die vom ursprünglichen Namen abstammen, in Massen umbenennen kann. Ich habe mich umgesehen und weitere Hilfe zur einfachen ren
Funktion gefunden, aber nichts, um einfach den Namen neu anzuordnen.
Unten sind ein paar Dinge aufgeführt, die mir geholfen haben ren
und zu einigen weiteren Überlegungen anregen, die aber noch nicht das sind, was ich brauche.
Wie benenne ich Dateien in der Windows-Eingabeaufforderung cmd um?
Batch-Programm zum Umbenennen einer Datei, deren Dateiname Leerzeichen enthält?
Antwort1
Es wäre einfacher, hierfür eine GUI-Software von Drittanbietern zu verwenden.
Ein Schweizer Messer-Produkt, das Sie verwenden können, ist das kostenlose Dienstprogramm zur Massenumbenennung das grundsätzlich alle Operationen jeglicher Art durchführen kann.
Hier ist es in Ihren Daten unter Verwendung regulärer Ausdrücke:
Antwort2
Sie können die String-Manipulation einer Variable nutzen und das Layout des Namens entsprechend der gewünschten Umgruppierung der Teilstrings definieren:
1.echo.Date : %date%
2.echo.Weekday: %date:~0,3%
3.echo.Month : %date:~4,2%
4.echo.Day : %date:~7,2%
5.echo.Year : %date:~10,4%
@echo off
for %%i in (??-*.txt)do set "_n=%%~ni" && =;(
%ComSpec% /v /c "ren "%%~i" !_n:~6,4!-!_n:~0,2!!_n:~2,3!%%~xi" );=
- Um verschiedene Dateien zu durchlaufen und nicht nur/ausschließlich in der
.txt
Erweiterung, und beim Ausführen im selben Ordner die Anwendung auf.bat
sich selbst zu ignorieren, verwenden Sie es nicht"-"
im Bat-Namen und versuchen Sie diese Schleife:
@echo off
for /f delims^= %%i in ('dir /a:a /b *-*.*')do set "_n=%%~ni" && =;(
%ComSpec% /v /c "ren "%%~i" !_n:~6,4!-!_n:~0,2!!_n:~2,3!%%~xi" );=
Für einen isolierten Testvorschlag können Sie einen Ordner erstellen und diesen BAT in diesem Ordner ausführen. Dort können Sie Dateien zum Testen mit demselben Namenslayout erstellen und die Verwendung von Manipulationen mithilfe von Teilzeichenfolgen überwachen/visualisieren:
@echo off
:: Deleting/creating files for testing ::
cd /d "%~dp0" && 2>nul del /q /a .\*.txt
for %%i in (19,20,21,22)do cd.>03-31-20%%~i.txt
for /f delims^= %%i in ('dir /a:a /b *-*.*')do set "_n=%%~ni" & echo\ && =;(
%ComSpec% /v /c "echo\// Original file name.eXtension = !_n!%%~xi"
%ComSpec% /v /c "ren "%%~i" !_n:~6,4!-!_n:~0,2!!_n:~2,3!%%~xi"
%ComSpec% /v /c "echo\variable index from 6 get 4 places == !_n:~6,4!"
%ComSpec% /v /c "echo\variable index from 0 get 2 places == !_n:~0,2!"
%ComSpec% /v /c "echo\variable index from 2 get 3 places == !_n:~2,3!"
%ComSpec% /v /c "echo\and put back original file eXtension == %%~xi"
%ComSpec% /v /c "echo\// File renamed to: !_n:~6,4!-!_n:~0,2!!_n:~2,3!%%~xi" );=
- Ausgaben:
// Original file name.eXtension = 03-31-2019.txt
variable index from 6 get 4 places == 2019
variable index from 0 get 2 places == 03
variable index from 2 get 3 places == -31
and put back original file eXtension == .txt
// File renamed to: 2019-03-31.txt
// Original file name.eXtension = 03-31-2020.txt
variable index from 6 get 4 places == 2020
variable index from 0 get 2 places == 03
variable index from 2 get 3 places == -31
and put back original file eXtension == .txt
// File renamed to: 2020-03-31.txt
// Original file name.eXtension = 03-31-2021.txt
variable index from 6 get 4 places == 2021
variable index from 0 get 2 places == 03
variable index from 2 get 3 places == -31
and put back original file eXtension == .txt
// File renamed to: 2021-03-31.txt
// Original file name.eXtension = 03-31-2022.txt
variable index from 6 get 4 places == 2022
variable index from 0 get 2 places == 03
variable index from 2 get 3 places == -31
and put back original file eXtension == .txt
// File renamed to: 2022-03-31.txt