PowerShell 5引入了New-TemporaryFile
cmdlet,非常方便.我怎样才能做同样的事情而不是文件创建目录?有New-TemporaryDirectory
cmdlet吗?
我认为通过使用目录名称的GUID可以在不循环的情况下完成:
function New-TemporaryDirectory { $parent = [System.IO.Path]::GetTempPath() [string] $name = [System.Guid]::NewGuid() New-Item -ItemType Directory -Path (Join-Path $parent $name) }
这是我的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.XXX
X可以是小写字母或数字的形式返回.
这给了我们36 ^ 11个组合,其中比特大约是2 ^ 56
调用生日悖论,一旦我们到达文件夹中的大约2 ^ 28项,我们就会发生碰撞,这大约是3.6亿
NTFS支持一个文件夹中大约2 ^ 32个项目,因此可以使用它进行冲突GetRandomFileName
NewGuid
另一方面,可能是2 ^ 122种可能性中的一种,使得碰撞几乎不可能.
我也喜欢单行,我在这里求助.我要问的是,你把我自己模糊的负面情绪写成了文字.
New-TemporaryFile | %{ rm $_; mkdir $_ }
根据您的纯粹主义者的类型,您可以这样做%{ mkdir $_-d }
,留下占位符以避免碰撞.
站在上面Join-Path $env:TEMP $(New-Guid) | %{ mkdir $_ }
也是合理的.