Editar em lote significa reescrever o arquivo, então isso pode funcionar:
:: Q:\Test18\SU_1314377.cmd
@Echo off
SetLocal EnableExtensions EnableDelayedExpansion
Set "File=Accounts.txt"
Set "NewFile=Accounts2.txt"
(For /f "delims=" %%A in (%File%) do (
Set "Line=%%A"
Set "Debit=!Line:*Debit=!"
Set "Credit=!Line:*Credit=!"
If "!Line!" Neq "!Debit!" Call Set "Account=%%Line:Debit!Debit!=%%"
If "!Line!" Neq "!Credit!" Call Set "Line=!Account!Credit!Credit!"
Echo:!Line!
) )> "%NewFile%"
- O lote extrai valores de Débito / Crédito (com espaços à esquerda), substituindo tudo na linha atual até as palavras Débito / Crédito.
- Se a linha atual contiver Débito, o nome na frente será armazenado em var Account
- Se a linha atual contiver crédito, a linha será reconstruída com o valor armazenado na frente