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