私の場合、よくあるのが、ファイルを一時的に作ったり加工したりして出来上がるまで仮のファイルを生成して作業したい。袖が複数のファイルの場合は、仮のフォルダーで一時的に作業したい場合がある。特に仮フォルダーを作ってまとめておけば、万が一途中で処理が止まってもそのフォルダーが残っていれば、探すのも楽である。おもには、複数のプログラムでのファイルロックによる処理の失敗の回避に使っている。
よくあるのが、FTPなどでファイルをダウンロードする際、低速の通信網の場合、ファイルの外形を先に作ってからデータが保存されていくため、その間ファイルロックされた状態が続く。その間別のプログラムでフォルダーでファイルの更新監視をしているとファイルの外形ができるのでそのファイルが更新されたと思い処理を行おうとするとファイルがロックされており処理が失敗する。ということをよく起こす。
それを回避しようとするには、ファイルロック解除待ちにすることも必要であるが、なるべくファイルロック状態でプログラム同士がかち合わないようにすることも重要だと思う。
どうにかしてテンポラリフォルダーを作れないかといろいろなサイトを見ておりましたら、私の願望をかなえてくれるサイトを発見しました。
そのサイトは、こちら👉一時フォルダ内で作業する #PowerShell - Qiita
Powershellには、テンポラリーファイルを生成するコマンドレットNew-TemporaryFile が存在します、テンポラリーフォルダーを生成するコマンドレットはありません。しかし、New-TemporaryFileで生成された、ファイル名を使用してテンポラリーフォルダーを作ることで、名前のバッティングを回避して使用できるようにしています。う~ん、すごい発想の転換です。
キーになるのが、以下の処理
$tempFolder = New-TemporaryFile | ForEach-Object { Remove-Item $_ ; mkdir $_ }
テンポラリーファイルを生成し作成し、その名前を取得してフォルダーを作って生成されたファイル自体は削除しています。
あとは、Locationをそのフォルダーに移して作業し、終わったら元のLocationに戻すとなります。
参考のサイトでは、変数にスクリプトを入れて関数に渡すとテンポラリーフォルダー内での処理ができる関数になっています。