PowerShell使用Move-Item移动文件时报源与目标路径相同如何解决
移动子文件夹内容到父目录操作方案
需求说明
将VPA_IMAGES目录下vpa_images子文件夹内的所有文件移动到上级VPA_IMAGES目录,完成后删除空的vpa_images子文件夹。
目录结构示意图如下:
原代码报错原因
你编写的代码尝试将vpa_images子文件夹整体移动到父级VPA_IMAGES目录下,Windows系统文件路径不区分大小写,系统判定源路径和目标路径指向同一个位置,因此抛出「源和目标路径必须不同」的错误。
原错误代码:
$new_path=$vpa_images+'\vpa_images' echo $new_path echo $vpa_images Move-Item $new_path $vpa_images
报错信息:
D:\RAW\st\Docum\2021-10-12\VPA_IMAGES\vpa_images D:\RAW\st\Docum\2021-10-12\VPA_IMAGES Move-Item : Source and destination path must be different. At D:\powershwll\automationforstaples.ps1:49 char:1 + Move-Item $new_path $vpa_images + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (D:\RAW\St...AGES\vpa_images:DirectoryInfo) [Move-Item], IOException + FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
正确实现代码
$new_path = $vpa_images + '\vpa_images' # 移动子文件夹内所有内容到上级VPA_IMAGES目录 Move-Item -Path "$new_path\*" -Destination $vpa_images -Force # 删除已清空的vpa_images子文件夹 Remove-Item -Path $new_path -Force
注意事项
- 源路径末尾添加的
\*是通配符,用于匹配子文件夹下所有文件、子目录项 -Force参数会在父目录存在重名文件时直接覆盖,如果你需要保留重名文件、避免误覆盖,可以删除该参数- 若子文件夹内存在嵌套的子目录,上述代码也会同步移动所有嵌套内容
内容的提问来源于stack exchange,提问作者Dikshit Karki
相关产品推荐
相关产品推荐

