Ergänzen Sie die -Force
Parameter zum Befehl.
PowerShell: Wie kann ich den Fehler unterdrücken, wenn Datei -Alreadys für den Befehl "mkdir" vorhanden sind?
-
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
Lösung
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)