• 締切済み

コマンドプロンプトのコマンド処理が途中で終わる2

お世話になります。 以前 http://qa.itmedia.co.jp/qa9168537.html にて質問及び解決させていただいたのですが、 確認不足で思った処理にならない部分がありました。 上記URLの内容を抜粋します。 ============================================================= メインbat内にサブ1bat、サブ2batが存在し以下構成になっています。 (サブ1batで作成したデータを用いてサブ2batの処理を行います。) 問題は メインbatを実行した場合、サブ1batが実行された後にサブ2batが実行されず終わってしまいます。 (メインbatにサブ1batだけ、メインbatにサブ2batだけだと、各々問題なく処理が行われることは確認。) 以下、メインbat処理----------------------------------- setlocal enabledelayedexpansion FOR /f "delims=, tokens=1-3" %%i in (テキストファイルパス) do ( IF "%%i"=="1" ( サブ1bat %%j %%k ) ) endlocal setlocal enabledelayedexpansion FOR /f "delims=, tokens=1-3" %%i in (テキストファイルパス) do ( IF "%%i"=="1" ( サブ2bat %%j %%k ) ) endlocal ---------------------------------------- ※テキストファイルパスはループのもとになっているcsvファイルです。 ※各サブbatは戻り値を返しません。 ============================================================= この処理について サブ1bat及びサブ2batそれぞれの呼び出しで callを先頭に記述する必要があると以前回答いただき 処理としてはサブ1サブ2が全て処理されました。 そこで今回再動作検証した時にFORでループする件数が5件あったのですが、 5件だとサブ1batだけ5件処理が行われ、サブ2batの処理は行われないままメインbatが終了してしまいました。 FORでループする件数が1件だと問題ないなくサブ1サブ2それぞれ実行されたのですが、 複数件あると実行されませんでした。 どこに問題があるのかわからないので困っています。 宜しくお願いいたします。。

  • ofvar
  • お礼率50% (1/2)

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

実行しているバッチファイル内容を改変せずにそのままコピペして下さい。

関連するQ&A

  • コマンドプロンプトのコマンド処理が途中で終了する

    メインbat内にサブ1bat、サブ2batが存在し以下構成になっています。 (サブ1batで作成したデータを用いてサブ2batの処理を行います。) 問題は メインbatを実行した場合、サブ1batが実行された後にサブ2batが実行されず終わってしまいます。 (メインbatにサブ1batだけ、メインbatにサブ2batだけだと、各々問題なく処理が行われることは確認。) 以下、メインbat処理----------------------------------- setlocal enabledelayedexpansion FOR /f "delims=, tokens=1-3" %%i in (テキストファイルパス) do ( IF "%%i"=="1" ( サブ1bat %%j %%k ) ) endlocal setlocal enabledelayedexpansion FOR /f "delims=, tokens=1-3" %%i in (テキストファイルパス) do ( IF "%%i"=="1" ( サブ2bat %%j %%k ) ) endlocal ---------------------------------------------------- ※テキストファイルパスはループのもとになっているcsvファイルです。 ※各サブbatは戻り値を返しません。 他の作業の合間に調べたりしているのですが一向に直せず困っています。 ご助力いただけると大変助かります。

  • コマンドプロンプトの質問です。

    コマンドプロンプトの質問です。 EndLocalコマンドは無くても大丈夫なのですか? 図書などには、SetLocalコマンドの効果は、「バッチフィルの終わりまで」と書いてあります。と言うことは、これら2つのコマンドを入れ子で使う場合以外、褒められたことではありませんが、余り神経を使わなくてもよいのでしょうか?バッチファイルの先頭と最後に習慣的に記載していますが、 if の中に簡単に goto :EOF を書き、EndLocalコマンドを実行しないでバッチ処理を終わっています。終ると決めたら、EndLocalコマンドを実行後goto :EOFを実行するべきなのでしょうが、面倒なので横着をしています。 後で心配になり時々Setコマンドで調べてもローカル変数のつもりで設定した変数は残っていないので、大丈夫なのだろうと思っているのですが、気になります。 皆さんは、どうしていますか?

  • コマンドプロンプト欲しい結果が出力できない

    Windows2000です。 dateコマンドの日付から、2003年の「03」を出力したいのですが、うまくできません。 C:\>DATE /T 2003/07/07 月 C:\>for /f "tokens=1-2 delims=/,2 " %i in('date /t') do set year=%i と入力すると、 C:\>set year=003 と出てきます。 C:\>for /f "tokens=1-2 delims=/,20 " %i in ('date /t') do set year=%i と入力すると、 C:\>set year=3 と出てきます。これを、 C:\>set year=30 となるようなコマンドができません。 コマンドプロンプトに強い方がいらっしゃったら、教えてください・・・。

  • コマンドプロンプトのcallと遅延展開

    こんにちは。 コマンドプロンプトにおいて、call と !・・・! による環境変数の遅延展開について、 1つ疑問に思う事がありましたので、質問させて頂きました。 まず、以下のようなバッチスクリプトtest.batを作成しました。 -------------------------------------------------------- @echo off setlocal setlocal enabledelayedexpansion set aaa=XXX^|cat echo 1:!aaa! call echo 2:!aaa! echo 3:%aaa% call echo 4:%aaa% --------------------------------------------------------- これを実行した結果、以下のようになりました。 --------------------------------------------------------- C:\Users\kei >test.bat 1:XXX|cat 3:XXX 4:XXX --------------------------------------------------------- callは、それ以降のコマンドラインを2度解析するだけなのに、 なぜ、call echo 2:!aaa! の行を実行した時に、何も出力されないのでしょうか?

  • コマンドプロンプトのFOR文がダブルクリックで実行できない。

    コマンドプロンプトのFOR文がダブルクリックで実行できない。 お世話になります。 まず当方の環境は以下になります。 OS:Windows XP Pro SP2 C:\tempにtest.batというバッチファイルを作成し以下を記述しました。 FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i で、このtest.batをダブルクリックすると実行できないんです。 ただしコマンドプロンプトからでは問題なく実行できます。 また別PCではダブルクリック&コマンドプロンプトで問題なく実行できます。 どのようにすれば解決できるのかわからずに困っております。 どなたかアドバイスお願いできますでしょうか。

  • コマンドプロンプトのFOR文がダブルクリックで実行できない

    お世話になります。 まず当方の環境は以下になります。 OS:Windows XP Pro SP2 C:\tempにtest.batというバッチファイルを作成し以下を記述しました。 FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i で、このtest.batをダブルクリックすると実行できないんです。 ただしコマンドプロンプトからでは問題なく実行できます。 また別PCではダブルクリック&コマンドプロンプトで問題なく実行できます。 どのようにすれば解決できるのかわからずに困っております。 どなたかアドバイスお願いできますでしょうか。

  • コマンドプロンプトでファイル読み込み

    For文を使って、パラメータファイルから値を読み込みたいのですが、 "C:\Documents and Settings\~"等(パスにスペースが含まれる場合)に置かれた場合、 ファイルを読み込んでくれず困っております。 ()内のファイル指定で、""(ダブルクォーテーション) や'(シングルクォーテーション)で囲むこともしてみましたが、ダメでした。。 どう指定すればよいのかご教授下さい。 よろしくお願いいたします。 【パラメータファイル(tmp.txt)】 ABC=12345 【バッチファイル(test.bat)】 for /F "delims== tokens=1,2" %%A in (D:\tmp.txt) do if %%A==ABC set value_1=%%B echo %value_1% pause

  • コマンドプロンプトのスクリプトの意味がわかりません

    こんにちは。コマンドプロンプトの意味がわかりません。お教え頂けませんでしょうか? http://bgworks.info/blog/2007/01/echo_type.html @echo off setlocal set o=a.log if "%~1"=="" exit /b cd %1 || exit /b if exist %o% del %o% for /r %%a in (*.txt *.htm*) do >> "%~1\%o%" (echo %%a && type "%%a") endlocal 調べてみて、if exist %o% del %o%までは理解ができました。 次の行の、forループで再帰的に何かをやるところまではわかりましたが、そこからがよくわかりません・・・ ご解説お願い致します!

  • バッチで配列に入れた値が正しく表示されない

    バッチファイルでファイルから読み込んだ内容を配列(もどき)の 変数に格納し、直後、表示させるということをやっているのですが、 配列に格納した値を正しく表示してくれません。 どうすれば良いのか教えてください。 都合により、setlocal~endlocalを使用しています。 ----- sample.txt 1234567890 123 456 789 0 abc def ghi jik lmn opq rst uvw xyz abcxyz ABC XYZ 1234567890 ----- a.bat echo off setlocal enabledelayedexpansion for /F "delims=" %%A in (c:\tmp\sample.txt) do ( set cnt=0 set rdtxt=%%A echo -item: %%A for %%b in (!rdtxt!) do ( echo -item2: %%b set x[!cnt!]=%%b echo !cnt!:!x[!cnt!]! set /a cnt=!cnt!+1 ) ) endlocal 結果ですが、 「echo !cnt!:!x[!cnt!]!」での表示が正しくない 0:cnt 0:cnt 1:cnt 2:cnt となってしまう。

  • FORコマンドで不定期に表示される意味不明なメッセージを回避する方法は?

    (「Windows/Windows Vistaフォーラム/Answersアシスタント」から飛ばされてきました。よろしくお願いします) 以下の様なバッチファイル(for1.bat, for2.bat)を作成して、コマンドプロンプトで何回か実行すると、正常な出力と同時に、不定期に「ファイル が見つかりません。」という意味不明なメッセージが表示されます。 これは何で、どうすれば回避できるのでしょうか? コマンドラインオプションとしてダブルクォートされた文字列を引数にとるバッチファイルを作りたいのですが、 > foo.bat " a""a " のような呼び出し方をした時に挙動がおかしくなったので、その原因を調べていたら、FOR文が時々不可解な動作をしていて、その典型的な例をfor1.batとfor2.batにまとめた次第です。 ---8<---8<---8<---[for1.bat:ここから ]---8<---8<---8<---8<--- @ECHO OFF CALL :SUB "a""a" CALL :SUB " a""a" CALL :SUB "a ""a" CALL :SUB " a ""a" CALL :SUB "a"" a" CALL :SUB "a""a " CALL :SUB "a"" a " CALL :SUB " a"" a" CALL :SUB "a ""a " CALL :SUB " a "" a " CALL :SUB " a""a " CALL :SUB "a "" a" CALL :SUB " a "" a" CALL :SUB " a ""a " CALL :SUB " a"" a " CALL :SUB "a "" a " GOTO EOF :SUB FOR /F "tokens=*" %%a IN ("%1") DO ECHO %%a EXIT /B 0 :EOF ---8<---8<---8<---[for1.bat:ここまで ]---8<---8<---8<---8<--- ---8<---8<---8<---[for2.bat:ここから ]---8<---8<---8<---8<--- @ECHO OFF FOR /F "tokens=*" %%a IN (""a""a"") DO ECHO %%a FOR /F "tokens=*" %%a IN ("" a""a"") DO ECHO %%a FOR /F "tokens=*" %%a IN (""a ""a"") DO ECHO %%a FOR /F "tokens=*" %%a IN ("" a ""a"") DO ECHO %%a FOR /F "tokens=*" %%a IN (""a"" a"") DO ECHO %%a FOR /F "tokens=*" %%a IN (""a""a "") DO ECHO %%a FOR /F "tokens=*" %%a IN (""a"" a "") DO ECHO %%a FOR /F "tokens=*" %%a IN ("" a"" a"") DO ECHO %%a FOR /F "tokens=*" %%a IN (""a ""a "") DO ECHO %%a FOR /F "tokens=*" %%a IN ("" a "" a "") DO ECHO %%a FOR /F "tokens=*" %%a IN ("" a""a "") DO ECHO %%a FOR /F "tokens=*" %%a IN (""a "" a"") DO ECHO %%a FOR /F "tokens=*" %%a IN ("" a "" a"") DO ECHO %%a FOR /F "tokens=*" %%a IN ("" a ""a "") DO ECHO %%a FOR /F "tokens=*" %%a IN ("" a"" a "") DO ECHO %%a FOR /F "tokens=*" %%a IN (""a "" a "") DO ECHO %%a ---8<---8<---8<---[for2.bat:ここまで ]---8<---8<---8<---8<---

専門家に質問してみよう