Тестирование атрибута файла в пакетном файле

StackOverflow https://stackoverflow.com/questions/888264

  •  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
  )
)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top