Я пишу командный файл, который покажет и запустит другой командный файл или, если файл уже не скрыт, запустит командный файл и снова его спрячет. Как проверить, скрыт ли файл?

2 ответа2

0

Много способов.

1) DIR /AH (вероятно, самый простой метод)

Используйте команду DIR для поиска файла с определенным атрибутом. Возвращает успех, если найден, ошибку, если нет.

dir /ah file.ext >nul 2>nul && (
  echo file.ext is hidden
) || (
  echo file.ext is NOT hidden
)

2) команда ATTRIB

Коды атрибутов указаны в верхнем регистре. Код для скрытого - H , и я считаю, что он всегда находится на пятой позиции. Используйте FINDSTR для поиска кода.

attrib file.ext | findstr "^....H" >nul && (
  echo file.ext is hidden
) || (
  echo file.ext is NOT hidden
)

3) для переменной ~a модификатор

Коды атрибутов в нижнем регистре, и они находятся в другом порядке, чем команда ATTRIB. Код для скрытого h в четвертой позиции. Используйте FINDSTR для поиска кода.

for %%F in (file.ext) do echo %%~aF | findstr "^...h" >nul 2>nul &&
  echo file.ext is hidden
) || (
  echo file.ext is NOT hidden
)

или используйте операцию подстроки. Не забывайте, что подстрока имеет индекс 0.

for %%F in (file.ext) do set "attr=%%~aF"
if %attr:~3,1% equ h (
  echo file.ext is hidden
) else (
  echo file.ext is NOT hidden
)

4) Параметр ~a модификатор

В основном так же, как с переменной FOR, за исключением того, что теперь используется сценарий или параметр подпрограммы.

call :IsHidden file.ext &&
  echo file.ext is hidden
) else (
  echo file.ext is NOT hidden
)
exit /b

:isHidden
echo %~a1 | findstr "^...h" >nul 2>nul
exit /b

или же

call :IsHidden file.ext &&
  echo file.ext is hidden
) else (
  echo file.ext is NOT hidden
)
exit /b

:isHidden
setlocal
set "att=%~a1"
if %att:~3,1% equ h exit /b 0
exit /b 0
0

Вы можете использовать это в PowerShell, чтобы получить список скрытых файлов

Get-ChildItem X:\My\Path -Recurse -Force | Where { ($_.Attributes.ToString() -Split ", ") -Contains "Hidden" } | Select FullName

Вы должны быть в состоянии использовать dir/ah для того же результата в cmd в текущем пути.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .