Добавить -Force
параметр к команде.
PowerShell: Как я могу подавить ошибку, если File Alreadys существует для команды "mkdir"?
-
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
Решение
Другие советы
Использовать:
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)