質問: \\server-!ctr! password /user:domain\username echo %target% echo net use z: %target% echo copy %%x "z:%%~pnx" /y echo net use z: /delete ) ) 私のctr変数は適切に設定されていますが、それを連結しようとすると、\ server-!ctr!だけが表示されます。パスワード/ user:domain\username。 %!ctr!%、%ctr%、%% ctr、%% ctr %%を試しましたが、すべて、値ではなくリテラル文字を返すようにしています。興味深いことに、setコマンドを実行すると、echo!ctr!値を返します。また、設定されたパラメーターを引用符で囲んでみましたが、同じ結果で、引用符で囲んでいます。何が足りないのですか?
回答: 私は何が欠けていますかsetコマンドを正しく使用していません。set target = \\server-!ctr! password /user:domain\username これにより、「target」という変数が作成されます(名前の後の余分なスペースに注意してください)。さらに、式の右側にはスペースが含まれているため、引用符も必要です。 変数名または文字列の前後の余分なスペースは無視されません。setは他の多くのスクリプト言語のように余分なスペースを許容しません。 ソース セット 次の交換を試してください。set target="\\server-!ctr! password /user:domain\username" また、遅延拡張を正しく使用(理解)していません。echo %target% echo net use z: %target% 遅延拡張により、変数は解析時ではなく実行時に拡張されます。 ソース enabledelayedexpansion これは次のようになります。echo !target! echo net use z: !target! 参考文献 windows cmdコマンドラインのa-zインデックス windows cmdコマンドの分類リスト enabledelayedexpansion -遅延拡張により、変数は解析時ではなく実行時に拡張されます。 set -cmd環境変数を表示、設定、または削除します。 setで行われた変更は、現在のcmdセッションの間のみ保持されます。