10

編集: 以下のコードに問題はありませんでした。エラーは他の場所から発生していました。

コマンド変数は、実行したいコマンドです。name 変数は、コンピューター名のリストを取得しています。コマンドをエコーすると!使用したい値を返します。ただし、実際に !command! を実行すると、すべてのマシンを削除するために必要なコマンドが実行されるはずです。または %command% の場合、name 変数が追加されず、失敗します。

d:
cd "Program Files\admin"
setlocal EnableDelayedExpansion
SET string=%
for /f "tokens=*" %%a in (oldMachines.txt) do (
set name=%%a
set command=sbadmcl.exe AdminUser:admin -AdminPwd:password -Command:DeleteMachine -Machine:!name!
REM echo !name!
REM echo !command!
REM !command!
%command%
)
pause
4

1 に答える 1

11

%command%解析時に展開されるため機能しません。したがって、展開された値は、ループが実行される前のコマンドの値です。

なぜ!command!動かないのかわかりません。通常、変数でコードを実行するときは、遅延拡張ではなく通常の拡張を使用する必要があります。これは、遅延拡張によって実行できる操作の一部が制限されるためです。これは、CMDパーサーがどのように機能するかと関係があります。しかし、拡張の遅延で問題を引き起こすはずのコマンドには何も表示されません。

試すcall %%command%%

于 2012-07-27T16:48:48.917 に答える