23

考虑:

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
4

5 回答 5

38

-Force参数添加到命令中。

于 2013-11-08T07:05:50.177 回答
19

采用:

mkdir C:\dog -ErrorAction SilentlyContinue
于 2013-11-08T07:31:30.557 回答
0

最好不要隐藏错误消息(除非您有正当理由)。检查目录是否存在,而不是仅仅尝试创建一个。如果是这样,也许您需要删除其内容或选择另一个名称?像这样,

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"
}
于 2013-11-08T07:14:34.770 回答
0

我只是想补充一点,虽然抑制错误通常不是您所说的最佳实践,但该命令的-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 毫秒

谢谢彼得清理我的帖子!你是男人!

于 2016-03-15T05:16:13.147 回答
0

Powershell 7(||不起作用):

(test-path foo) ? $null : (mkdir foo)
于 2020-06-12T19:32:09.263 回答