Comando de Windows

Comando de Windows

Necesita encontrar el último guión bajo en un nombre de archivo y eliminar todo lo que sigue (incluido el último guión bajo).

por ejemplo, nombre de archivo:

abc_erf_dsgd_fd12458.txt

Resultado Esperado:

abc_erf_dsgd.txt

Nota: El número de guiones bajos que aparecen en el nombre del archivo es dinámico y no es de naturaleza fija.

Ciertos archivos pueden tener sólo 2 guiones bajos, mientras que otros pueden tener hasta 6.
La intención aquí es encontrar el último guión bajo y omitir todo lo que le sigue.

Preferiblemente un script por lotes de Windows que podría funcionar y no los comandos de PowerShell.

Respuesta1

@Echo off
set file=abc_erf_dsgd_fd12458.txt
for %%A in (%file%) do set Ext=%%~xA
set remove=%file%
:loop
if "%remove%" neq "%remove:*_=%" Set "remove=%remove:*_=%"&goto :loop
call set filenew=%%file:_%remove%=%%%Ext%"
set file

Salida de muestra:

> SU_1220967.cmd
file=abc_erf_dsgd_fd12458.txt
filenew=abc_erf_dsgd.txt"

El lote

  • primero obtiene la extensión en varExt
  • luego crea una var removeque contiene el resto del nombre del archivo después de eliminar todo el texto hasta el guión bajo incluido en un bucle mediante sustitución de cadenas.
  • construye el nuevo nombre de archivo sustituyendo removepor nada y volviendo a aplicar la extensión

información relacionada