Tengo muchos archivos en una carpeta, pero todos comienzan con una línea de números y están separados del nombre real del archivo por un "_".
Por ejemplo:
123123123_nombredearchivo.txt
456456456_nombredearchivo2.txt
789789789_nombredearchivo3.txt
Me imagino que puedes ejecutar algún tipo de comando para eliminar los caracteres antes de "_" y el propio "_".
¡Cualquier ayuda es muy apreciada!
Respuesta1
Si no se siente cómodo con PowerShell, es posible que desee echar un vistazo a utilidades gratuitas como: http://www.bulkrenameutility.co.uk/Download.php
Respuesta2
Si solo desea eliminar los caracteres de una lista, puede colocar lo siguiente en un archivo por lotes sustituyendo el directorio relevante en lugar dedirname
for /f "tokens=2 delims=_" %%G in ('dir /b dirname') do @echo %%G
Produce dir /b
una lista de directorio en formato simple (sin información de encabezado ni resumen). Indica delims=_
que el guión bajo debe usarse como delimitador y indica tokens=2
que desea lo que está después del guión bajo. VerPARA/Fpara obtener una explicación más completa sobre cómo utilizarlo FOR /F
en un archivo por lotes.
Pero si desea cambiar el nombre de los archivos sin los números y el guión bajo, en su ejemplo tiene dos archivos que producirían el nombre filename2.txt
si se eliminaran los números y el guión bajo. ¿Qué quieres que se haga en ese caso? ¿O tenía la intención de utilizar filename3.txt para el tercer archivo?
Si lo que sigue al guión bajo es un nombre único, puede usar lo siguiente para cambiar el nombre de los archivos, sustituyendo el directorio apropiado pordirectorio relevante:
set dirname="relevantdir"
for /f "tokens=1,2 delims=_" %%G in ('dir /b %dirname%') do rename %dirname%\%%G_%%H %%H
En el caso anterior, el primer token, %%G
es lo que está antes del guión bajo y el segundo token, %%H
es lo que está después del guión bajo. Los volví a juntar para la operación de cambio de nombre y los precedí con el directorio ya que el comando de cambio de nombre usa la sintaxis RENAME [drive:][path]filename1 filename2
.
Coloque un @echo off
como primera línea en el archivo por lotes antes del set
comando, si no desea ver cada operación de cambio de nombre a medida que ocurre.
Respuesta3
powershell
ls "*_*.txt" | %{mv -confirm:$false $_.name ($_.name).split("_")[1]}
powershell debería ser preferible en un Win8.
Respuesta4
PowerShell: suponiendo que es necesario cambiar el nombre de todos los archivos de la carpeta (como implica OP):
$Folder = 'c:\path\to\folder'
gci $Folder | Rename-Item -NewName { $_.Name.Split('_')[-1] }