第17回 FileSystemObjectオブジェクトを利用する(2)基礎解説 演習方式で身につけるチェック式WSH超入門(4/5 ページ)

» 2008年05月15日 00時00分 公開

名前を変更するNameプロパティ

 次は逆に、プロパティを設定する方法について述べる。プロパティは設定可能なものと不可能なものがあるが(前出の表参照)、ほとんどは設定不可能である。具体的にはNameプロパティとAttributesプロパティだけが設定可能である。よってここではNameプロパティを設定するスクリプトを考え、例題としたい。

CHECK!

マーカーで隠れたところを選択してチェックしてみよう。


※ファイル:RenameFile.vbs

Option Explicit

Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Dim strArgument
Dim objFile
Dim strNewFileName

If WScript.Arguments.Count > 0 Then 'コマンドライン引数が存在すれば
    strArgument = WScript.Arguments(0) '一つ目の引数を取る
    'もし引数がファイルなら
    If objFSO.FileExists(strArgument)Then
        On Error Resume Next
        'Fileオブジェクト取得
        Set objFile = objFSO.GetFile(strArgument)
        strNewFileName = InputBox( _
            "新しいファイル名を入力してください。" & vbCrLf & _
            "現在のファイル名は " & vbCrLf & _
            objFile.Name & vbCrLf & _
            "です。", , objFile.Name
        If strNewFileName <> "" Then
            If strNewFileName <> objFile.Name Then
                'もし現在の名前と違う名前が指定されたら、指定された名前に変える
                objFile.Name = strNewFileName
            Else
                MsgBox "ファイル名が同じです。" ,vbCritical
            End If
           
            Select Case Err.Number
            Case 0 'エラーがなければ何もしない
            Case 70
                MsgBox "書き込みできませんでした。" ,vbCritical
            Case 58
                MsgBox "すでに同名のファイルが存在しています。" ,vbCritical
            Case 52
                MsgBox "次の文字はファイル名に使用できません。" & vbCrLf & _
                       "\ / : , ; * ? "" < > |", vbCritical
            Case Else
                MsgBox Err.Number & ": " & Err.Description, vbCritical
            End Select
        End If
        On Error Goto 0
    Else
        MsgBox "ファイルのパスを指定してください。", vbExclamation
    End If
End If

Set objFile = Nothing
Set objFSO = Nothing

 このスクリプトを実行すると、ファイル名を変更するためのダイアログが表示され、新しいファイル名を入力するとそのファイル名に変更される。空白を指定した場合やキャンセルした場合は何もしない。エラーが発生するとエラーメッセージを表示する。

RenameFile.vbsの実行例
ファイルをドロップすると、既存のファイル名がテキスト・ボックスに入力された状態になり、新しいファイル名を入力可能となる。

 このサンプルでは、ファイル名を変更するだけの処理なのに、少し過剰なまでにエラー処理をしてみたが、ここまで神経質になることはないかもしれない。必要に応じてエラー処理は簡略化してもよいだろう。ここではエラー番号によって場合分けする例を示した。鍵となるのは隠している部分である。GetFileメソッドでFileオブジェクトを取得し、Nameプロパティを参照、そして設定している。

属性を変更するAttributesプロパティ

 ここでは部分的にしか取り上げないが、Attributesプロパティも設定可能である。前出のスクリプト中の定数の値の合計を指定すれば、その属性ビットがセットされる(定数の宣言は忘れないように!)。

objFile.Attributes = ReadOnly + Archive '読み取り専用とアーカイブ属性にする

 属性を外すには引き算をする。

If (objFile.Attributes And ReadOnly) = ReadOnly Then
    objFile.Attributes = objFile.Attributes - ReadOnly '読み取り専用属性を外す
End If

 もしくは次のようなビット演算でも可能である。

objFile.Attributes = objFile.Attributes And Not ReadOnly '読み取り専用属性を外す

 属性を加えるにはOr演算をする

objFile.Attributes = (objFile.Attributes Or ReadOnly) '読み取り専用属性を付ける

 複数の属性を付けたり外したりする場合は、これらの行を複数回呼び出せばよい。だがAttributesプロパティの値が属性値に対応する2進数によるビットの組み合わせで成り立っていることを理解していれば、ビット演算子を駆使して簡単に1行で記述することもできる。本連載では詳しく取り上げないが、興味のある方は「ビット演算」をキーワードに学習を進められたい。ここで取り上げた式の意味も理解できるようになるだろう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。