PowerShell: Wie kann ich den Fehler unterdrücken, wenn Datei -Alreadys für den Befehl "mkdir" vorhanden sind?

StackOverflow https://stackoverflow.com/questions/19853340

  •  29-07-2022
  •  | 
  •  

Frage

In Betracht ziehen:

PS Y:\> mkdir  C:/dog


    Directory: C:\


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         11/7/2013  10:59 PM            dog


PS Y:\> mkdir  C:/dog
New-Item : Item with specified name C:\dog already exists.
At line:38 char:24
+         $scriptCmd = {& <<<<  $wrappedCmd -Type Directory @PSBoundParameters }
    + CategoryInfo          : ResourceExists: (C:\dog:String) [New-Item], IOException
    + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
War es hilfreich?

Lösung

Ergänzen Sie die -Force Parameter zum Befehl.

Andere Tipps

Verwenden:

mkdir C:\dog -ErrorAction SilentlyContinue

Es ist eine beste Praxis, keine Fehlermeldungen zu untertreffen (es sei denn, Sie haben einen gültigen Grund). Überprüfen Sie, ob das Verzeichnis existiert, anstatt nur zu versuchen, einen zu erstellen. Wenn dies der Fall ist, müssen Sie vielleicht den Inhalt entfernen oder einen anderen Namen auswählen? So so,

if (-not (test-path "c:\foobar") ) {
    write-host "c:\foobar doesn't exist, creating it"
    md 'c:\foobar'|out-null
} else {
    write-host "c:\foobar exists, no need to create it"
}

Ich wollte nur hinzufügen, dass während der Unterdrückung des Fehlers normalerweise keine Best Practice ist, wie Sie sagen, der Befehl -Force Läuft viel schneller als zu überprüfen, ob es vorher vorhanden ist.

Wo d: ist eine RAM -Festplatte:

Measure-Command {new-item "D:\NewFolder\NewSubFolder" -ItemType Directory -force}

Zuerst ausführen (Ordnerobjekt erstellen): 5 ms

Zweiter Lauf (nach dem Ordner existiert): 1 ms

Measure-Command {if (-not (test-path "D:\NewFolder\NewSubFolder") ) {
write-host "Directory doesnt exist, creating it"
md "D:\NewFolder\NewSubFolde"|out-null} else {
write-host "Directory exists, no need to create it"}}

Erster Ausführen (Ordnerobjekt erstellen): 54 ms

Zweiter Lauf (nach dem Ordner existiert): 15 ms

Danke Peter, dass du meinen Beitrag aufgeräumt hast! Du bist der Mann!

Powershell 7 ( || hat nicht funktioniert):

(test-path foo) ? $null : (mkdir foo)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top