Изменить текстовый файл, не создавая другой, с помощью пакетного файла (.bat)

Изменить текстовый файл, не создавая другой, с помощью пакетного файла (.bat)

Предположим, у меня есть этот текстовый файл:

1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*000000000000302082890010000000000T SECTEUR SANITAIRE JIJEL  1
*000000000000306758680008500000000TIC ZIAMA MANSOURIAH       1

Заголовок и все строки содержат 62 символа. Если вы посмотрите на заголовок и начнете с позиции 42, то увидите 022017, 02— текущий месяц, 2017— год; с позиции 48 по 62 (т. е. после 052017) у нас есть 14 значений ( 10801801000999) и a 0(ноль).

Последняя строка содержит или, скажем так, не идентична другим строкам.

Допустим, у меня есть несколько файлов одинаковой структуры; и я хочу установить дату в заголовке на текущую дату (сейчас август 2019 года, поэтому я хочу попасть 082019в заголовок вместо 052017). После даты ( 052017) я хочу удалить значения, которые идут после (в данном случае ( 10801801000999) и заменить их пробелами и сохранить значение (0), таким образом, чтобы заголовок сохранил свои 62 символа. Может ли кто-нибудь помочь мне написать какой-нибудь код (пакетный файл: .bat) для выполнения этой работы? Особенно, если у меня есть несколько текстовых файлов, и каждый из них содержит более 5000 строк.

решение1

Следующая партия будет

  • перебирать файлы *.txt в текущей папке,
  • переименуйте оригинал в расширение .bak
  • прочитать заголовок, изменить и записать его под исходным именем
  • скопируйте оставшуюся часть сохраненного файла

Кстати, SuperUser — это не сервис по написанию скриптов,
можно было бы ожидать немного больше собственных исследований и попыток кодирования.

:: Q:\Test\2019\08\16\SU_1472064.cmd
@Echo off
:: Get MonthYear
for /f "usebackq" %%A in (`
  powershell -NoP -C "(Get-Date).ToString('MMyyyy')"
`) Do Set MonthYear=%%A

:: iterate .txt files in current folder
For /f "delims=" %%F in ('Dir /B /O-D *.txt') Do Call :sub "%%~F"
Echo Job done

Goto :Eof

:Sub filename
:: Rename original file to .bak extension
Ren %1 "%~1.bak"
:: read header line
Set /p "Header=" <"%~1.bak"
Echo 1234567890123456789012345678901234567890123456789012345678901234567890
Echo _________1_________2_________3_________4_________5_________6_________7
Echo %Header%
Set "NewHeader=%Header:~0,41%%MonthYear%              0"
Echo %NewHeader%
(Echo %NewHeader%
 More +1 "%~1.bak"
) > %1

Пример вывода:

> SU_1472064.cmd
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*0000000000003000345800185000000000000002082019              0
Job done

Связанный контент