・・・って、一旦 VBScriptのソースだけ公開。
おきつね環境では かなり以前に組み、利用し続けているスクリプトなんだケド、唐突に公開してみる。
このスクリプトや そのショートカットに、フォルダやファイルをドロップして利用する。
尚、ファイルでは ドロップ出来る数に限りがある。
数百数千のファイルを一気に処理する場合は、フォルダをドロップして用いるよう構成している。
従って、意図的にフォルダ名の置換書き換えはサポートしていない。 その事に因んで "Simple"と銘打ってる。 |
最初の画面で ファイル名に含まれる "任意の文字列A" を指定、続く画面で、"置換したい文字列B" を指定して実行すると、
文字列Aがある対象のみ その箇所を、2番目に指定した文字列Bで置換したファイル名に変える それだけのスクリプト。
但し、簡易化の過程で 大幅に処理を省き、対象となるオブジェクト(ファイル)の名前を直接変える構造にした為、
アルファベットの大文字小文字の置換は "ファイル名が変わってない" と 判断されてエラー停止する。 |
因みに、最初の指定条件に "ファイル名に含まれる消したい文字列" を、
続く画面を "無入力" で 進めると、その文字列を含まないファイル名に書き換えられる。 |
◆ 肝心のスクリプトはコンなカンジ。
■ SimpleReplacedRename.vbs
Option Explicit
Public My, Parameters, MySh, Fs
Set My = WScript
With My
Set Parameters = .Arguments
If Parameters.Count <= 0 Then
.Quit
End If
Set MySh = .CreateObject("WScript.Shell")
Set Fs = .CreateObject("Scripting.FileSystemObject")
End With
Public ThisScript
Dim vbWCrLf, vbTc
vbWCrLf = vbCrLf & vbCrLf
vbTc = vbTab & vbCrLf
Dim strTarget, strReplace, Result, strResult
ThisScript = Fs.GetBaseName(My.ScriptFullName)
If Parameters.Count > 1 Then
fStart "RenameStart?"
End If
strTarget = InputBox("TargetStrings", ThisScript)
If strTarget = "" Then
exQuit
End If
strReplace = InputBox("ReplacingStrings", ThisScript)
If strReplace = "" Then
fStart "RenameStart?"
End If
Result = fReplace(Parameters, strTarget, strReplace, 0)
If TypeName(Result) = "String" Then
strResult = Result
Else
If Result > 0 Then
strResult = "Renamed - " & Result & "File"
Else
strResult = "TargetNotFound"
End If
End If
MySh.Popup strResult & vbTab, 15, ThisScript,64
exQuit
Function fStart(strMessage)
Dim sResult
sResult = 1
sResult = MySh.Popup(strMessage, 15, ThisScript, 33)
If sResult = 2 Then
exQuit
Else
fStart = sResult
End IF
End Function
Sub exQuit()
Set Fs = Nothing
Set MySh = Nothing
My.Quit
End Sub
Function fReplace(arTargets, strTarget, strReplace, ExitensionFlag)
Dim Pc, Source, Extention, arSource, strFile, objSource, strName
Pc = 0
If strTarget = "" Then
fReplace = "ParameterError" & vbWCrLf & " 置換対象文字列が指定されていません。"
Else
For Each Source in arTargets
Extention = Fs.GetExtensionName(Source)
If Extention = "" Then
Set arSource = Fs.GetFolder(Source).Files
Else
arSource = Array(Source)
End If
For Each strFile In arSource
Set objSource = Fs.GetFile(strFile)
With objSource
If ExitensionFlag = 1 Then
strName = Fs.GetBaseName(.Name)
strName = Replace(strName, strTarget, strReplace)
strName = strName & "." & Fs.GetExtensionName(.Name)
Else
strName = Replace(.Name, strTarget, strReplace)
End If
If .Name = strName Then
Else
.Name = strName
Pc = Pc + 1
End If
End With
Set objSource = Nothing
Next
Next
fReplace = Pc
End If
End Function
|
|
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。