Тестирование атрибута файла в пакетном файле
-
23-08-2019 - |
Вопрос
Я пишу пакетный файл, и мне нужно знать, доступен ли файл только для чтения.Как я могу это сделать ?
Я знаю, как получить их с помощью модификатора %~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.
)
Когда я запускаю это, я получаю следующий вывод:
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
)
)