Muitas maneiras.
1) DIR / AH (provavelmente o método mais simples)
Use o comando DIR para procurar um arquivo com um atributo específico. Retorna o sucesso se encontrado, erro se não.
dir /ah file.ext >nul 2>nul && (
echo file.ext is hidden
) || (
echo file.ext is NOT hidden
)
2) Comando ATTRIB
Os códigos de atributo estão em maiúsculas. O código para oculto é H
, e acredito que esteja sempre na quinta posição. Use FINDSTR para procurar o código.
attrib file.ext | findstr "^....H" >nul && (
echo file.ext is hidden
) || (
echo file.ext is NOT hidden
)
3) FOR variável ~a
modificador
Os códigos de atributo estão em letras minúsculas e estão em uma ordem diferente do comando ATTRIB. O código para oculto é h
na quarta posição. Use FINDSTR para procurar o código.
for %%F in (file.ext) do echo %%~aF | findstr "^...h" >nul 2>nul &&
echo file.ext is hidden
) || (
echo file.ext is NOT hidden
)
ou use uma operação de substring. Não se esqueça de que a substring é 0 indexada.
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) Parâmetro ~a
modifier
Basicamente é o mesmo que com a variável FOR, exceto agora usando um parâmetro de script ou sub-rotina.
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
ou
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