我在 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
謝謝
uj5u.com熱心網友回復:
這是未經測驗的,但可能是正確的,一般的方向。如果2020目錄不存在,則創建該目錄。當您確信該目錄將被正確移動時,請-WhatIf從Move-Item命令中洗掉。
$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
}
uj5u.com熱心網友回復:
這應該這樣做:
$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然后我們只選擇與$folderNames. 然后我們按它們的父項對它們進行分組,以便我們保留B\D例如結構。然后我們迭代這些組并創建一個2022目錄B\D\2022。最后,對于組中的每個成員,我們會將它們移動到2022目錄中(即B\D\01-Jan到B\D\2022\01-Jan)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392513.html
