問題タブ [delayedvariableexpansion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
101 参照

windows - バッチ スクリプトでの内部遅延展開 (Windows)

遅延拡張の内部で遅延拡張を行う必要があります。つまり、次のようになります。

もちろん、上記は有効ではないため、for ループを使用して回避しようとしましたが、成功しませんでした。

説明された動作をどのように達成できますか?

0 投票する
2 に答える
1287 参照

batch-file - setlocal が Windows バッチ ファイルの chdir に干渉するのはなぜですか?

バッチファイルを実行すると

ディレクトリは変更されませんが、実行すると

それは正常に動作します。これは、setlocal で期待されるものとまったく同じでなければなりません。ただし、環境変数がどのように表示されるかに関連する setlocal の定義を読むと、完全には明らかではありません。setlocal が実際に何を行い、なぜ chdir に干渉するのかを説明する良い機会になることを願っています。

0 投票する
2 に答える
4100 参照

batch-file - if ステートメントで遅延展開変数の部分文字列を取得できないのはなぜですか?

遅延展開変数を使用せずに if ステートメントで文字列操作がインラインで機能するのはなぜですか?それ以外の場合は失敗します。例えば:

これは正しく機能します。戻るSuccess。ただし、次のようにすると:

エラーが表示されます -4!==test was unexpected at this time.

明らかに、ifステートメントで変数set comp=!test:~0,4!を使用するだけで、次のようなことを行うことでこれを回避できます。!comp!

0 投票する
1 に答える
3963 参照

arrays - バッチ ファイル内の「配列」をループして要素をシフトする

Java ファイルから文字列配列の形式でコマンドを渡すバッチ ファイルがあります。コマンドには次のようなものが含まれます。

コマンド配列は、Java プログラムが実行されるたびに変化するため、動的です。バッチ ファイルで、最初の 3 つの要素 (この場合は A、B、および C) の値を取得する変数を作成します。次に、ディレクトリ文字列をシフトして、配列の最初の 3 つの要素を取得する必要があります。これまでのバッチコードは次のとおりです。

私が抱えている問題は、行にありset list[!old!]=!list[%new%]!ます。ご覧のとおり、遅延拡張を有効にしました。ただし、配列内の要素をエミュレートする list[...] 変数には !! が必要です。ただし、「新規」にも遅延展開を使用する必要があると思います。この場合、どうすればよいですか?それとも、それは実際の問題ではないのでしょうか? 「古い」変数と「新しい」変数は正しくインクリメントされていますが、echo !list[%old%]!行は毎回同じ値を返します。その行には同じ問題が存在すると予想されますが、「古い」-- ! で囲まれている必要がありますが、! は既に list[...] 変数に使用されています。では、ネストされた ! がステートメントに必要な場合はどうなるでしょうか? 助けてくれてありがとう!

0 投票する
2 に答える
109 参照

windows - ファイルの存在を確認するときに、DelayedExpansion 変数をドライブ文字として評価する

USBドライブをチェックするはずのこのコードブロックがあります。次に、それらをユーティリティドライブの1つとしてタグ付けするファイルがある場合、それらに対してrobocopy同期を実行して、それらが最新であることを確認します.

問題は、ファイルのパスを正しく評価していないことです。もし私はecho "!curDrive!\file.txt"それが印刷されます\file.txt"

関連する(クリーンアップ/匿名化された)スクリプトのビットは次のとおりです。

デバッグ用に入力したエコーは、すべての反復で期待される出力を取得します。

0 投票する
1 に答える
55 参照

batch-file - ファイルを読み込んで行番号+トークンを出力するためのバッチ?

これは私がやりたいことであり、ファイル (file.txt など) を読み取り、line# + トークンを出力するバッチです。

これは私がやろうとしたことです(明らかにうまくいきませんでした):

file.txt には以下が含まれます。

私が出力したいのは、次のとおりです。

このコードが実際に出力にスローしているもの:

何か案は?

0 投票する
1 に答える
567 参照

variables - 動的変数名を呼び出すにはどうすればよいですか?

さて、私はユーザー入力を「理解し」、その指示に従って実行するプログラムを作成しようとしています。人々は通常、「このファイルを開く」などの特定のコマンドを使用するだけで、ユーザーが正確にそれを入力した場合にのみ機能します。私はユーザーに少し余裕を持たせようとしています。そうすれば、ユーザーは自分のやりたいことを入力できるようになり、コンピューターが一般的なアイデアを理解できるようになります。そのとりとめのないブロックを脇に置いて、私は問題に遭遇しました。

その最後の行で行き詰まります...最後に記録された単語変数を使用しようとしています。

そんな感じ?

0 投票する
1 に答える
1680 参照

bash - 1回のgetopts呼び出しを通過し、1秒で解釈されるようにbashフラグ引数を引用する方法は?

スクリプトnerfはスクリプトherdを呼び出し、スクリプトはスクリプトを呼び出しますer。 に渡す必要のある引数を明示的に受け取るnerfon フラグを使用します。herder

これは以前は問題ではありませんでした。 がコマンド ラインから呼び出されたばかりのnerfときherdは、 -p フラグの引数を単一引用符で囲むことができ、 's によって解釈されることはありませんでしherdgetoptsが、代わりにer'sによって解釈されましたgetopts

しかし、最終的に に移動する必要があるフラグで値を生成したerので、 で変数を展開する必要があります$file_contentsが、に到達するまではnerfによって解釈されないようにします。getoptser

これら 3 つのスクリプトはいずれも変更できます。

上記のマークされた行で単一引用符を使用すると、リテラル文字列 "$er_args" が渡されます。二重引用符を使用すると、フラグは によって直接解釈されherdます。二重引用符の中に一重引用符を使用すると、フラグは getopts によって解釈されません。

ここにはエレガントな解決策はないと思いますが、間違っている場合はお知らせください。私が考えることができる唯一の解決策はくだらないです:

  1. を通じてすべてerのフラグを明示的に公開しherdます。
  2. erからコールを削除し、herd直接 に配置しnerfます。
  3. ???
0 投票する
2 に答える
2052 参照

batch-file - バッチ サブルーチン呼び出しで感嘆符をパラメーターとして渡す

このコミュニティのおかげで、感嘆符をエスケープしてバッチのdelayedExpansionブロックですぐに使用する方法をようやく学びました。(1つだけでなく2つのエスケープキャレットを使用してください、すばらしい)

しかし、エクスクラメーションマークを含む変数の内容をパラメータとしてバッチサブルーチンに渡す方法を見つけたり、理解したりできないようです。

例:

出力:

2 番目の「Hello」に感嘆符を含めたい。5行目で部分文字列置換のさまざまな順列を試しましたが、役に立ちませんでした。

ヘルプ