0

変数をテキスト ファイルに出力する以下のコード スニペットがあります。 %drone%は単純なテキスト文字列になり、%counter%繰り返しをカウントするためにループ内にある数値です。

echo %drone% !counter!正しい値が画面にエコーされますが、コードecho Done: %drone% Files deleted: !tempcounter! >> clearTempFilesonDrones.txtでは、!tempcounter!変数はファイルに出力されるときに空白になります。

一時変数に設定して使用しようとしましたが、うまくいきませ%tempvariable%んでした。"!counter!"また、それが単なる数字ではなく文字列であると思われる場合に備えて試してみましたが、どちらも機能しませんでした。

echo %drone% %counter%
endlocal

echo Done: %drone% Files deleted: !counter! >> clearTempFilesonDrones.txt

何か案は?

現在のクライアントでブロックされているため、コード全体をペーストビンなどにコピーできないため、抜粋をアップロードしました。

4

2 に答える 2

2

あなたのエンドローカルは遅延拡張を終了します。つまり、使用できません! その後の変数。単純に使ってみてください

echo Done: %drone% Files deleted: %counter% >> clearTempFilesonDrones.txt

!temp!コードブロックで最初にアクセスされる変数は、%temp%その後通常の方法でアクセスできることに注意してください

それでもうまくいかない場合は、を削除するendlocalか、最後のエコーの下の行に配置することをお勧めします。

于 2016-08-29T13:40:22.743 に答える
1

setlocalオプションの 4 つのパラメーターのうち 1 つまたは 2 つを使用した場合と使用しない場合の動作のように見えますが、実際にendlocalはわかりません。

で答えを見る

setlocalこれは、実際に何をするのかを例を挙げて詳しく説明してendlocalいます。

drone環境変数との現在の値は、counterによって削除された現在の環境変数テーブルから、 の前にアクティブになり、 の後に再びendlocalアクティブになる、復元された環境変数テーブルに渡される必要があります。setlocalendlocal

これは次のように行うことができます。

echo %drone% %counter%
endlocal & set "drone=%drone%" & set "counter=%counter%"

echo Done: %drone% Files deleted: %counter% >>clearTempFilesonDrones.txt

endlocalコマンドと 2 つのコマンドを含むコマンド ライン全体setは、最初に Windows コマンド プロセッサによって現在の環境変数の値で前処理され、その結果、変数参照が現在の値に置き換えられます。したがって、行は前処理後です。

endlocal & set "drone=value of drone variable" & set "counter=counter value"

最初endlocalに実行され、現在の環境変数テーブルを破棄し、以前の環境変数テーブルを復元します。次にset、現在アクティブな環境変数テーブルの 2 つの変数に 2 つの文字列を割り当てる 2 つのコマンドが実行されます。

演算子の説明については、Windows バッチ ファイルを使用した複数のコマンドを使用した単一行&の回答を参照してください。

さらに、コマンド プロンプト ウィンドウを開いて次のコマンドを実行し、各コマンドで表示されるすべてのヘルプ ページを注意深く読むことをお勧めします。

  • endlocal /?
  • set /?
  • setlocal /?

組み込みのヘルプは、参照されている回答ほど詳細ではありませんが、それでも読む必要があります。

于 2016-08-29T15:08:37.240 に答える