使用批处理 (.bat) 文件修改文本文件而无需创建另一个文本文件

使用批处理 (.bat) 文件修改文本文件而无需创建另一个文本文件

假设我有这个文本文件:

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

标题和所有行包含 62 个字符。如果您查看标题并从位置 42 开始,您会看到02201702是当前月份,2017是年份;从位置 48 到 62(即之后052017)我们有 14 个值(10801801000999)和一个0(零)。

最后一行包含其他行,或者说与其他行不完全相同。

假设我有几个结构相同的文件;我想将标题中的日期设置为当前日期(现在是 2019 年 8 月,所以我想进入082019标题而不是052017)。在日期(052017)之后,我想删除后面的值(在本例中是(10801801000999)并用空格替换它们并保留值(0),这样标题就会保留其 62 个字符。有人可以帮我写一些代码(批处理文件:.bat)来完成这项工作吗?特别是如果我有几个文本文件,每个文件包含超过 5000 行。

答案1

下一批将

  • 迭代当前文件夹中的文件 *.txt,
  • 将原始文件重命名为 .bak 扩展名
  • 读取 header,修改并写入原始名称
  • 复制已保存文件的剩余部分

顺便说一句,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

相关内容