511 Stimmen

Erstellen Sie das Verzeichnis, wenn es noch nicht existiert.

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

Das Dateisystem sieht ähnlich aus wie folgt

D:\
D:\TopDirec\SubDirec\Project1\Revision1\Reports\
D:\TopDirec\SubDirec\Project2\Revision1\
D:\TopDirec\SubDirec\Project3\Revision1\
  • Jedes Projektverzeichnis hat mehrere Revisionen.
  • Jedes Revisionsverzeichnis benötigt ein Reports-Verzeichnis.
  • Einige der "Revisions"-Ordner enthalten bereits ein Reports-Verzeichnis; die meisten jedoch nicht.

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

Ich kann das Skript schreiben, um ein Verzeichnis zu erstellen, aber das Erstellen mehrerer Verzeichnisse ist problematisch.

2voto

tklone Punkte 21

Hier ist ein einfaches Beispiel, das bei mir funktioniert hat. Es überprüft, ob der Pfad existiert, und wenn nicht, wird nicht nur der Stammordner 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 wurde nicht entworfen, um mehrere
            # Verzeichnisse zu akzeptieren. Wir verwenden jedoch foreach, um die native Ausgabe zu unterdrücken
            # und sie durch eine benutzerdefinierte Meldung zu ersetzen.
            New-Item -Path $DirectoryPath -ItemType Container | `
              foreach {'Erstellt ' + $_.FullName}
        } else {
            Write-Host "$DirectoryPath existiert bereits und" `
                        "wird daher nicht (neu) 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 Ihr Eigenes ersetzen.

Ein weiteres Beispiel (hier platziert, weil es sonst die Syntaxhervorhebung von Stackoverflow beeinträchtigen würde):

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

0voto

Mike Q Punkte 5731

Beispiel, erstelle einen 'Reports'-Ordner innerhalb des Ordners 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