

### 現状

Windows上のブラウザ（特にChrome系）でファイルをダウンロードして、そのファイルのプロパティを見ると、  
「このファイルは他のコンピューターから取得したものです。このコンピューターを保護するため、このファイルへのアクセスはブロックされる可能性があります。
［許可する(&K)］」  
といった注釈がついていることがあります。

もちろん「許可する(&K)」にチェックを入れてOKボタンを押せば当該ファイルからはフラグが落ちますし、放置しておいても特に何か実害があるわけではなさそうなのですが、何となくムズ痒い気分なので、できれば手元の大量のファイルぜんぶについて、このフラグを洗いざらい落としてしまいたいと考えています。

### 質問

このフラグについて、「立っているかどうか確認する」「立っていたら落とす」ためにはどんなコードを書けばいいでしょうか？どこかにサンプルコードなどがありましたらご教示ください。参照すべきAPIへのポインタだけでも助かります。

今回の用途で当方が使えそうな言語は大体このくらいです：

  * WSHでScripting.FileSystemObject等を使う。
  * MinGW-w64でコンソールアプリを書いて、その中からWin32APIを呼び出す。
  * ActivePerlで書いて、標準ライブラリとWin32APIを使う。

とはいえ、それ以外でも汎用言語ならコードを読めば大体理解できるつもりです。  
（PowerShellなどはさすがにチンプンカンプンですが…）

以上、よろしくお願いします。

P.S.  
当座はWindows10で作業する予定ですが、WindowsXPマシンもまだファイルサーバー・プリンタサーバーとして運用中なので、XPでも動くコードになれば嬉しいです。


CC BY-SA 4.0
2022-07-01T00:13:37.127
89696
2022-07-01T03:12:07.033
2022-07-01T03:12:07.033
3060
52036
question
windows
「このファイルは他のコンピューターから取得したものです」フラグをスクリプトで操作したい


ブロックの解除(立っていたら落とす)については、powershell で [`Unblock-
File`](https://www.aruse.net/entry/2020/08/04/210157)コマンドレットを使うのが一番楽で愛用しています。  
コマンドプロンプトと同様に使えますので試してみてはいかがでしょうか。


CC BY-SA 4.0
2022-07-01T00:38:00.877
89697
2022-07-01T00:38:00.877
9820
89696
answer


それはNTFSファイルシステムの「代替データストリーム（ADS：Alternate Data Stream)」という領域に中身があります  
<https://atmarkit.itmedia.co.jp/ait/articles/1407/11/news111.html>

利用するツールによりますが、例えばa.exe というファイルのフラグが立っているかを調べるには  
a.exe:Zone.Identifier をcatなりすれば中身を見れます。

ほぼファイルと同様に扱えるので、削除するには  
del a.exe:Zone.Identifier で消えます。  
コマンドプロンプトのdelコマンドで消える事を確認しました。


CC BY-SA 4.0
2022-07-01T02:44:00.367
89699
2022-07-01T02:44:00.367
805
89696
answer