2017-08-22 15 views
1

現在のフォルダ構造は、各クライアント(コンサルティング、財務、給与、永久、税)の下に複数のフォルダを持つ\ 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を作成するにはどうすればよいですか?

答えて

0

あなたは、あなたがフォルダが作成されている場所の出力を見たい場合は

# 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にフォルダを作成したいフォルダを選択するためにどこオブジェクトが必要になります。あなたの特定の環境にアクセスできないので、私は完全にテストすることができません。

-1

これを試してください。それはテストされていませんが、それが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\$_" 
    } 
}) 
+0

を削除!ありがとうAdam – e1mariem

+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

理由だけではなく、いくつかの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 
    } 
    } 
} 

出力がOKに見える場合は、働いていた-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 
関連する問題