PowerShell: Как я могу подавить ошибку, если File Alreadys существует для команды "mkdir"?

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

  •  29-07-2022
  •  | 
  •  

Вопрос

Рассмотреть возможность:

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
Это было полезно?

Решение

Добавить -Force параметр к команде.

Другие советы

Использовать:

mkdir C:\dog -ErrorAction SilentlyContinue

Лучшая практика не подавлять сообщения об ошибках (если у вас нет веской причины). Проверьте, существует ли каталог вместо того, чтобы просто пытаться создать его. Если это так, может быть, вам нужно удалить его содержимое или выбрать другое имя? Вот так,

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

Я просто хотел добавить, что при подавлении ошибки обычно не является наилучшей практикой, как вы говорите, команда -Force работает намного быстрее, чем проверять, существует ли он ранее.

Где D: диск RAM:

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

Первый запуск (создание объекта папки): 5 мс

Второй запуск (после папки существует): 1 мс

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

Первый запуск (создание объекта папки): 54 мс

Второй прогон (после папки существует): 15 мс

Спасибо, Питер, за то, что убрали мой пост! Ты человек!

PowerShell 7 ( || не работал):

(test-path foo) ? $null : (mkdir foo)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top