
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 var
Ext
- luego crea una var
remove
que 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
remove
por nada y volviendo a aplicar la extensión