Comando do Windows

Comando do Windows

Precisa encontrar o último sublinhado em um nome de arquivo e remover tudo o que vem depois dele (incluindo o último sublinhado).

por exemplo, nome do arquivo:

abc_erf_dsgd_fd12458.txt

resultado esperado:

abc_erf_dsgd.txt

Nota: O no:of sublinhados que aparece no nome do arquivo é dinâmico e não é de natureza fixa.

Certos arquivos podem ter apenas 2 sublinhados, enquanto outros podem ter até 6.
A intenção aqui é descobrir o último sublinhado e omitir tudo o que vem depois dele.

De preferência, script em lote do Windows, que pode resolver o problema, e não comandos do PowerShell.

Responder1

@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 coloca a extensão em varExt
  • em seguida, cria um var removecontendo o restante do nome do arquivo após remover todo o texto até e incluindo o sublinhado em um loop usando a substituição de string.
  • constrói o novo nome do arquivo substituindo o removepor nada e reaplicando a extensão

informação relacionada