2015-08-05 2 views
0

Я пытаюсь получить путь к службе в переменной в моем скрипте cmd. Когда он выполняется, я получаю строку, обозначающую set idmsys = C: \ Windows \ System32 \ spoolsv.exe, но на самом деле она не устанавливает переменную. Может ли кто-нибудь объяснить, почему?cmd script - set не может быть выполнен

Вот фрагмент кода:

wmic service spooler get pathname | for /f %%i in ('find /I "spool"') do set idmsys=%%i 

Если я эхо% idmsys% впоследствии переменная пуста.

+0

Когда команда передана с помощью '| batch_command' это создаст экземпляр нового экземпляра 'CMD.exe' ... Запустите' for/F 'tokens = 1 "' против '(' wmic service spooler get pathname ^, SystemName^| find/I" spool "')' скорее. – JosefZ

+0

Работал как чемпион Я не знал, что это создаст экземпляр нового экземпляра CMD.exe. Очень признателен. – user2048863

ответ

0

Run, а

for /F "tokens=1" %%i in (' 
     wmic service spooler get pathname^, SystemName ^| find /I "spool" 
    ') do set "idmsys=%%i" 

Когда команда поступает с | batch_command это будет создавать новый экземпляр CMD.exe. Proof:

==>wmic process where "CommandLine like 'wmic%' or CommandLine like 'findstr%' or CommandLine like '%cmd%'" get caption, commandline, ProcessID, ParentProcessID /value | findstr "^" 

Caption=cmd.exe 
CommandLine="C:\Windows\system32\cmd.exe" 
ParentProcessId=3096 
ProcessId=4148 

Caption=WMIC.exe 
CommandLine=wmic process where "CommandLine like 'wmic%' or CommandLine like 'findstr%' o 
r CommandLine like '%cmd%'" get caption, commandline, ProcessID, ParentProcessID /value 
ParentProcessId=4148 
ProcessId=2084 

Caption=findstr.exe 
CommandLine=findstr "^" 
ParentProcessId=4148 
ProcessId=4596 

==> 

Любые изменения, внесенные в окружающую среду в даже ребенкаcmd экземпляра параллельно или не влияет на параллельно и даже родительский один. Доказательство:

d:\bat>set idmsys 
Environment variable idmsys not defined 

d:\bat>cmd /E /V /C cd files ^& set "idmsys=!CD!" ^& set idmsys ^& pause 
idmsys=d:\bat\files 
Press any key to continue . . . 

d:\bat>set idmsys 
Environment variable idmsys not defined 

d:\bat> 
Смежные вопросы