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

为何使用Move-Item向新目录移动时会合并首个目录?

问题说明

当调用带通配符的Move-Item命令移动内容到尚未存在的目录时,首个被移动的目录会被当作目标目录创建,导致该目录下的文件直接移入目标目录,而非创建对应的子目录,这一行为令人困惑。使用PowerShell 7.4.6.500版本,求解释该问题。

复现步骤

# 搭建测试环境
New-Item -ItemType "Directory" -Path "install\bin"
New-Item -ItemType "File" -Path "install\bin\test.dll"
New-Item -ItemType "Directory" -Path "install\lib"
New-Item -ItemType "File" -Path "install\ReadMe.md"

New-Item -ItemType "Directory" -Path "copy"

# 执行移动命令
Move-Item -Path "install\*" -Destination "copy\app"

预期文件结构

  • copy\app\bin\test.dll
  • copy\app\lib\
  • copy\app\ReadMe.md

实际文件结构

  • copy\app\test.dll
  • copy\app\lib\
  • copy\app\ReadMe.md

原因解释

这是PowerShell的设计行为,核心逻辑如下:
当目标目录不存在时,Move-Item会优先处理通配符匹配到的第一个项目:

  1. 如果第一个匹配项是目录,PowerShell会直接将该目录重命名为指定的目标路径(即案例中的copy\app),这就导致原目录下的文件直接出现在目标路径中。
  2. 后续匹配到的项目(install\lib和ReadMe.md)会被直接移入已经创建好的copy\app目录下。

解决方法

要实现预期的目录结构,需先确保目标目录存在,再执行移动操作(目标路径末尾加\可明确指定为目录):

# 先创建目标目录
New-Item -ItemType Directory -Path "copy\app" -Force
# 执行移动,末尾的\确保将源内容移入目标目录子级
Move-Item -Path "install\*" -Destination "copy\app\"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:02:06