2

バックグラウンド

Windows 7では、ファイルがインターネットからダウンロードされると、一部のブラウザー(IEやFirefoxなど)は、ファイルがインターネットからのものであるとフラグを立てます。これは、ファイルのプロパティダイアログで明らかです。このダイアログには、プロパティウィンドウの下部にメッセージと[ブロック解除]ボタンが表示されます。

このプロパティは、代替ストリームとしてNTFSファイルシステムに保存されます。具体的には、「Zone.Identifier」という名前のストリームです。したがって、ブロックされたファイルでコマンドmore < file.exe:Zone.Identifierを実行すると、次の出力が得られます。

[ZoneTransfer]
ZoneId=3

このデータは、コマンドでクリアできますecho. > file.exe:Zone.Identifier。これにより、上記のデータが空白行で上書きされ、Zone.Identifierストリームがファイルにまだ存在している間、プロパティダイアログで確認されたようにファイルが「ブロック」されなくなります。

問題

FAT32ファイルシステムには明らかにNTFS代替ストリームがありません。したがって、コマンドecho. > file.exe:Zone.Identifierは次の出力を提供します。

The filename, directory name, or volume label syntax is incorrect.

これはstdoutに出力されるため、最後に2>NULを追加しても抑制されません。最後に1>NULを追加すると、それは抑制されますが、コマンドが有用なことを実行することも抑制されます。つまり、を実行するecho. > file.exe:Zone.Identifier 1>NULと、Zone.Identifierストリームは残ります。

echo. > file.exe:Zone.IdentifierNTFSでコマンドを正常に実行し、FAT32でのエラー出力を抑制するにはどうすればよいですか?

4

1 に答える 1

4

コマンドはNUL へのecho. > file.exe:Zone.Identifier 1>NULリダイレクトを引き起こし、最初のリダイレクトは無視されます。echo.

追加する2>NULと、echo の stderr が NUL にリダイレクトされます。echo回避しようとしているメッセージは、コマンド自体ではなく、失敗したリダイレクトによって stderr に出力されます。

解決策は、括弧を使用してコマンドを 2 つのフェーズに分割することです。

(echo. > file.exe:Zone.Identifier) 2>NUL

これによりecho.、最初に実行され、その出力が別のファイル ストリームにリダイレクトされます。FAT ファイルシステムの代替ファイル ストリームへの書き込みに失敗した場合、stderr への出力は NUL にリダイレクトされます。

于 2012-02-14T23:14:04.720 に答える