Создание подпапок в определенных, нескольких родительских папках
Наша текущая структура папок - \server\Usr\All Clients\Current\client_name с несколькими папками под каждым клиентом (консалтинг, финансы, начисление заработной платы, постоянный, налог).
Мне нужно создать подпапки под названием 2017 и 2018 только с учетом финансовых показателей, заработной платы и налогов.
Существует более 2000 клиентов, поэтому я бы хотел использовать скрипт PowerShell для этого. Я нашел следующий пример, но он создает подпапки 2017 во всех папках в разделе "Финансы".
foreach ($folder in (Get-ChildItem '\\server\Usr\All Clients\Current\*\Financials' -Directory))
{
new-item -ItemType directory -Path ($folder.fullname+"\2017")
}
Как я могу создать только 2017 в определенных папках?
4 ответа
Почему бы просто не сложить несколько ForEach:
ForEach ($Client in (Get-ChildItem "\\server\Usr\All Clients\Current\*" -Directory)){
ForEach ($Depth in 'Financials','Payroll','Tax') {
ForEach ($Year in '2017','2018') {
New-Item -ItemType Directory -Path ("{0}\{1}\{2}" -f $($Client.fullname),$Depth,$Year ) -Whatif
}
}
}
Если вывод выглядит нормально, удалите -WhatIf
Sample run on my Ramdrive A: with pseudo clients Baker,Miller,Smith:
> tree
A:.
├───Baker
│ ├───Financials
│ │ ├───2017
│ │ └───2018
│ ├───Payroll
│ │ ├───2017
│ │ └───2018
│ └───Tax
│ ├───2017
│ └───2018
├───Miller
│ ├───Financials
...
└───Smith
├───Financials
│ ├───2017
│ └───2018
├───Payroll
│ ├───2017
│ └───2018
└───Tax
├───2017
└───2018
Вы можете использовать массив для хранения каталогов, в которых будут создаваться 2017 и 2018 годы.
$ParentDirectories = @("Financials", "Payroll", "Tax")
А затем отфильтруйте папки с массивом, создающим подкаталоги.
Get-ChildItem -Path '\server\Usr\All Clients\Current\' | ForEach-Object {
$Client = $_.Name;
Get-ChildItem -Path $Client | Where-Object { $_.Name -in $ParentDirectories } | ForEach-Object {
New-Item -ItemType Directory @("$Client\$_\2017", "$Client\$_\2018")
}
}
Надеюсь, поможет!
Редактировать: Проверено и работает!
Попробуй это. Это не проверено, но если это не сработает на 100%, вы действительно Дойдете до конца.
#requires -Version 5
$createFolders = '2017','2018'
@(Get-ChildItem -Path '\\server\Usr\All Clients\Current' -Recurse -Directory -Depth 1).where({ $_.Name -in 'financials','payroll','tax' }).foreach({
$clientFolder = $_.FullName;
$createFolders | foreach {
$null = mkdir -Path "$clientFolder\$_"
}
})
Вам понадобится объект where, чтобы выбрать папки, в которых вы хотите создать папку
# Get folders that are Financials, Payrol, or Tax
$Folders = Get-ChildItem '\\server\Usr\All Clients\Current\*' | Where-Object -Property Name -in -Value 'Financials','Payroll','Tax'
# Loop through those folders
foreach ($Folder in $Folders)
{
$2017Path = Join-Path -Path $Folder.FullName -ChildPath '2017' # Generate path to 2017 folder
$2018Path = Join-Path -Path $Folder.FullName -ChildPath '2018' # Generate path to 2018 folder
New-Item -Path $2017Path -Force # Create 2017 folder
New-Item -Path $2018Path -Force # Create 2018 folder
}
использование New-Item -WhatIf
если вы хотите увидеть вывод о том, где создаются папки. Я не могу выполнить полное тестирование, поскольку у меня нет доступа к вашей конкретной среде.