0

到目前为止我所拥有的:

Get-ChildItem -Path "\\Networkdrive\Folder1\PROD- TEST\Successful" -Recurse |
Where-Object name -match '\w{10}_\w{3}' |
Move-Item -destination "\\Networkdrive\Folder1\Archive- TEST\Archive_PROD_TEST\Successful" -Verbose

: 的内部\\Networkdrive\Folder1\PROD- TEST\Successful是看起来像这样的文件夹:9ce8eab8-cefe-4ec9-9158-ff40612d5c47然后在其中有更多的文件夹,这些文件夹具有标准 10 个带下划线 ( _) 的数字,然后是 3 个数字。

9ce8eab8-cefe-4ec9-9158-ff40612d5c47如果任何子文件夹包含 10 个字符后跟一个_然后和其他 3 个字符的条件,我想移动文件夹\\Networkdrive\Folder1\Archive- TEST\Archive_PROD_TEST\Successful,但我想不理会结构和文件。

现在代码只是抓取里面的文件夹,然后移动它们,但不理会9ce8eab8-cefe-4ec9-9158-ff40612d5c47文件夹。我也想9ce8eab8-cefe-4ec9-9158-ff40612d5c47被感动。

4

2 回答 2

1

虽然不是很清楚子文件夹命名约定是什么(你谈论numbers),所以下面我使用这种模式:\d{10}_\d{3}.
但是,如果这些是十六进制数字,则需要使用模式[0-9a-f]{10}_[0-9a-f]{3}

尝试:

$sourcePath    = '\\Networkdrive\Folder1\PROD- TEST\Successful'
$destination   = '\\Networkdrive\Folder1\Archive- TEST\Archive_PROD_TEST\Successful'
$folderPattern = '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
$subdirPattern = '\d{10}_\d{3}'  # if the name must match FULLY, use anchors: '^\d{10}_\d{3}$'

Get-ChildItem -Path $sourcePath -Directory | Where-Object {$_.Name -match $folderPattern} | ForEach-Object {
    # capture the folders FullName for when we hit the catch block in case of error
    $targetFolder = $_.FullName
    if (@(Get-ChildItem -Path $targetFolder -Directory | Where-Object { $_.Name -match $subdirPattern }).Count) {
        # one or more subfolders found with name matching the $subdirPattern, so move the folder
        Write-Host "Moving folder '$targetFolder'"
        try {
            Move-Item -Path $targetFolder -Destination $destination -Force -ErrorAction Stop
        }
        catch {
            Write-Warning "Error moving folder '$targetFolder':`r`n$($_.Exception.Message)"
        }
    }
}
于 2021-10-14T19:40:10.073 回答
0

假设名为的文件夹是名为的文件夹XXXXXXXXX_XXX的直接子级XXXXXXX-XXXX-XXXX-XXXXXXXXXXXX,那么您可以:

  1. 找到与您想要的模式匹配的文件夹,以及
  2. 获取Parent这些对象的属性。

例如,我会使用这个:

Get-ChildItem -Path "\\Networkdrive\Folder1\PROD-TEST\Successful\*\*" -Directory |
Where-Object name -match '\w{10}_\w{3}' |
Get-ItemPropertyValue -Name Parent |
Move-Item -Destination "\\Networkdrive\Folder1\Archive- TEST\Archive_PROD_TEST\Successful" -Verbose

请注意,这个简单的策略仅在XXXXXXXXXX_XXX目录始终相对于需要移动的文件夹处于相同深度时才有效,因为Parent您正好处于一个级别。

于 2021-10-14T19:28:27.093 回答