Windows

DOS 設置變數僅在執行後可用

  • June 21, 2017

我有一個非常簡單的腳本,我想從文本文件中獲取一個值(單行,一個值)並將其傳遞給 taskkill - 它也需要是一個單行,所以我有:

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

問題是 pidtokill 變數僅在 taskkill 命令執行後更新,例如,如果我執行命令兩次 taskkill 工作,但第一次它將使用儲存在變數中的先前值……為什麼不是為 taskkill 命令“及時”設置 pidtokill 值?

您所看到的是“它的工作方式”(請參閱“一行上的多個命令”部分)。

在批處理文件中,預設行為是一次讀取和展開變數一行,如果您使用 & 在一行上執行多個命令,那麼在執行移至下一行之前,任何變數更改都將不可見

如果你想讓它工作,你需要把你的“單線”放在一個批處理文件中,然後使用“SETLOCAL EnableDelayedExpansion”。當然,此時您不妨分兩行完成。

如果您不依賴批處理文件,在 Powershell 中,您可以在一行中完成,無需變數:Stop-Process -Id (Get-Content c:\temp\pid.txt)

引用自:https://serverfault.com/questions/857075