TOP > blog > 写真の整理は削除・削除・が基本。しかし、ファイル名変換スクリプト(VBS)で簡単整理(2)
スクリプト
2015/11/09

写真の整理は削除・削除・が基本。しかし、ファイル名変換スクリプト(VBS)で簡単整理(2)

管理者用
blog

先日、画像ファイルの整理のためのVBスクリプトを紹介しました。
写真を保存しているフォルダー名と、写真のExif情報から、写真のファイル名にフォルダー名と撮影日を追加したものに変換すると言うものでした。

先日紹介したスクリプトは、そのvbsファイルの保存しているフォルダー全てのJPGファイルを対象に変換します。

これは、これで良いのですが、スクリプトファイルをコピー又は移動する必要があります。また、指定した画像ファイルだけを対象に変換したいなどの事もありました。

今回は、少し改造して、vbsファイルにドラッグしたファイル、または、フォルダーを対象に変換するスクリプトに変えました。
これも使えると思います。

実は、昨日、私にヒントをくれた、鳥撮り仲間の一人に、前回のものと合わせ、今回のスクリプトをファイルで渡しました。
使ってみるとの事、どのような意見が帰ってくるのか楽しみです。

<使い方>

 下記のスクリプトをメモ帳等にコピーして拡張子を .vbs のファイル名で保存してください。

 どこでも良いのですが、ディスクトップ上が使いやすいかもしれません。

ディスクトップ上の、VBSスクリプトのアイコンに、変換したい画像ファイル(複数が可能)をドラッグする。
ドラッグした、写真ファイルのファイル名が変換されている。
フォルダーをドラッグすると、そのフォルダー内のJPG画像ファイル全てが変換されます。

 ※スクリプトの使用にあたっての不具合等に対し、弊社の責任は有りません事をご了解の上、自己責任の元行ってください。
スクリプトと言っても、ファイルを操作するプログラムです、十分注意して行ってくださいね。

 


 


Option Explicit
'============================
Dim i   
Dim objArgs
Dim objFSO
Dim objFiles
Dim objParentFolder
Dim objWshShell
Dim strParentFolder
Dim objIMGH_File

Set objArgs = WScript.Arguments
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWSHShell = CreateObject("Shell.Application")
For i = 0 To objArgs.Count - 1
    If objFSO.FileExists(objArgs(i)) Then
        Set objFiles = objFSO.GetFile(objArgs(i))
        Call renameFile(objFiles)   
    ElseIf objFSO.FolderExists(objArgs(i)) Then
        Set objParentFolder = objFSO.GetFolder(objArgs(i))
        Call renameFolder(objParentFolder)
    End If
Next
Set objParentFolder = Nothing   
Set objFiles = Nothing   
Set objArgs = Nothing   
Set objFSO = Nothing   
WScript.Quit   
'=============================================================
Sub renameFile(objFiles)   
	On Error Resume Next   
	Dim strExName    
	Dim newfn
	Dim imgIdx
	Dim FolderNAME
	Dim imgFilena
	Dim FolderRetu
	Dim satueiDate
	Dim satueiDate_A
        Dim folder_kaiso
        Dim JPGIndx
	Dim objWSHFolder
	Dim fileMotonaji
	Dim strText

	strExName = objFSO.GetExtensionname( objFiles)   
	'msgbox strExName
	if strExName = "JPG" or strExName = "jpg" Then
		newfn =  objFiles.DateCreated   
		folder_kaiso = left(objFiles.path , len(objFiles.path) - len(objFiles.name) - 1) 
		FolderNAME = Split(folder_kaiso,"\")	'\フォルダー階層区切りの¥マークでSPLIT
		FolderRetu = UBound(FolderNAME) 'フォルダー階層数
		imgFilena  = FolderNAME(FolderRetu)'画像ファイルのフォルダー名を取得
		'既にフォルダー名が付いているファイルは名前の変更は行わない
		fileMotonaji = InStr(1,objFiles.Name, imgFilena, 1)
		If fileMotonaji = 0 Then
			Set objWSHFolder = objWshShell.Namespace(folder_kaiso) 
			strText="" 
			'画像データから撮影日を取得
			JPGIndx = 12
			strText = objWSHFolder.GetDetailsOf(objWSHFolder.ParseName( objFiles.name), JPGIndx)
			if steText = "" then
				'撮影日情報が無い場合は更新日情報を取得
				JPGIndx = 3
				strText = objWSHFolder.GetDetailsOf(objWSHFolder.ParseName( objFiles.name), JPGIndx)
			end if
			'日付データの正規化
			satueiDate = InStr(1,strText, " ", 1)
			satueiDate_A = Mid(strText, 1, satueiDate - 1)
			satueiDate_A = Replace(satueiDate_A, "/", "-")   
			'ファイル名を書き換える フォルダ - 日付 - 元のファイル名
			objFiles.Name =  imgFilena & "-" & satueiDate_A & "-" & objFiles.Name
		End If
	End If
End Sub   
'==================================
Sub renameFolder(objParentFolder)   
    Dim FoldFile
    Dim objFiles
    Dim FoldInfc
    Dim SFile  
    Set FoldFile = objParentFolder.Files   
    For Each objFiles In FoldFile   
        Call renameFile(objFiles )   
    Next
       Set  FoldInfc = objParentFolder.SubFolders   
    For Each SFile In  FoldInfc   
        Call renameFolder(SFile) 
      Next   
    Set FoldFile = Nothing   
    Set SFile = Nothing   
End Sub
'=======================================

 

 

関連記事