バッチ ファイルを作成していますが、ファイルが読み取り専用かどうかを知る必要があります。どうやってやるの ?
%~a 修飾子を使用してそれらを取得する方法は知っていますが、この出力をどうするかはわかりません。-ra------ のようなものが得られます。これをバッチファイルで解析するにはどうすればよいですか?
バッチ ファイルを作成していますが、ファイルが読み取り専用かどうかを知る必要があります。どうやってやるの ?
%~a 修飾子を使用してそれらを取得する方法は知っていますが、この出力をどうするかはわかりません。-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.
)
これを実行すると、次の出力が得られます。
ファイル:test.bat 属性:-a ------ 次のように設定された属性の読み取り:- test.batは読み取り/書き込みです ファイル:test.sql 属性:-ra ------ 次のように設定された属性の読み取り:r test.sqlは読み取り専用です ファイル:test.vbs 属性:-a ------ 次のように設定された属性の読み取り:- test.vbsは読み取り/書き込みです ファイル:teststring.txt 属性:-a ------ 次のように設定された属性の読み取り:- teststring.txtは読み取り/書き込みです
特定のファイルをテストするには:
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
)
)