511 Stimmen

Verzeichnis erstellen, wenn es nicht vorhanden ist

Ich schreibe ein PowerShell-Skript, um mehrere Verzeichnisse zu erstellen, wenn sie nicht vorhanden sind.

Das Dateisystem sieht so aus

D:\
D:\TopDirec\SubDirec\Project1\Revision1\Reports\
D:\TopDirec\SubDirec\Project2\Revision1\
D:\TopDirec\SubDirec\Project3\Revision1\
  • Jeder Projektordner hat mehrere Revisionen.
  • Jeder Revisionsordner benötigt einen Reports-Ordner.
  • Einige der "Revisionen" Ordner enthalten bereits einen Reports-Ordner; jedoch die meisten nicht.

Ich muss ein Skript schreiben, das täglich läuft, um diese Ordner für jedes Verzeichnis zu erstellen.

Ich bin in der Lage, das Skript zu schreiben, um einen Ordner zu erstellen, aber das Erstellen mehrerer Ordner ist problematisch.

2voto

tklone Punkte 21

Hier ist eine einfache Methode, die für mich funktioniert hat. Sie überprüft, ob der Pfad vorhanden ist, und falls nicht, wird nicht nur der Stammverzeichnis erstellt, sondern auch alle Unterverzeichnisse:

$rptpath = "C:\temp\reports\exchange"

if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}

0voto

John Bentley Punkte 1460
$mWarningColor = 'Rot'

<#
.BESCHREIBUNG
    Erstellt ein neues Verzeichnis.
.BESCHREIBUNG
    Erstellt ein neues Verzeichnis. Wenn das Verzeichnis bereits existiert, wird das Verzeichnis nicht überschrieben. Stattdessen wird eine Warnmeldung ausgegeben, dass das Verzeichnis bereits existiert.
.AUSGABE
    Wenn das Verzeichnis bereits existiert, wird das Verzeichnis nicht überschrieben. 
    Stattdessen wird eine Warnmeldung ausgegeben, dass das Verzeichnis bereits existiert.
.BEISPIEL    
    Sal-New-Directory -DirectoryPath '.\output'
#>
function Sal-New-Directory {
    param(
        [parameter(mandatory=$true)]
        [String]
        $DirectoryPath
    )
    $ErrorActionPreference = "Stop"
    try {
        if (!(Test-Path -Path $DirectoryPath -PathType Container)) {

            # Sal-New-Directory ist nicht dafür gedacht, mehrere 
            # Verzeichnisse anzunehmen. Wir verwenden jedoch foreach, um die natürliche Ausgabe zu unterdrücken
            # und durch eine benutzerdefinierte Nachricht zu ersetzen.
            New-Item -Path $DirectoryPath -ItemType Container | `
              foreach {'Erstellt ' + $_.FullName}
        } else {
            Write-Host "$DirectoryPath existiert bereits und" `
                        "wird daher nicht (erneut) erstellt." `
                        -ForegroundColor $mWarningColor
        }
    } finally {
        $ErrorActionPreference = "Continue"
    }
}

"Sal" ist nur ein beliebiger Präfix für meine eigene Bibliothek. Sie könnten es entfernen oder durch Ihren eigenen ersetzen.

Ein weiteres Beispiel (hier platziert, da es sonst die Syntax-Hervorhebung von Stackoverflow ruinieren würde):

Sal-New-Directory -DirectoryPath ($mCARootDir + "privat\")

0voto

Mike Q Punkte 5731

Beispiel, erstellen Sie einen 'Reports'-Ordner im Ordner des Skripts.

$ReportsDir = $PSScriptRoot + '\Reports'
$CreateReportsDir = [System.IO.Directory]::CreateDirectory($ReportsDir)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X