DOS 设置变量仅在执行后才可用

DOS 设置变量仅在执行后才可用

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

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

问题是 pidtokill 变量仅在 taskkill 命令执行后才更新,例如,如果我运行该命令两次,taskkill 会起作用,但第一次它将使用存储在变量中的先前值...为什么 pidtokill 值没有为 taskkill 命令“及时”设置?

答案1

你所见证的正是“它运作的方式”(参见“一行上多个命令”部分)。

在批处理文件中,默认行为是一次读取和扩展一行变量,如果使用 & 在一行上运行多个命令,则任何变量更改都将不可见,直到执行移至下一行

如果要让它工作,您需要将“一行”放入批处理文件中,然后使用“SETLOCAL EnableDelayedExpansion”。当然,此时您也可以只用两行来完成。

如果您不受批处理文件的约束,则在 Powershell 中您可以在一行中完成此操作,而无需变量:Stop-Process -Id (Get-Content c:\temp\pid.txt)

相关内容