%20%E6%AA%94%E6%A1%88%E5%BB%BA%E7%AB%8B%E5%8F%A6%E4%B8%80%E5%80%8B%E6%96%87%E5%AD%97%E6%96%87%E4%BB%B6.png)
假設我有這個文字檔:
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 年 8 月,所以我想進入082019
標頭而不是052017
)。在日期 ( 052017
) 之後,我想刪除後面的值(在本例中為 ( 10801801000999
),並用空格替換它們並保留值 (0),從而使標頭保留 62 個字元。有人可以幫我寫一些嗎代碼(批次檔:.bat)來完成這項工作?
答案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