%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E5%88%A5%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%9B%E3%81%9A%E3%81%AB%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B.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 の位置 (つまり の後) には、 14 個の値 ( ) と(ゼロ)052017
があります。10801801000999
0
最後の行には、他の行と同じではない内容が含まれています。
同じ構造のファイルが複数あるとします。ヘッダーの日付を現在の日付に設定したいとします (現在は 2019 年 8 月なので、 ではなく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