我有一个非常简单的脚本,我想从文本文档中获取一个值(单行,一个值)并将其传递给 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)