在特定的多个父文件夹中创建子文件夹

时间:2017-08-22 15:16:52

标签: powershell directory directory-structure

我们当前的文件夹结构是\ 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 个答案:

答案 0 :(得分:1)

您可以使用数组来存储创建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")
    }
}

希望它有所帮助!

编辑:经过测试并且有效!

答案 1 :(得分:1)

为什么不叠加一些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

答案 2 :(得分:0)

您需要一个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。我无法完全测试,因为我无法访问您的特定环境。

答案 3 :(得分:0)

试试这个。它没有经过测试,但如果它不能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\$_" 
    }
})