フォルダ制御及びファイルフォルダ属性付与
getfileattr, setfileattr, foldercreate, folderdelete, foldersearch マクロコマンドを実装してみました。
早速のご対応ありがとうございました。
foldersearchでフォルダの有無を確認できないようですが、早速追加頂いた「getfileattr」を活用してフォルダの有無の確認が可能でした。
Target='C:\TEST'
getfileattr Target
if result <> -1 then
endif
foldersearchはフォルダがあると1を返します。
Target='C:\TEST' foldersearch Target messagebox result 'result'
私の手元ではこれで正しく値が返ってきますが、いかがですか?
また、getfileattrの返り値にはビット演算を使う必要があります。数値の比較では、別の属性が付いてる場合に正しく結果が得られません。
説明不足ですいません。
ご連絡通りfoldersearchでフォルダが存在する場合は「1」を返しますが、
同一名のファイルが存在する場合は「0」を返す挙動なので、同一名のファイルが存在しますと
folderserch=1,foldercreateでは失敗してしまいます。
これを回避するために、getfileattrで属性がフォルダか否か確認してフォルダの場合とファイルの場合で
処理を分岐させようと考えていました。
getfileattrの返り値に以下の通りビット演算子を使ってフォルダか否か確認していますが、問題ないでしょうか。
Target='C:\TEST'
getfileattr Target
if result <> -1 then
endif
「ファイルでもフォルダでもその名前のもがない」ことを確認するには、 filesearch を使うとよいと思います。
「その名前のものがある/ファイルがある/フォルダがある」をすべて区別したいときには、おっしゃるように getfileattr を使うか、snapshot に含まれるヘルプの例のようにする必要があるでしょう。
filesearch がファイルまたはフォルダがある場合に「ある」と返すように実装されていたため、そちらからフォルダチェックの機能を削除することはしませんでした。「フォルダがあるときだけその中にファイルを作る」のような用途では、単体のfoldersearchが使えると思います。
filesearchのヘルプの例をしっかり読んでいませんでした。
例のコードで対応可能ですね。
ありがとうございました。
foldersearch,foldercreate,folderdelete,getfileattr,setfileattrの一通りの動作を確認したところ、
問題なく動作しておりますが、一点以下の事象が想定された挙動なのか確認させてください。
file = 'c:\TEST'
foldercreate file
getfileattr file
attr = result | $1
setfileattr file attr
上記を実行後してフォルダを読み取り専用にした後、手動でフォルダの読み取り専用のチェックをはずし、
別のマクロでフォルダ削除を試みてもフォルダを削除することができませんでした。
file = 'c:\TEST'
folderdelete file
また、上記削除マクロに追加して属性を$80に変更してから削除を試みましたが削除できませんでした。
file = 'c:\TEST'
getfileattr file
attr = result | $80
setfileattr file attr
folderdelete file
読み取り専用属性を解除して削除可能にすることはできますでしょうか。
フォルダだけでなく、ファイルに関しても同様の動作でした。
手動でフォルダの読み取り専用のチェックをはずし
当方の環境はXPですが、この操作の後getfileattrで確認すると読み取り専用属性は解除されていませんでした。http://www.geocities.jp/site_uma/win01.html
attr = result | $80
既存の属性値と$80の論理和を作成していますが、ヘルプからリンクしている"File Attribute Constants"をご覧頂くと「0x80は単独で使うこと」と説明があります。
また、削除したい属性値が0x1と分かっているなら、attr = result & ~$1 とすることで 0x1 を削除した属性値を作成できます。
ファイル、フォルダ操作関連のコマンドで、filesearch,create,deleteのような形でfoldersearch,create,deleteコマンドやfilecreate,foldercreateにパラメータを1個追加してReadonly,Hiddenといった属性を付与することは可能でしょうか。