問題タブ [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.
windows - バッチ スクリプトでの内部遅延展開 (Windows)
遅延拡張の内部で遅延拡張を行う必要があります。つまり、次のようになります。
もちろん、上記は有効ではないため、for ループを使用して回避しようとしましたが、成功しませんでした。
説明された動作をどのように達成できますか?
batch-file - setlocal が Windows バッチ ファイルの chdir に干渉するのはなぜですか?
バッチファイルを実行すると
ディレクトリは変更されませんが、実行すると
それは正常に動作します。これは、setlocal で期待されるものとまったく同じでなければなりません。ただし、環境変数がどのように表示されるかに関連する setlocal の定義を読むと、完全には明らかではありません。setlocal が実際に何を行い、なぜ chdir に干渉するのかを説明する良い機会になることを願っています。
batch-file - if ステートメントで遅延展開変数の部分文字列を取得できないのはなぜですか?
遅延展開変数を使用せずに if ステートメントで文字列操作がインラインで機能するのはなぜですか?それ以外の場合は失敗します。例えば:
これは正しく機能します。戻るSuccess
。ただし、次のようにすると:
エラーが表示されます -4!==test was unexpected at this time.
明らかに、ifステートメントで変数set comp=!test:~0,4!
を使用するだけで、次のようなことを行うことでこれを回避できます。!comp!
arrays - バッチ ファイル内の「配列」をループして要素をシフトする
Java ファイルから文字列配列の形式でコマンドを渡すバッチ ファイルがあります。コマンドには次のようなものが含まれます。
コマンド配列は、Java プログラムが実行されるたびに変化するため、動的です。バッチ ファイルで、最初の 3 つの要素 (この場合は A、B、および C) の値を取得する変数を作成します。次に、ディレクトリ文字列をシフトして、配列の最初の 3 つの要素を取得する必要があります。これまでのバッチコードは次のとおりです。
私が抱えている問題は、行にありset list[!old!]=!list[%new%]!
ます。ご覧のとおり、遅延拡張を有効にしました。ただし、配列内の要素をエミュレートする list[...] 変数には !! が必要です。ただし、「新規」にも遅延展開を使用する必要があると思います。この場合、どうすればよいですか?それとも、それは実際の問題ではないのでしょうか? 「古い」変数と「新しい」変数は正しくインクリメントされていますが、echo !list[%old%]!
行は毎回同じ値を返します。その行には同じ問題が存在すると予想されますが、「古い」-- ! で囲まれている必要がありますが、! は既に list[...] 変数に使用されています。では、ネストされた ! がステートメントに必要な場合はどうなるでしょうか? 助けてくれてありがとう!
windows - ファイルの存在を確認するときに、DelayedExpansion 変数をドライブ文字として評価する
USBドライブをチェックするはずのこのコードブロックがあります。次に、それらをユーティリティドライブの1つとしてタグ付けするファイルがある場合、それらに対してrobocopy同期を実行して、それらが最新であることを確認します.
問題は、ファイルのパスを正しく評価していないことです。もし私はecho "!curDrive!\file.txt"
それが印刷されます\file.txt"
関連する(クリーンアップ/匿名化された)スクリプトのビットは次のとおりです。
デバッグ用に入力したエコーは、すべての反復で期待される出力を取得します。
batch-file - ファイルを読み込んで行番号+トークンを出力するためのバッチ?
これは私がやりたいことであり、ファイル (file.txt など) を読み取り、line# + トークンを出力するバッチです。
これは私がやろうとしたことです(明らかにうまくいきませんでした):
file.txt には以下が含まれます。
私が出力したいのは、次のとおりです。
このコードが実際に出力にスローしているもの:
何か案は?
variables - 動的変数名を呼び出すにはどうすればよいですか?
さて、私はユーザー入力を「理解し」、その指示に従って実行するプログラムを作成しようとしています。人々は通常、「このファイルを開く」などの特定のコマンドを使用するだけで、ユーザーが正確にそれを入力した場合にのみ機能します。私はユーザーに少し余裕を持たせようとしています。そうすれば、ユーザーは自分のやりたいことを入力できるようになり、コンピューターが一般的なアイデアを理解できるようになります。そのとりとめのないブロックを脇に置いて、私は問題に遭遇しました。
その最後の行で行き詰まります...最後に記録された単語変数を使用しようとしています。
そんな感じ?
bash - 1回のgetopts呼び出しを通過し、1秒で解釈されるようにbashフラグ引数を引用する方法は?
スクリプトnerf
はスクリプトherd
を呼び出し、スクリプトはスクリプトを呼び出しますer
。 に渡す必要のある引数を明示的に受け取るnerf
on フラグを使用します。herd
er
これは以前は問題ではありませんでした。 がコマンド ラインから呼び出されたばかりのnerf
ときherd
は、 -p フラグの引数を単一引用符で囲むことができ、 's によって解釈されることはありませんでしherd
たgetopts
が、代わりにer
'sによって解釈されましたgetopts
。
しかし、最終的に に移動する必要があるフラグで値を生成したer
ので、 で変数を展開する必要があります$file_contents
が、に到達するまではnerf
によって解釈されないようにします。getopts
er
これら 3 つのスクリプトはいずれも変更できます。
上記のマークされた行で単一引用符を使用すると、リテラル文字列 "$er_args" が渡されます。二重引用符を使用すると、フラグは によって直接解釈されherd
ます。二重引用符の中に一重引用符を使用すると、フラグは getopts によって解釈されません。
ここにはエレガントな解決策はないと思いますが、間違っている場合はお知らせください。私が考えることができる唯一の解決策はくだらないです:
- を通じてすべて
er
のフラグを明示的に公開しherd
ます。 er
からコールを削除し、herd
直接 に配置しnerf
ます。- ???
batch-file - バッチ サブルーチン呼び出しで感嘆符をパラメーターとして渡す
このコミュニティのおかげで、感嘆符をエスケープしてバッチのdelayedExpansionブロックですぐに使用する方法をようやく学びました。(1つだけでなく2つのエスケープキャレットを使用してください、すばらしい)
しかし、エクスクラメーションマークを含む変数の内容をパラメータとしてバッチサブルーチンに渡す方法を見つけたり、理解したりできないようです。
例:
出力:
2 番目の「Hello」に感嘆符を含めたい。5行目で部分文字列置換のさまざまな順列を試しましたが、役に立ちませんでした。
ヘルプ