Adicione o -Force
parâmetro para o comando.
PowerShell: Como posso suprimir o erro se houver arquivo alreadys para o comando "mkdir"?
-
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
Solução
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)