DOS设置variables仅在执行后可用

我有一个非常简单的脚本,我想从文本文档(单行,一个值)中获取一个值,并将其传递给taskkill – 它也需要是一个class轮,所以我有:

set /p pidtokill=<C:\temp\pid.txt && taskkill /F /PID %pidtokill% 

问题是pidtokillvariables只是在taskkill命令执行后才更新,例如,如果我运行两次taskkill的作业,但第一次使用variables中存储的前一个值…为什么不是为taskkill命令设置“及时”的pidtokill值?

你目睹的是“只是它的工作方式”( 见“多行命令在一行”部分 )。

在batch file中,缺省行为是一次读取和展开一行variables,如果使用&在单行上运行多个命令,那么在执行移动到下一行之前,任何variables更改都将不可见

如果你想要它的工作,你需要把你的“单行”放在一个batch file中,然后使用“SETLOCAL EnableDelayedExpansion”。 当然,在这一点上,你可能只是分两行来做。

如果你没有绑定到batch file,在Powershell中,你可以在一行中完成,没有variables: Stop-Process -Id (Get-Content c:\temp\pid.txt)