Windows を長期間使用している方、気付くとデスクトップがファイルだらけになっていませんか?
今回は、AutoIt を使ってデスクトップに保存された特定の拡張子のファイルを、指定した専用フォルダーに一瞬で移動させるスクリプトを紹介します。
スクリプトの概要
このスクリプトを実行すると、例えばデスクトップ上にある任意の名前で始まる JPGファイル等を検索し、あらかじめ指定しておいたフォルダー(例:「ピクチャ」フォルダー内の「Screenshots」フォルダー)へすべて移動させます。
これにより、散らかったデスクトップが一瞬で綺麗になります。
サンプルコード
#include <File.au3>
#include <MsgBoxConstants.au3>
; ### 設定項目 ###
; 画像ファイルを移動させたい先のフォルダーを指定します。
; @MyDocumentsDir は「マイドキュメント」のパスを示すマクロです。
Local $sDestinationFolder = @MyDocumentsDir & "\Screenshots"
; 移動先のフォルダーが存在しない場合に、自動で作成するかどうか (True = 作成する, False = 作成しない)
Local $bAutoCreateDir = True
; ### メイン処理 ###
; 移動先のフォルダーが存在するかチェックします。
If NOT FileExists($sDestinationFolder) Then
; もし存在せず、自動作成がTrueならフォルダを作成します。
If $bAutoCreateDir Then
DirCreate($sDestinationFolder)
Else
MsgBox($MB_ICONERROR, "エラー", "移動先のフォルダが見つかりません。" & @CRLF & $sDestinationFolder)
Exit
EndIf
EndIf
; デスクトップ上にあるJPGファイルのリストを取得します。
Local $aFileList = _FileListToArray(@DesktopDir, "*.jpg", $FLTAR_FILES)
; ファイルが見つからなかった場合の情報メッセージです。
If @error Then
MsgBox($MB_ICONINFORMATION, "情報", "デスクトップに移動対象のJPGファイルはありませんでした。")
Exit
EndIf
; 移動したファイル数をカウントするための変数です。
Local $iMovedCount = 0
; Forループを使って、見つかったファイルを一つずつチェックします。
For $i = 1 To $aFileList[0]
Local $sFileName = $aFileList[$i]
; ファイル名が「photo」または「Screenshot」で始まるかチェックします。
Local $sPrefixJp = "photo"
Local $sPrefixEn = "Screenshot"
; StringLeftを使ってファイル名の先頭部分を比較します。
If StringLeft($sFileName, StringLen($sPrefixJp)) == $sPrefixJp OR StringLeft($sFileName, StringLen($sPrefixEn)) == $sPrefixEn Then
; 元のファイルのフルパス
Local $sSourcePath = @DesktopDir & "\" & $sFileName
; 移動先のファイルのフルパス
Local $sDestPath = $sDestinationFolder & "\" & $sFileName
; ファイルを移動します。
FileMove($sSourcePath, $sDestPath)
$iMovedCount += 1
EndIf
Next
; 処理結果をメッセージボックスで表示します。
If $iMovedCount > 0 Then
MsgBox($MB_OK, "完了", $iMovedCount & "個の画像ファイルを移動しました。")
Else
MsgBox($MB_ICONINFORMATION, "情報", "移動対象の画像ファイルは見つかりませんでした。")
EndIf
コードの詳しい解説
設定項目
Local $sDestinationFolder = @MyDocumentsDir & "\Screenshots"
Local $bAutoCreateDir = True
$sDestinationFolder: 画像ファイルの移動先フォルダーを指定します。@MyDocumentsDirは「ドキュメント」フォルダー、@PicturesDirは「ピクチャ」フォルダーを示すマクロなので、好みの場所に変更できます。$bAutoCreateDir: 移動先のフォルダーが存在しなかった場合に自動で作成するかを設定します。Trueにしておくと、初回実行時にフォルダーがなくても自動で作ってくれるので便利です。
If NOT FileExists(…)
移動先フォルダーの存在を確認しています。NOTが付いているので、「もしフォルダーが存在しなかったら」という条件になります。その中で、$bAutoCreateDirがTrueに設定されていれば、DirCreate()関数でフォルダーを作成します。
If StringLeft(…) == … OR StringLeft(…) == …
StringLen($sPrefixJp): まず、比較したい文字列("photo")の文字数をStringLen関数で取得します。StringLeft($sFileName, ...): 次にStringLeft関数を使い、ファイル名の左側から、先ほど取得した文字数ぶんの文字列を切り出します。... == $sPrefixJp: 最後に、切り出した文字列が、比較したい文字列$sPrefixJpと完全に一致するかを==で比較します。
この処理を英語名(Screenshot)の分もORで繋ぐことで、ファイル名が「photo」で始まる、または「Screenshot」で始まるという条件を実現しています。
この部分の処理をコメントアウトすれば、すべての JPGファイルを移動することができます。
; StringLeftを使ってファイル名の先頭部分を比較します。
;~ If StringLeft($sFileName, StringLen($sPrefixJp)) == $sPrefixJp Or StringLeft($sFileName, StringLen($sPrefixEn)) == $sPrefixEn Then; ここと
; 元のファイルのフルパス
Local $sSourcePath = @DesktopDir & "\" & $sFileName
; 移動先のファイルのフルパス
Local $sDestPath = $sDestinationFolder & "\" & $sFileName
; ファイルを移動します。
FileMove($sSourcePath, $sDestPath)
$iMovedCount += 1
;~ EndIf; ここをコメントアウト
_FileListToArray(@DesktopDir, “*.png”, …)
デスクトップ(@DesktopDir)上にある、拡張子が「.jpg」のファイルリストを取得し、配列$aFileListに格納します。
For $i = 1 To $aFileList[0]
取得したファイルリストを、Forループを使って1つずつ取り出し、ファイル名をチェックしていきます。
FileMove(…)
条件に一致したファイルを、デスクトップから指定の移動先フォルダーへ移動させます。
まとめ
このスクリプトをコンパイルしてデスクトップに置いておき、デスクトップが散らかってきたなと感じた時にダブルクリックするだけで、一瞬で整理整頓が完了します。
ファイル名の判定部分をカスタマイズすれば、画像ファイル以外のファイル整理にも応用できる、非常に実用的なスクリプトです。ぜひ活用してみてください。
コメント