我正在写一个批处理文件,我需要知道一个文件是否是只读的。我怎样才能做到这一点 ?
我知道如何使用 %~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
编辑
如果文件名包含.Patrick 的答案!
将失败。这可以通过在循环中打开和关闭延迟扩展来解决,但是还有另一种方法可以在%%~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
)
)