PowerShell: comment puis-je supprimer l'erreur si le fichier alreadys existe pour la commande "mkdir"?

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

  •  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
Était-ce utile?

La solution

Ajouter le -Force paramètre à la commande.

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top