チケット #24134

フォルダ制御及びファイルフォルダ属性付与

登録: 2011-01-14 01:57 最終更新: 2011-02-24 21:35

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし
投票
点数: 0
No votes
0.0% (0/0)
0.0% (0/0)

詳細

ファイル、フォルダ操作関連のコマンドで、filesearch,create,deleteのような形でfoldersearch,create,deleteコマンドやfilecreate,foldercreateにパラメータを1個追加してReadonly,Hiddenといった属性を付与することは可能でしょうか。

チケットの履歴 (10 件中 3 件表示)

2011-01-14 01:57 更新者: gorugon
  • 新しいチケット "フォルダ制御及びファイルフォルダ属性付与" が作成されました
2011-01-27 17:24 更新者: (del#1144)
  • コンポーネント(未割り当て) から Tera Term Macro に更新されました
  • マイルストーン(未割り当て) から Tera Term 4.69 (完了済み) に更新されました
コメント

getfileattr, setfileattr, foldercreate, folderdelete, foldersearch マクロコマンドを実装してみました。

http://ttssh2.sourceforge.jp/snapshot/snapshot-20110127.zip

2011-01-28 12:40 更新者: gorugon
コメント

早速のご対応ありがとうございました。
foldersearchでフォルダの有無を確認できないようですが、早速追加頂いた「getfileattr」を活用してフォルダの有無の確認が可能でした。

Target='C:\TEST'
getfileattr Target
if result <> -1 then

if result = $10 then
messagebox "フォルダが存在します" "folder_exist"
else
messagebox "ファイルが存在します" "file_exist"
endif

endif

2011-01-28 13:45 更新者: (del#1144)
コメント

foldersearchはフォルダがあると1を返します。

Target='C:\TEST'
foldersearch Target
messagebox result 'result'

私の手元ではこれで正しく値が返ってきますが、いかがですか?

また、getfileattrの返り値にはビット演算を使う必要があります。数値の比較では、別の属性が付いてる場合に正しく結果が得られません。

2011-01-28 15:36 更新者: None
コメント

説明不足ですいません。
ご連絡通りfoldersearchでフォルダが存在する場合は「1」を返しますが、
同一名のファイルが存在する場合は「0」を返す挙動なので、同一名のファイルが存在しますと
folderserch=1,foldercreateでは失敗してしまいます。
これを回避するために、getfileattrで属性がフォルダか否か確認してフォルダの場合とファイルの場合で
処理を分岐させようと考えていました。
getfileattrの返り値に以下の通りビット演算子を使ってフォルダか否か確認していますが、問題ないでしょうか。

Target='C:\TEST'
getfileattr Target
if result <> -1 then

if result & $10 > 0 then
messagebox "フォルダが存在します" "folder_exist"
else
messagebox "ファイルが存在します" "file_exist"
endif

endif

2011-01-28 17:00 更新者: (del#1144)
コメント

「ファイルでもフォルダでもその名前のもがない」ことを確認するには、 filesearch を使うとよいと思います。

「その名前のものがある/ファイルがある/フォルダがある」をすべて区別したいときには、おっしゃるように getfileattr を使うか、snapshot に含まれるヘルプの例のようにする必要があるでしょう。

filesearch がファイルまたはフォルダがある場合に「ある」と返すように実装されていたため、そちらからフォルダチェックの機能を削除することはしませんでした。「フォルダがあるときだけその中にファイルを作る」のような用途では、単体のfoldersearchが使えると思います。

2011-01-28 17:26 更新者: None
コメント

filesearchのヘルプの例をしっかり読んでいませんでした。
例のコードで対応可能ですね。
ありがとうございました。

2011-01-28 19:46 更新者: None
コメント

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
読み取り専用属性を解除して削除可能にすることはできますでしょうか。
フォルダだけでなく、ファイルに関しても同様の動作でした。

2011-01-29 00:44 更新者: (del#1144)
  • 解決法なし から 修正済み に更新されました
コメント

手動でフォルダの読み取り専用のチェックをはずし

当方の環境はXPですが、この操作の後getfileattrで確認すると読み取り専用属性は解除されていませんでした。http://www.geocities.jp/site_uma/win01.html

attr = result | $80

既存の属性値と$80の論理和を作成していますが、ヘルプからリンクしている"File Attribute Constants"をご覧頂くと「0x80は単独で使うこと」と説明があります。

また、削除したい属性値が0x1と分かっているなら、attr = result & ~$1 とすることで 0x1 を削除した属性値を作成できます。

2011-02-24 21:35 更新者: (del#1144)
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2011-02-24 21:35 に更新されました

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする