You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中Move-Item返回值异常疑问及&&等效语法困惑

问题解释:PowerShell中-and连接命令返回False但操作成功的原因

核心原因:逻辑运算符-and的工作机制与cmdlet返回值

PowerShell里的-and是布尔逻辑运算符,要求左右两边的表达式都能被解析为布尔值,但Move-Item、Rename-Item这类cmdlet有个关键特性:

  • 默认不返回任何输出(即返回$null)
  • 在PowerShell的布尔判断规则里,$null会被判定为$false

你的命令执行流程是这样的:

  1. 先执行New-Item,成功创建foo文件夹,同时返回代表该文件夹的DirectoryInfo对象——这个对象在布尔判断里会被视为$true
  2. 因为-and左边为$true,所以继续执行右边的Move-Item,成功将foo移动为bar,但Move-Item返回$null,被解析为$false
  3. 整个$true -and $false表达式最终返回$false,但这只是表达式的运算结果,和Move-Item本身执行成功完全是两回事

替代方案:用&&实现类Unix的短路执行

要是你想实现Unix里command1 && command2的效果(只有command1成功才执行command2,且整体返回执行状态),PowerShell 5.1已经原生支持&&运算符:

New-Item -Type Directory -Path foo && Move-Item -Path foo -Destination bar

这个命令的行为:

  • 只有New-Item执行无错误,才会运行Move-Item
  • 整体返回值取决于最后执行的命令状态:Move-Item成功就返回$true,失败则返回$false

验证cmdlet返回值的小方法

想确认某个cmdlet的返回值,直接执行后看输出,或者用$?变量查看上一条命令的执行状态:

# 执行Move-Item
Move-Item -Path foo -Destination bar
# 查看执行成功与否(成功为$true,失败为$false)
$?
# 要是想让Move-Item返回目标对象,加-PassThru参数
Move-Item -Path foo -Destination bar -PassThru

内容的提问来源于stack exchange,提问作者malat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:55:04