Ajouter le -Force
paramètre à la commande.
PowerShell: comment puis-je supprimer l'erreur si le fichier alreadys existe pour la commande "mkdir"?
-
29-07-2022 - |
Question
Envisager:
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
La solution
Autres conseils
Utilisation:
mkdir C:\dog -ErrorAction SilentlyContinue
C'est la meilleure pratique de ne pas supprimer les messages d'erreur (sauf si vous avez une raison valable). Vérifiez si le répertoire existe au lieu d'essayer simplement d'en créer un. Si c'est le cas, vous devez peut-être retirer son contenu ou choisir un autre nom? Ainsi,
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"
}
Je voulais juste ajouter que si la suppression de l'erreur n'est généralement pas la meilleure pratique comme vous le dites, la commande -Force
fonctionne beaucoup plus rapidement que de vérifier s'il existe avant.
Où D: est un disque RAM:
Measure-Command {new-item "D:\NewFolder\NewSubFolder" -ItemType Directory -force}
First Run (création d'objet de dossier): 5 ms
Deuxième manche (après le dossier): 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"}}
First Run (création d'objet de dossier): 54 ms
Deuxième manche (après le dossier): 15 ms
Merci Peter d'avoir nettoyé mon message! Tu es l'homme!
PowerShell 7 ( ||
n'a pas fonctionné):
(test-path foo) ? $null : (mkdir foo)