2017-08-22 8 views
1

Notre structure de dossiers actuelle est \ server \ Usr \ All Clients \ Current \ client_name avec plusieurs dossiers sous chaque client (consultation, états financiers, paie, permanent, taxe).Création de sous-dossiers dans des dossiers parents multiples spécifiques

J'ai besoin de créer des sous-dossiers appelés 2017 et 2018 en termes de finances, de paie et de taxes.

Il y a plus de 2000 clients, donc j'aimerais utiliser un script PowerShell pour le faire. J'ai trouvé l'exemple suivant, mais il crée les sous-dossiers 2017 dans tous les dossiers sous états financiers.

foreach ($folder in (Get-ChildItem '\\server\Usr\All Clients\Current\*\Financials' -Directory)) 
{ 
    new-item -ItemType directory -Path ($folder.fullname+"\2017") 
} 

Comment puis-je le créer uniquement 2017 dans des dossiers spécifiques?

Répondre

0

Vous aurez besoin d'un objet où pour sélectionner les dossiers que vous souhaitez créer le dossier dans

# 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 
} 

Utilisez New-Item -WhatIf si vous voulez voir la sortie de l'endroit où les dossiers sont créés. Je suis incapable de tester complètement car je n'ai pas accès à votre environnement spécifique.

-1

Essayez ceci. Ce n'est pas testé, mais si ça ne marche pas à 100%, ça va vraiment vous fermer.

#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

qui a fonctionné! merci Adam – e1mariem

+0

Super! Pourriez-vous le marquer comme répondu? Je ne sais pas pourquoi je suis downvoted quand j'ai aidé à résoudre votre problème, mais bon. :) –

1

Vous pouvez utiliser un tableau pour stocker les répertoires dans lesquels pour créer 2017 et 2018.

$ParentDirectories = @("Financials", "Payroll", "Tax") 

Et puis, filtrer les dossiers avec le tableau créant des sous-répertoires.

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") 
    } 
} 

Espérons que ça aide!

Édition: Testé et fonctionne!

1

Pourquoi ne pas empiler quelques-unes 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 
    } 
    } 
} 

Si la sortie semble OK, retirez le -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