首页 > 解决方案 > Powershell:停止解析参数在大括号内不起作用

问题描述

我需要检查一个文件是否在 XX 分钟内没有被修改,如果条件为真,则杀死锁定文件的 PID。确定文件是否在 XX 分钟内未被修改的唯一干净方法是在 powershell 中,但我发现杀死相关 PID 锁定文件的唯一方法是使用句柄 OS 命令。所以,我坚持使用 1/2 批次和 1/2 powershell 来完成我想要的。

我让它作为一个独立的命令可以很好地杀死 PID,但是一旦我将它们全部放在大括号内,Powershell 就不喜欢它。似乎它可能不喜欢放置 Stop-Parsing 参数。代码如下.. 在脚本前面计算 $inactive 变量。那部分很好。它是不喜欢用大括号括起来的 cmd 批处理代码。

if ($inactive -eq 'True') {cmd --% /C for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula file.csv') do taskkill /t /f /PID %i}

如果我只是在 powershell 中单独运行 cmd 行但没有 {} 它工作正常,但我需要先评估 $inactive 变量以确定我是否需要运行命令

工作正常..

cmd --% /C for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula file.csv') do taskkill /t /f /PID %i

没用。。

if ($inactive -eq 'True') {cmd --% /C for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula file.csv') do taskkill /t /f /PID %i}

谢谢你

标签: powershell

解决方案


如果您将结束} 放在同一行上,则它不会被识别为块的结束分隔符(它被视为未解析命令行的一部分--%,即停止解析符号)。

}放在下一行以解决问题:

if ($inactive -eq 'True') {
  cmd --% /C for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula file.csv') do taskkill /t /f /PID %i
}

有关 的更多信息--%,包括其限制和陷阱,请参阅此答案


推荐阅读