バッチファイルの作成にあまり慣れていないので、おそらく何か間違ったことをしているのでしょうが、エコーのオフ/オンに本当に問題があります。(とはいえ、私が見逃した他のエラーがあれば、遠慮なく指摘してください)
これが私のコードの簡略版です:
@echo off
setlocal
set args=
set dir="."
:getargs
IF "%2"=="" (
set dir="%1"
goto callbatch
)
set args=%args% %1
shift
goto getargs
:callbatch
for %%f in (%dir%\*.txt) do (
echo processing %%f
"%BATCHHOME%\batch.bat %args% %%f
echo
)
したがって、基本的に、単一のtxtファイルに対して何かを行うBATCHHOMEにバッチファイルがあり、特定のディレクトリ内のすべてのtxtファイルを処理するバッチファイルを作成したいと考えています。ループ内の唯一のエコーは、問題をよりよく説明するためのものです。
さて、ここで私は問題を抱えています。この出力は次のようになります。
processing foo\text1.txt
some output from batch.bat
ECHO is on.
C:\somedir>(
echo processing foo\text2.txt
"C:\the\path\of\batch.bat" the arguments here foo\text2.txt
)
ECHO is on.
C:\somedir>(
echo processing foo\text3.txt
"C:\the\path\of\batch.bat" the arguments here foo\text3.txt
)
ECHO is on.
(etc)
わかりました...呼び出しているバッチ ファイルがエコーをオンにする理由はわかりませんが、作成できなかったので、毎回オフに戻します。最後の部分を次のように変更しました。
:callbatch
for %%f in (%dir%\*.txt) do (
echo processing %%f
"%BATCHHOME%\batch.bat %args% %%f
echo off
)
echo
echo on
echo
echo Finished!
(ここでも、デバッグ用に 2 つの "echo" が存在します) 出力は次のようになります。
processing foo\text1.txt
some output from batch.bat
processing foo\text2.txt
some output from batch.bat
processing foo\text3.txt
some output from batch.bat
(etc.)
ECHO is off.
ECHO is on.
Finished!
これでほぼ完璧ですが、少し変わったところがあります。エコーがオンの場合、「Finished!」と表示されるのはなぜですか? 「エコー終了!」の代わりに?ただし、より大きな (しかし関連する) 問題は、バッチ ファイルが完了すると、パスが表示されなくなることです。つまり、次の代わりに:
C:\Somedir>_
私はただ得る
_
パスを再度表示するには、「echo on」と手動で入力する必要があります。どこで私は間違えましたか?
編集:明確にするために、「エコー」自体がエコーの現在のステータスを出力することを認識しています。それが私が意図したことです。最初のコードでは、他のバッチ ファイルを呼び出した後、echo が不思議なことにオンになることを示しています。2 番目のものでは、バッチ ファイルの最後でエコーがオンになっていることを示していますが、動作はオンになっていないかのようです。それが私の問題です。