修改文字檔案而不使用批次 (.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) 和 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

相關內容