• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DOSのコマンドでうまく処理が行えません)

DOSコマンドでの処理がうまく行えない場合の対処方法

このQ&Aのポイント
  • DOSコマンドでバッチ処理を行う際に、条件分岐がうまく機能しない場合があります。この記事では、具体的な例を挙げながら、条件分岐の書き方と修正方法について解説します。
  • また、DOSコマンドの文法や基本的な使い方についても触れます。初心者の方でも理解しやすいように、具体的な例と解説を交えて紹介します。
  • さらに、バッチファイルの作成に役立つ情報を探している場合は、例文つきの詳しい解説があるHPを参考にすることをおすすめします。たくさんの例文を使って実践的なバッチファイル作成のヒントを得ることができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.2

まず、for文を複文(複数行を括弧でくくる書き方)で記載する場合、%変数名% はfor文のループに関係なく、 ループが始まる前に変数の内容に置き換えられてから実行されてしまうことをご理解ください。 したがって、変化する%%Jを環境変数に代入して、if文で比較するような書き方はたいがいうまくいきません。 setlocal ENABLEDELAYEDEXPANSION による環境変数の遅延展開を使うか、以下のように call 文で サブルーチンを呼び出す書き方をおすすめします。以下はcall文を使った例です。 同時にIF文の比較の細かいところを直しました。 FOR /F "delims=" %%J IN (A.TXT) DO call :sub %%J exit /b :sub SET ANS_SET=%1 SET ANS_VAL=%ANS_SET:~0,3% IF "%ANS_VAL%"=="SPC" ( ECHO テストA >> test.txt ) else ( ECHO テストB >> test.txt ) goto :EOF

doragon77
質問者

補足

ご回答ありがとうございました。 実は、この処理には続きがあり、テストAの処理においても、A.txtの内容により、 それぞれの処理を行いたいのです。 今度は頭四文字で処理を分けたつつ、一つ前の処理をテストAの処理を終了時に逆さまに 処理を閉じていきたいのです。 上記のsub内のテストAの処理手順は下記のとおりとなります。 (1)1レコード目を読み、テストA1を処理する。 (2)2レコード目を読み、一件前と頭4文字が同じなので、テストA1の処理をする。 (3)3レコード目を読み、一件前と頭4文字が違うので、テストA2の処理をする。  続けてテストA3の処理を行うのですが、この時、先に2レコード目の処理を終了する処理をし、  その後、1レコード目の処理を終了する処理を行います。 (4)1レコードと2レコードの処理が終了したので、3レコード目の処理のテストA1の処理を  行います。 (5)頭4文字が同じ場合は上記のような処理を繰り返します。 (6)頭の3文字が違う場合はテストBの処理を行います。 なかなか文章では説明しずらいのですが。。。 ややこしい質問ですいません。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

まず最初に…、内容については、全く考慮していません。 で、 > IF %ANS_SET% == "SPC" ( ANS_VAL は何のためにあるの?

すると、全ての回答が全文表示されます。

関連するQ&A