簡體   English   中英

Powershell 移動到同一目錄下的文件夾

[英]Powershell move to folder in the same directory

我在 Z:\testfolder 下還有 20000 個文件夾,它是一個網絡映射驅動器。 我需要找到所有具有特定名稱的文件夾,例如“01-Jan”、“02-Feb”、“03-Mar”、“04-Apr”、“05-May”、“06-Jun”、“07-” Jul","08-Aug","09-Sep","10-Oct","11-Dec","12-Dec",並將這些文件夾移動到同一目錄下的文件夾“2022”。 所有文件夾都是空文件夾。 需要創建文件夾“2022”。

我已經在包含這些文件的目錄下使用以下命令創建了 2022 文件夾:

Get-ChildItem -Path Z:\testfolder -Filter 01-Jan -Directory -Recurse -Exclude 2020 -ErrorAction SilentlyContinue -Force | Copy-Item -Destination {$($_.Fullname) -replace '01-Jan',"2022"}

但我不知道如何將文件夾移動到當前文件夾。

當前樹:

Z:.
├───A
│   ├───01-JAN
│   ├───02-Feb
│   ├───03-Mar
│   ├───04-Apr
│   ├───05-May
│   ├───06-Jun
│   ├───07-Jul
│   ├───08-Aug
│   ├───09-Sep
│   ├───10-Oct
│   ├───11-Nov
│   └───12-Dec
├───B
│   └───D
│       ├───01-JAN
│       ├───02-Feb
│       ├───03-Mar
│       ├───04-Apr
│       ├───05-May
│       ├───06-Jun
│       ├───07-Jul
│       ├───08-Aug
│       ├───09-Sep
│       ├───10-Oct
│       ├───11-Nov
│       └───12-Dec
└───C
    ├───01-JAN
    ├───02-Feb
    ├───03-Mar
    ├───04-Apr
    ├───05-May
    ├───06-Jun
    ├───07-Jul
    ├───08-Aug
    ├───09-Sep
    ├───10-Oct
    ├───11-Nov
    └───12-Dec

預期效果:

Z:.
├───A
│   └───2022
│       ├───01-Jan
│       ├───02-Feb
│       ├───03-Mar
│       ├───04-Apr
│       ├───05-May
│       ├───06-Jun
│       ├───07-Jul
│       ├───08-Aug
│       ├───09-Sep
│       ├───10-Oct
│       ├───11-Nov
│       └───12-Dec
├───B
│   └───D
│       └───2022
│           ├───01-Jan
│           ├───02-Feb
│           ├───03-Mar
│           ├───04-Apr
│           ├───05-May
│           ├───06-Jun
│           ├───07-Jul
│           ├───08-Aug
│           ├───09-Sep
│           ├───10-Oct
│           ├───11-Nov
│           └───12-Dec
└───C
    └───2022
        ├───01-Jan
        ├───02-Feb
        ├───03-Mar
        ├───04-Apr
        ├───05-May
        ├───06-Jun
        ├───07-Jul
        ├───08-Aug
        ├───09-Sep
        ├───10-Oct
        ├───11-Nov
        └───12-Dec

謝謝

這是未經測試的,但可能是正確的,一般的方向。 如果2020目錄不存在,則創建該目錄。 當您確信目錄將被正確移動時,請從Move-Item命令中刪除-WhatIf

$DirNames = @('01-jan', '02-feb', '03-mar','04-apr', '05-may', '06-jun',
    '07-jul', ' 08-aug', '09-sep', '10-oct', '11-nov', '12-dec')
Get-ChildItem -Recurse -Directory -Path 'Z:\' |
    Where-Object { $DirNames -contains $_.Name } |
    ForEach-Object {
        $NewDir = Join-Path -Path $_.Directory -ChildPath '2020'
        if (-not (Test-Path -Path $NewDir)) {
            New-Item -ItemType Directory -Path $NewDir | Out-Null
        }
        Move-Item -Path $_.FullName -Destination $NewDir -WhatIf
    }

這應該這樣做:

$folderNames = 1..12 | ForEach-Object { "$('{0:d2}' -f $_)-$([cultureinfo]::InvariantCulture.DateTimeFormat.GetAbbreviatedMonthName($_))" }
Get-ChildItem -Path 'Z:\testfolder' -Recurse | Where-Object BaseName -In $folderNames | Group-Object -Property Parent | ForEach-Object {
    $dir2022 = Join-Path -Path $_.Name -ChildPath '2022'
    New-Item -Path $dir2022 -ItemType Directory
    foreach ($dir in $_.Group) {
        Move-Item -Path $dir.FullName -Destination $dir2022
    }
}

$folderNames將僅包含名稱01-Jan...12-Dec 首先,我們在Z:\testfolder中遞歸地獲取所有目錄,然后我們 select 僅匹配$folderNames的文件夾。 然后我們按它們的父級對它們進行分組,例如我們保留結構B\D 然后我們迭代這些組並創建一個2022目錄B\D\2022 最后,對於組中的每個成員,我們會將它們移動到2022目錄中(即B\D\01-JanB\D\2022\01-Jan )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM