2012-07-27 22 views
9

EDITAR: No había nada de malo con el código siguiente. El error venía de otro lado.Ejecutando cadena variable como comando en el proceso por lotes

La variable de comando es el comando que deseo ejecutar. La variable de nombre está sacando una lista de nombres de computadora. Cuando echo un comando! devuelve el valor que quiero usar. ¡Eso debería ejecutar el comando necesario para eliminar todas las máquinas, sin embargo, cuando realmente ejecuto el comando! o% command%, la variable de nombre no se agrega y falla.

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 

Respuesta

10

%command% no va a funcionar porque se expande en tiempo de análisis, por lo que el valor expandido es el valor de comando antes de ejecutar el bucle.

No sé por qué !command! no funciona. Normalmente, se desea utilizar la expansión normal en lugar de la expansión retardada cuando se ejecuta código en una variable porque la expansión retardada limita algunas de las operaciones que puede realizar. Tiene que ver con cómo funciona el analizador de CMD. Pero no veo nada en su comando que pueda causar problemas con la expansión retrasada.

Trate call %%command%%

+0

Resulta que había un problema de ejecutarlo contra el programa que estoy usando. El código es correcto pero el programa no lo permite. Tu respuesta fue útil, gracias. – spassen

Cuestiones relacionadas