Aggiungi il -Force
parametro al comando.
PowerShell: come posso sopprimere l'errore se il file alterys esiste per il comando "mkdir"?
-
29-07-2022 - |
Domanda
Ritenere:
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
Soluzione
Altri suggerimenti
Uso:
mkdir C:\dog -ErrorAction SilentlyContinue
È una migliore pratica non sopprimere i messaggi di errore (a meno che tu non abbia un motivo valido). Controlla se la directory esiste invece di provare a crearne una. Se lo fa, forse devi rimuovere il suo contenuto o scegliere un altro nome? Così,
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"
}
Volevo solo aggiungere che mentre sopprime l'errore di solito non è la migliore pratica come dici, il comando -Force
funziona molto più velocemente rispetto al controllo se esiste prima.
Dove d: è un disco di RAM:
Measure-Command {new-item "D:\NewFolder\NewSubFolder" -ItemType Directory -force}
Prima esecuzione (Creazione di una cartella Oggetto): 5 ms
Seconda esecuzione (dopo la cartella esiste): 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"}}
Prima esecuzione (Creazione di una cartella Oggetto): 54 ms
Seconda esecuzione (dopo la cartella esiste): 15 ms
Grazie Peter per aver ripulito il mio post! Tu sei l'uomo!
PowerShell 7 ( ||
non ha funzionato):
(test-path foo) ? $null : (mkdir foo)