- 締切済み
先輩たち 教えてください~
みなさん こんにちは windowsのバッチでテキストファイルの修正処理を作りたいですが、なかなかうまく行かなくて、分かる方いらっしゃいましたら、ぜひ教えていただきたいです。 それでは、したい処理の内容を説明します。 以下のような内容のファイル1.txtあります *******.*******@1a.com 田中1 運営1 *******.*******@2b.com 田中2 運営2 *******.*******@3c.com 田中3 運営3 理想の内容は↓ 田中1 *******.*******@1a.com 運営1 田中2 *******.*******@2b.com 運営2 田中3 *******.*******@3c.com 運営3 forで回したところ、同じファイルにあるため、うまく行かなくて、 必要な情報を1個1個取りだしても、同じ行で合成する方法もよく分かりません・・・ すみません、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
CMD /v:onでコマンドプロンプトを起動して sample.bat ------ ここから @echo off set bstr= for /f "tokens=1,* delims= " %%i in ( ファイル1.txt ) do if '!bstr!'=='' (set bstr=%%i) ELSE (if NOT "%%j"=="" ( echo %%i !bstr! %%j)&&set bstr=) set bstr= ----- sample.bat ここまで といった具合で出来るようです for /f から &&set bstr=) までを改行を含めないで記述してください
- utakataXEX
- ベストアンサー率69% (711/1018)
フォーマットとしては メールアドレス 名前 部署名 空白行 が連続している、と言う事ですよね。 で、結論から言うと、これはDOSコマンドのFORでやるのは無理 があるように思います。 不可能ではありませんが、細々としたサブバッチが4~5個必要 だし、かなり処理も遅くなるかと。 VBScriptとかにした方が、作る時間も処理時の実行時間も短縮 できると思いますね。 ■VBScriptでやる場合の概要 ・Do Whileでテキスト1行づつ読み込み ⇒行カウント++ ⇒行カウントが1の時、バッファをメアド用変数に格納 ⇒行カウントが2の時、バッファを半角スペースでスプリットし、 名前用変数、部署名用変数にそれぞれ格納 ⇒行カウントが3の時、格納した変数を1行に連結して1行書き出し 行カウントクリア この方法は、「メールアドレス」「名前 部署名」「空白行」 の連続以外のフォーマットではできません。 たとえば、「名前 部署名」の行が「名字 名前 部署名」で混在 していたりとか、データの最終行が「名前 部署名」だったり するとうまくいかないと思います。 因みに。「あくまでもバッチのみで!」と言う場合は、VBScriptで やっている内容をコマンド毎にバッチファイルとして実装してやれば できなくはありません。 # split.bat なんてメチャメチャ遅そうだなw