(不明)である場合はエラーが発生する。(不明)である場合はエラーが発生する。(不明)である場合はエラーが発生する。attr(num)'24.数字が与えられると、その属性を返す。Functionいきなり長めのスクリプトですが、要点を順番に見ていきましょう。1.のFileSystemObject作成は前のLesson13ですでにやりました。2.〜4.ではWshArgumentsオブジェクトを作成して、コマンドラインオプションを読み込んでいます。これも解説済みですね。ファイル名が指定されていなければ、InputBoxを表示して入力させるようにしています。5.、7.でFileExistsメソッド・FolderExistsメソッドを使って、指定された文字列がファイルのパスなのか、フォルダのパスなのかを確認しています。6.で、もしファイルならGetFileメソッドにそのパスを引数として指定し、Fileオブジェクトを取得しています。Fileオブジェクトはfというオブジェクト変数に入りました。8.では同様にGetFolderメソッドで、Folderオブジェクトを取得しています。どちらも同じ変数名fを使っていますが、これは、Fileオブジェクト・Folderオブジェクトで共通のプロパティを後で使用するためです。9.では、FolderオブジェクトのIsRootFolderプロパティを使って、取得したFolderオブジェクトがルートフォルダ(C:\など)でないかどうか、確認しています。ルートならTrueが返るので、その場合は終了します。この処理が必要かというと、後でFolderオブジェクトの様々なプロパティを参照するとき、ルートフォルダだとエラーが返されたりする事が多いからです。11.〜21.までは、Fileオブジェクト・Folderオブジェクト共通のプロパティを参照し、それぞれ変数に代入しています。それぞれのプロパティの返す値はとくに解説は必要ないでしょう。ファイルやフォルダの属性(隠しファイル、読みとり専用など)を取得する、Attributesプロパティを解釈するには少々面倒な手順が必要になります。そこで、このスクリプトではAttributesプロパティが返す整数を、具体的な属性名に変換するためのattrファンクション(24.)を記述し、それを19.で参照するようにしています。このファンクションに関する解説はここではしないことにしておきます。逆にAttributesプロパティを設定するのは簡単で、その例は次のサンプルスクリプトをご覧ください。最後に、23.で得られた情報をMsgBoxで表示させています。ここで登場するFormatNumber関数は、与えられた数字を整形して文字列として返す、便利な関数です。引数など詳細はランゲージリファレンスをどうぞ。今度は、Fileオブジェクト・Folderオブジェクトのプロパティを設定するスクリプトです。下のスクリプトは、ファイルの名前と属性を変更するものです。'1.WshArgumentsオブジェクトを取得。'2.もしオプションがついていなければpath=InputBox("属性を変更したいファイル・フォルダ名を入力してください。"ルートフォルダは指定できません。"このパスは実在しません。("新しい名前を入力してください。"書き込みできませんでした。"すでに同名のファイルが存在しています。"次の文字はファイル名に使用できません。属性は各値の和を指定する。Function今度も長めですが、というかこのLessonはこんなのばっかりですががんばって行きましょう。1〜9までに関しては、前のサンプルと同じなので省略します。9.以降でまず、新しいファイル名を指定するためのインプットボックスを表示させ、nnameという変数に代入しています。10.から14.までで、入力されたファイル名(nname)が妥当なものであるかをチェックしています。10.で、InputBoxでキャンセルを押した場合は終了させるようにしています。11.で、後に記述しているAvailableNameプロシージャを呼び出して、入力された文字列に、ファイル名として使用してはいけない文字が入っていないかどうかを調べています。12.では、もとのファイル名と異なっているかどうかを判断しています。13.、14.ではエラー番号を調べてエラーを表示させるようにしています。15.でいよいよ属性変更しています。FileオブジェクトのAttributesプロパティに、属性を表す数値の和を代入すると、属性を変更することができます。読みとり専用属性は、1なので、1を指定すると読みとり専用属性がつき、隠しファイル(2)も同時に指定したい場合は、1+2=3を指定すればよいのです。このスクリプトでは、各属性をつけるかどうか、MsgBoxでユーザーに問い合わせ、「はい」と答えると、その属性を表す整数をattrという変数に加え、最後にこのattrという変数の値をAttributesプロパティに入れることで属性変更しています。ちなみにattr=0の場合は無属性のファイルになります。最後にAvailableNameファンクション(16.)を見ておきましょう。17.で、Split関数を使って、「ファイル名としては使ってはいけない文字」が格納された、一次元配列を作っています。記述しなければならないので面倒ですね。Functionでこのプロシージャを終了させています。どの文字も含まれていなかった場合は、この行は実行されないので、AvailableName=Trueを返すことになります。次は、Filesコレクション(Fileオブジェクトの集合)、Foldersコレクション(Folderオブジェクトの集合)を用い、再帰呼び出しを使ったファイル名検索スクリプトです。WScript.CreateObject("Scripting.FileSystemObject")filename=InputBox("検索するファイル名を入力してください。'1.WshArgumentsオブジェクトを取得。'2.もしオプションがついていなければpath=InputBox("検索したいフォルダ名を入力してください。"このパスは実在しません。Sub1.〜6.まではこれまでのスクリプトと同様なので、省略します。5.で、指定されたフォルダのパス(path)を引数として、RecursibleSearchプロシージャを呼び出しています。ところで、FoldersコレクションにはAddメソッドというのがあり、その例も書かないとだめだがまだ未完成だぞどんどん行きましょう。次は、Drivesコレクションと、Driveオブジェクトの使用例です。"個のドライブが見つかりました。