PowerShell: Como posso suprimir o erro se houver arquivo alreadys para o comando "mkdir"?

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

  •  29-07-2022
  •  | 
  •  

Pergunta

Considerar:

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
Foi útil?

Solução

Adicione o -Force parâmetro para o comando.

Outras dicas

Usar:

mkdir C:\dog -ErrorAction SilentlyContinue

É uma prática recomendada não suprimir as mensagens de erro (a menos que você tenha um motivo válido). Verifique se o diretório existe em vez de apenas tentar criar um. Se isso acontecer, talvez você precise remover seu conteúdo ou escolher outro nome? Igual a,

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"
}

Eu só queria acrescentar que, ao suprimir o erro, geralmente não é prática recomendada, como você diz, o comando -Force corre muito mais rápido do que verificar se existe antes.

Onde d: é um disco RAM:

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

Primeira execução (criando objeto de pasta): 5 ms

Segunda corrida (após a pasta): 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"}}

Primeira execução (criando objeto de pasta): 54 ms

Segunda corrida (após a pasta): 15 ms

Obrigado Peter por limpar meu post! Você é o cara!

PowerShell 7 ( || não funcionou):

(test-path foo) ? $null : (mkdir foo)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top