PowerShell:如果“mkdir”命令的文件已经存在,我该如何抑制错误?

Posted

技术标签:

【中文标题】PowerShell:如果“mkdir”命令的文件已经存在,我该如何抑制错误?【英文标题】:PowerShell: How can I suppress the error if file alreadys exists for "mkdir" command? 【发布时间】:2013-11-20 03:00:42 【问题描述】:

考虑:

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

【问题讨论】:

【参考方案1】:

Powershell 7(|| 不起作用):

(test-path foo) ? $null : (mkdir foo)

【讨论】:

【参考方案2】:

用途:

mkdir C:\dog -ErrorAction SilentlyContinue

【讨论】:

【参考方案3】:

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

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

【讨论】:

-Force 是 New-Item 的一个参数,抱歉,这是一个非常错误的术语!在上述命令中取出 Write-Host 确实可以大大加快速度!不好的例子,但结果仍然相似。抱歉给大家带来了困惑!【参考方案4】:

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

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"

【讨论】:

不同意,在linux mkdir -p 中,即使存在也不提示错误信息。【参考方案5】:

在命令中添加-Force参数。

【讨论】:

-Force 不会工作有什么原因吗?在我的 OctopusDeploy 脚本中,这是生成的。 $tempfolder 是一个 UNC 路径。 screencast.com/t/iB5rlt4Ae1 没关系...这是因为我的 OctopusDeploy 脚本以 SYSTEM 身份运行,它对所讨论的 UNC 路径没有权限。

以上是关于PowerShell:如果“mkdir”命令的文件已经存在,我该如何抑制错误?的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell命令与脚本(10)——脚本

mkdir命令

mkdir命令

需要 Windows 批处理命令单线器按名称删除文件夹,而不是按 date.time 使用 powershell(如果适用)

3 mkdir

linux目录操作命令 mkdir