Я пишу командный файл, который покажет и запустит другой командный файл или, если файл уже не скрыт, запустит командный файл и снова его спрячет. Как проверить, скрыт ли файл?
2 ответа
Много способов.
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
Вы можете использовать это в PowerShell, чтобы получить список скрытых файлов
Get-ChildItem X:\My\Path -Recurse -Force | Where { ($_.Attributes.ToString() -Split ", ") -Contains "Hidden" } | Select FullName
Вы должны быть в состоянии использовать dir/ah
для того же результата в cmd в текущем пути.