PowerShell如何移动包含指定命名规则子文件夹的上层GUID文件夹
PowerShell移动逻辑修正方案
你当前代码的问题是直接定位到了符合命名规则的深层子文件夹执行移动,因此只会迁移匹配的子目录,上层GUID文件夹会保留在原路径。调整为「先校验一级GUID文件夹是否包含符合规则的子目录,校验通过则移动整个GUID文件夹」即可实现需求。
修改后完整代码
# 配置路径与匹配规则 $sourceRoot = "\\Networkdrive\Folder1\PROD- TEST\Successful" $targetRoot = "\\Networkdrive\Folder1\Archive- TEST\Archive_PROD_TEST\Successful" $matchRule = '\w{10}_\w{3}' # 遍历源路径下所有一级GUID文件夹 Get-ChildItem -Path $sourceRoot -Directory | ForEach-Object { $currentGuidFolder = $_ # 检查当前GUID文件夹下是否存在符合规则的子目录 $hasQualifiedSubFolder = @(Get-ChildItem -Path $currentGuidFolder.FullName -Recurse -Directory | Where-Object Name -match $matchRule).Count -gt 0 if ($hasQualifiedSubFolder) { # 移动整个GUID文件夹到目标路径,保留完整结构 Move-Item -Path $currentGuidFolder.FullName -Destination $targetRoot -Verbose } }
补充说明
- 代码中用
@()将查询结果强转为数组,避免单个匹配结果/无匹配结果时计数判断出错 - 如果目标路径已存在同名GUID文件夹,默认会报错,需要覆盖已有文件夹时可在
Move-Item命令后添加-Force参数 - 可先将
Move-Item替换为Write-Output $currentGuidFolder.FullName试运行,确认要移动的文件夹符合预期后再执行实际移动操作
内容的提问来源于stack exchange,提问作者TheRapture
相关产品推荐
相关产品推荐

