西暦日付のフォルダを作成するコマンドを朝一に自動実行するPowerShellスクリプトに加えることで、"デスクトップ整理への道筋"も構築できた筆者だが、前回も述べたようにいぜんとしてデスクトップはファイルの山だ。
デスクトップにちらかるファイルを一発で収納したい
既存のデスクトップファイルの整理と運用を考えて、一発でデスクトップにあるファイルを拡張子名のフォルダに移動させるスクリプトを考えて作ってみた(folderin.ps1)。
$desktop = [Environment]::GetFolderPath("Desktop")
# デスクトップ内のファイルを取得(フォルダは除外)
Get-ChildItem -Path $desktop -File | ForEach-Object {
# 拡張子名をドット除去で取得
$filename = $_.Extension.TrimStart('.')
# フォルダパス作成
$folder = Join-Path $desktop $filename
# フォルダがなければ作成
if (!(Test-Path $folder)) {
New-Item -ItemType Directory $folder
}
# ファイル移動
Move-Item $_ -Destination $folder
}
#エラー確認用に閉じない処理
Read-Host "Press Enter to close"
ForEach-Objectのループで$_に入るオブジェクトから$_.Extension.TrimStart('.')で拡張子名だけを取り出し、パスの存在を確認するTest-Path $folderで、フォルダが無い場合に拡張子名でフォルダを作成。Move-Itemで作成フォルダに随時移動させる。実行すると、拡張子名フォルダが生成され、ファイルはすべてそこに入る。
Windowsが表示している仮想オブジェクトや権限の関係でユーザーからは消しにくいショートカットファイルの一部は残るがおおよその目的は達したといえるだろう。
特定ファイルだけを除外する
気持ちいいものだ。リアルな都内のごみ分別もこんな感じで自動化できたなら嬉しいのにと脳裏に浮かんだその時。
デスクトップに常時設置したtestMorning.ps1もps1フォルダに格納されてしまっている。
ことに気が付いた。こういうことは本当によく起こるので調子に乗っていると、作っていた何かが動作しないとなる。そういう意味でもフォルダやファイル設置場所は、できるだけ規則的に行っておいた方がいい。本来ならばデスクトップに置くべきではないが、ここでは特定ファイルtestMorning.ps1を除外することを考えた。
Get-ChildItem -Path $desktop -File | Where-Object { $_.Name -ne 'testMorning.ps1' } | ForEach-Object {
加えたスクリプトfolderin.ps1は以下のようになる。
$desktop = [Environment]::GetFolderPath("Desktop")
# デスクトップ内のファイルを取得(フォルダは除外)
Get-ChildItem -Path $desktop -File | Where-Object { $_.Name -ne 'testMorning.ps1' } | ForEach-Object {
# 拡張子名をドット除去で取得
$filename = $_.Extension.TrimStart('.')
# フォルダパス作成
$folder = Join-Path $desktop $filename
# フォルダがなければ作成
if (!(Test-Path $folder)) {
New-Item -ItemType Directory $folder
}
# ファイル移動
Move-Item $_ -Destination $folder
}
#エラー確認用に閉じない処理
Read-Host "Press Enter to close"
これを実行すると、
無事、testMorning.ps1を除外したファイルが拡張子名フォルダに格納された。folderin.ps1は毎回実行する必要はないので、デスクトップが散らかってきたらps1フォルダからfolderin.ps1をダブルクリックする。そんなお掃除収納ツールだ。


