假设我有这个文本文件:
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
)和一个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