9

バッチ ファイルを作成していますが、ファイルが読み取り専用かどうかを知る必要があります。どうやってやるの ?

%~a 修飾子を使用してそれらを取得する方法は知っていますが、この出力をどうするかはわかりません。-ra------ のようなものが得られます。これをバッチファイルで解析するにはどうすればよいですか?

4

2 に答える 2

13

このようなものが機能するはずです:

@echo OFF

SETLOCAL enableextensions enabledelayedexpansion

set INPUT=test*

for %%F in (%INPUT%) do (
    set ATTRIBS=%%~aF
    set CURR_FILE=%%~nxF
    set READ_ATTRIB=!ATTRIBS:~1,1!

    @echo File: !CURR_FILE!
    @echo Attributes: !ATTRIBS!
    @echo Read attribute set to: !READ_ATTRIB!

    if !READ_ATTRIB!==- (
        @echo !CURR_FILE! is read-write
    ) else (
        @echo !CURR_FILE! is read only
    )

    @echo.
)

これを実行すると、次の出力が得られます。

ファイル:test.bat
属性:-a ------
次のように設定された属性の読み取り:-
test.batは読み取り/書き込みです

ファイル:test.sql
属性:-ra ------
次のように設定された属性の読み取り:r
test.sqlは読み取り専用です

ファイル:test.vbs
属性:-a ------
次のように設定された属性の読み取り:-
test.vbsは読み取り/書き込みです

ファイル:teststring.txt
属性:-a ------
次のように設定された属性の読み取り:-
teststring.txtは読み取り/書き込みです
于 2009-05-20T14:46:28.657 に答える
7

特定のファイルをテストするには:

dir /ar yourFile.ext >nul 2>nul && echo file is read only || echo file is NOT read only

読み取り専用ファイルのリストを取得するには

dir /ar *

読み取り/書き込みファイルのリストを取得するには

dir /a-r *

すべてのファイルを一覧表示し、読み取り専用か読み取り/書き込みかをレポートするには:

for %%F in (*) do dir /ar "%%F" >nul 2>nul && echo Read Only:  %%F|| echo Read/Write: %%F

編集

ファイル名に が含まれている場合、パトリックの回答!は失敗します。これは、ループ内で遅延展開のオンとオフを切り替えることで解決できますが、%%~aF遅延展開や環境変数に頼らずに値をプローブする別の方法があります。

for %%F in (*) do for /f "tokens=1,2 delims=a" %%A in ("%%~aF") do (
  if "%%B" equ "" (
    echo "%%F" is NOT read only
  ) else (
    echo "%%F" is read only
  )
)
于 2014-12-08T04:26:45.783 に答える