プロが教える店舗&オフィスのセキュリティ対策術

[A]
1111111

[B]
222222222
222222222
333333333

AA

[C]
222222222
222222222
333333333

[D]
1 2 3 4
5 6 7 8
9 10 11 12
上記のようなテキストファイルA.txtがあったとして
この中から
[B]
222222222
222222222
333333333

AA

のような別ファイルにBの項目だけをコピーして
B.txtを作成してのですが可能ですか?

A 回答 (2件)

可能かと言えば可能です。


テストしてませんが、こんな感じで出来ると思います。

if exist B.txt del B.txt
set X=0
for /f "delims=" %%A in (A.txt) do call :MAIN "%%A"
exit /b

:MAIN
echo %1|findstr /L "[" >NUL
if %ERRORLEVEL%==0 set X=0
echo %1|findstr /L "[B]" >NUL
if %ERRORLEVEL%==0 set X=1
if %X%==0 exit /b
>>B.txt echo %~1
exit /b
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
試してみましたがうまくいきませんでした。
そのまま貼り付け部分修正等してみましたが、B.txtが消えるだけでした。
改行や文字ずれのせいですかね?

お礼日時:2021/08/03 19:28

> 改行や文字ずれのせいですかね?



質問文をよくみると、[B] のところの [ が全角になってますね。
全角半角に無頓着だと意図通りに動かないです。
実際のファイル中の全角半角に合わせてfindstr の引数を書きましょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
上手くいきました。
後学のために確認したいのですが
if exist B.txt del B.txtで Bがあれば削除
set X=0  でXに0代入
for /f "delims=" %%A in (A.txt) do call :MAIN "%%A"
for文でAにA.txtを代入
exit /b 
メインで[を検索して0にいれて
[B]をX=1として
echo %1|findstr /L "[" >NUL
if %ERRORLEVEL%==0 set X=0
echo %1|findstr /L "[B]" >NUL
if %ERRORLEVEL%==0 set X=1

Bに0以外をいれるって感じですか?
if %X%==0 exit /b
>>B.txt echo %~1
exit /b

このような考え方ですかね?調べて
指定範囲の行を削除(例:2行目〜4行目)
onigsed -e "2,4d" "入力.txt" > "出力.txt"
だとうまくいかなくて
教えていただけたらありがたいです。

お礼日時:2021/08/03 23:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!