当前位置:  开发笔记 > 编程语言 > 正文

在PowerShell中创建一个临时目录?

如何解决《在PowerShell中创建一个临时目录?》经验,为你挑选了2个好方法。

PowerShell 5引入了New-TemporaryFilecmdlet,非常方便.我怎样才能做同样的事情而不是文件创建目录?有New-TemporaryDirectorycmdlet吗?



1> Michael Krop..:

我认为通过使用目录名称的GUID可以在不循环的情况下完成:

function New-TemporaryDirectory {
    $parent = [System.IO.Path]::GetTempPath()
    [string] $name = [System.Guid]::NewGuid()
    New-Item -ItemType Directory -Path (Join-Path $parent $name)
}

GetRandomFileName的原始尝试

这是我的C#解决方案的端口:

function New-TemporaryDirectory {
    $parent = [System.IO.Path]::GetTempPath()
    $name = [System.IO.Path]::GetRandomFileName()
    New-Item -ItemType Directory -Path (Join-Path $parent $name)
}

碰撞可能性分析

GetRandomFileName返回temp文件夹中已存在的名称的可能性有多大?

文件名以XXXXXXXX.XXXX可以是小写字母或数字的形式返回.

这给了我们36 ^ 11个组合,其中比特大约是2 ^ 56

调用生日悖论,一旦我们到达文件夹中的大约2 ^ 28项,我们就会发生碰撞,这大约是3.6亿

NTFS支持一个文件夹中大约2 ^ 32个项目,因此可以使用它进行冲突GetRandomFileName

NewGuid另一方面,可能是2 ^ 122种可能性中的一种,使得碰撞几乎不可能.


如果你的临时文件夹中有3.6亿个项目,我认为你遇到的问题比某些PS脚本由于名称冲突而失败有更大的问题.

2> nik.shorniko..:

我也喜欢单行,我在这里求助.我要问的是,你把我自己模糊的负面情绪写成了文字.

New-TemporaryFile | %{ rm $_; mkdir $_ }

根据您的纯粹主义者的类型,您可以这样做%{ mkdir $_-d },留下占位符以避免碰撞.

站在上面Join-Path $env:TEMP $(New-Guid) | %{ mkdir $_ }也是合理的.


对我来说似乎是一个很好的单行.除非另有证明,否则我认为竞争条件的可能性很小,但99%的用例并不是真正的问题.
推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有