PowerShell 5 introduces the New-TemporaryFile
cmdlet, which is handy. How can I do the same thing but instead of a file create a directory? Is there a New-TemporaryDirectory
cmdlet?
Within PowerShell there is a built in Cmdlet called New-TemporaryFile . Running this cmdlet simply creates a random 0 byte file in the $ENV:Temp folder in whichever platform you are working in. However, we can borrow the filename created and use it to create a folder instead.
Use mktemp -d . It creates a temporary directory with a random name and makes sure that file doesn't already exist. You need to remember to delete the directory after using it though.
How can I use Windows PowerShell to find the path to the temporary folder? Use the Temp variable, and obtain its value from the Env: PS drive.
To create a folder in PowerShell, use the New-Item cmdlet indicating the location and name of the folder and set the itemType parameter with the value Directory to indicate that you want to create a folder.
I think it can be done without looping by using a GUID for the directory name:
function New-TemporaryDirectory { $parent = [System.IO.Path]::GetTempPath() [string] $name = [System.Guid]::NewGuid() New-Item -ItemType Directory -Path (Join-Path $parent $name) }
Here's my port of this C# solution:
function New-TemporaryDirectory { $parent = [System.IO.Path]::GetTempPath() $name = [System.IO.Path]::GetRandomFileName() New-Item -ItemType Directory -Path (Join-Path $parent $name) }
How likely is it that GetRandomFileName
will return a name that already exists in the temp folder?
XXXXXXXX.XXX
where X can be either a lowercase letter or digit.GetRandomFileName
NewGuid
on the other hand can be one of 2^122 possibilities, making collisions all but impossible.
I also love one-liners, and I'm begging for a downvote here. All I ask is that you put my own vague negative feelings about this into words.
New-TemporaryFile | %{ rm $_; mkdir $_ }
Depending on the type of purist you are, you can do %{ mkdir $_-d }
, leaving placeholder to avoid collisions.
And it's reasonable to stand on Join-Path $env:TEMP $(New-Guid) | %{ mkdir $_ }
also.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With