2012-07-27 24 views
9

編集:以下のコードでは何も問題はありませんでした。エラーは他の場所から来ていました。可変文字列をバッチスクリプトでコマンドとして実行する

command変数は実行したいコマンドです。名前変数がコンピュータ名のリストを取得しています。エコー!コマンド!私は使用したい値を返します。しかし、実際には!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 

答えて

10

%command%は動作しません。

!command!が機能しない理由はわかりません。通常、遅延拡張は実行可能な操作の一部を制限するため、変数内でコードを実行するときは、遅延拡張の代わりに通常の展開を使用します。これは、CMDパーサーの仕組みと関係があります。しかし、私はあなたのコマンドで遅延拡張で問題を引き起こすべきものは見当たりません。

お試しcall %%command%%

+0

私が使用しているプログラムに対して問題が発生しました。コードは正しいが、プログラムはそれを許可していない。あなたの答えは役に立ちましたが、ありがたいです。 – spassen

関連する問題