質問

私は、バッチファイルを書いていると私は、ファイルが読み取り専用であるかどうかを知る必要があります。どのように私はそれを行うことができますか?

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

役に立ちましたか?

解決

このような何か作業をする必要があります:

@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.
)
私はこれを実行すると

私は次の出力を取得します:

File: test.bat
Attributes: --a------
Read attribute set to: -
test.bat is read-write

File: test.sql
Attributes: -ra------
Read attribute set to: r
test.sql is read only

File: test.vbs
Attributes: --a------
Read attribute set to: -
test.vbs is read-write

File: teststring.txt
Attributes: --a------
Read attribute set to: -
teststring.txt is read-write

他のヒント

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

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
  )
)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top