Algunas lecturas adicionales:

Algunas lecturas adicionales:

Tengo una carpeta de archivos donde los nombres de los archivos son fechas. Necesito cambiar los nombres de los archivos de mm-dd-yyyy.eXtensiona yyyy-mm-dd.eXtension.

Esto es lo que tengo actualmente:

03-31-2019.txt
03-31-2020.txt
03-31-2021.txt
03-31-2022.txt

Esto es lo que se desea:

2019-03-31.txt
2020-03-31.txt
2021-03-31.txt
2022-03-31.txt

Entiendo la renfunción, pero no estoy seguro de cómo cambiarles el nombre en masa a todos los nombres distintos que se originan a partir del nombre inicial. Miré a mi alrededor y encontré más ayuda con la renfunción simple, pero nada para simplemente reordenar el nombre.

A continuación se muestran algunas cosas que encontré que me ayudan reny me dan algunas ideas adicionales, pero aún no son lo que necesito.

¿Cómo cambiar el nombre de los archivos en el símbolo del sistema cmd de Windows?
¿Programa por lotes para cambiar el nombre de un archivo que tiene espacios en el nombre del archivo?

Respuesta1

Sería más sencillo utilizar un software GUI de terceros para eso.

Un producto de navaja suiza que puedes utilizar es el gratuito Utilidad de cambio de nombre masivo que básicamente puede realizar todas las operaciones de cualquier tipo.

Aquí está en sus datos usando expresiones regulares:

ingrese la descripción de la imagen aquí

Respuesta2

Puede utilizar la manipulación de cadenas de una variable y definir el diseño del nombre según la reagrupación deseada de las subcadenas:

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%  

ingrese la descripción de la imagen aquí


@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" );=

  • Para recorrer diferentes archivos y no solo/exclusivamente en la .txtextensión, y en caso de ejecutarse en la misma carpeta, ignorando la aplicación en .batsí mismo, entonces no lo use "-"en el nombre del murciélago y pruebe este bucle:
@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" );=

Para una propuesta de prueba aislada, puede crear una carpeta y ejecutar este bat en esa carpeta, donde será posible crear archivos para pruebas con el mismo diseño de nombre y monitorear/visualizar el uso de manipulaciones usando subcadenas:

@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" );=
  • Salidas:
// 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

Algunas lecturas adicionales:

información relacionada