【问题标题】:cmd script - set does not apear to be executedcmd 脚本 - set 似乎没有被执行
【发布时间】:2015-10-28 16:52:27
【问题描述】:

我正在尝试将服务的路径名放入我的 cmd 脚本中的变量中。当它执行时,我得到这条线说 set idmsys=C:\Windows\System32\spoolsv.exe 但它实际上并没有设置变量。谁能解释一下为什么?

这里是sn-p:

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

如果我之后执行 echo %idmsys%,则变量为空。

【问题讨论】:

  • 当一个命令使用| batch_command 进行管道传输时,这将实例化一个新的CMD.exe instance... 而是针对('wmic service spooler get pathname^, SystemName ^| find /I "spool"') 运行for /F "tokens=1"
  • 像冠军一样工作我不知道这会实例化一个新的 CMD.exe 实例。非常感谢。

标签: cmd set


【解决方案1】:

宁愿跑

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

当使用| batch_command 管道传输命令时,这将实例化一个新的CMD.exe 实例。 证明

==>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

==>

parallel 甚至 child cmd 实例中的环境所做的任何更改都不会影响 parallel 甚至 parent 一。 证明

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>

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多