
Мне нужно отредактировать строку под определенной строкой с определенным текстом. Я редактирую файл .txt с помощью .bat или .vbs в Windows 8.
Пример
Account 1
ABC - Debit 900
- Credit 900
DEF - Debit 800
- Credit 100
Я хочу, чтобы результат был таким
Account 1
ABC - Debit 900
ABC - Credit 900
DEF - Debit 800
DEF - Credit 100
решение1
Пакетное редактирование подразумевает перезапись файла, поэтому это может сработать:
:: Q:\Test\2018\04\17\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%"
- Пакет извлекает значения дебета/кредита (с начальными пробелами), заменяя все в текущей строке до слов дебет/кредит.
- Если текущая строка содержит Debit, то имя перед ней сохраняется в переменной Account.
- Если текущая строка содержит Credit, строка перестраивается с сохраненным значением в начале.