@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
Exemplo de saída:
> SU_1220967.cmd
file=abc_erf_dsgd_fd12458.txt
filenew=abc_erf_dsgd.txt"
O lote
- primeiro obtém a extensão em var
Ext
- cria um var
remove
contendo o restante do nome do arquivo depois de remover todo o texto até e incluindo o sublinhado em um loop usando a substituição de string. - cria o novo nome de arquivo substituindo
remove
por nada e reaplicando a extensão