[英]powershell, how to mointor a directory and move files over to another folder
[英]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-Jan
到B\D\2022\01-Jan
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.