Si hallas algún fallo en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes añadir el código al proyecto final.
Solución:
Solución 1:
En Powershell puedes hacer esto con One-Liner:
Get-ChildItem |Foreach-Object Rename-Item $_ -NewName ("0-12" -f $_.BaseName,$_.LastWriteTime.ToString('yyyyMMdd'),$_.Extension)
Explicación:
- Obtener elemento secundario: Obtiene todos los elementos del directorio. podrías agregar
-Recurse
para obtener archivos de subdirectorios también - Objeto Foreach: Ejecute el siguiente bloque de código con cada archivo
- ps: El archivo iterado actual como un objeto
- $_.NombreBase: El nombre del archivo sin extensión
- $_.HoraÚltimaEscritura: La última hora de escritura como un objeto DateTime
El método.ToString()
te permite formatear como lo necesites - $_.Extensión: La extensión del archivo.
Solución 2:
Este es el código que necesita usar para iterar los archivos de texto, obtener la fecha de modificación de cada archivo, copiar cada archivo usando la fecha de modificación como parte del nombre del archivo y eliminar los archivos originales. Estabas muy cerca, pero te faltaban algunas cosas.
Para obtener la fecha de modificación de un archivo podemos usar set "MDate=%%~tF"
.
Para analizar la fecha proporcionada por set "MDate=%%~tF"
deberá especificar qué partes del valor almacenado por %MDate% desea utilizar en la salida. Puedes usar el comando set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
para convertir la salida de set "MDate=%%~tF"
de MM/DD/AAAA hh:mm a AAAAMMDD.
Después de eso, podemos copiar los archivos a archivos nuevos usando el valor de %ParsedDate% en el nombre del archivo.
Debería ver dos copias de los archivos. Si desea eliminar los archivos originales, solo necesita ejecutar el comando for %%F in ("C:test*.txt") do ( del %%F )
. Eso te dejará con los archivos de texto renombrados. Para convertir el .txt.new a .txt use el comando ren "C:test*.new" *.
.
Debido a que estamos en un bucle for, necesitamos cambiar la forma en que abordamos las variables (que, según lo que ha escrito hasta ahora, ya lo sabe). Cambiamos % a ! para nombres de variables dentro de un bucle. Así que si tienes el nombre de la variable example
harías referencia a la variable usando !example!
dentro del bucle en lugar de %example%
.
Para que las variables dentro del ciclo funcionen, también necesitamos agregar el comando setlocal enabledelayedexpansion
antes del bucle.
Eso debería cubrir todo. Siéntase libre de votar o marcar la respuesta como correcta si esto resuelve su problema.
El archivo por lotes completo se proporciona a continuación.
setlocal enabledelayedexpansion
for %%F in ("C:test*.txt") do (
set "MDate=%%~tF"
set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
REM To add time
set "ParsedDate=!MDate:~6,4!!MDate:~3,2!!MDate:~0,2!!MDate:~11,2!!MDate:~14,2!"
copy %%F %%~dpnF_!ParsedDate!%%~xF.new )
for %%F in ("C:test*.txt") do (
del %%F )
ren "C:test*.new" *.
exit
Reseñas y puntuaciones del artículo
Recuerda que puedes dar recomendación a este ensayo si te fue de ayuda.