Use script em lote para verificar se o arquivo está oculto

0

Estou escrevendo um arquivo de lote que mostrará e executará outro arquivo de lote ou, se o arquivo já estiver reenviado, executará o arquivo de lote e o ocultará novamente. Como faço para verificar se um arquivo está oculto?

xplusplus
fonte
Eu tenho um código que pode exibir arquivos quando os arquivos ocultos não podem ser desmarcados. Aqui está - attrib -s -h K: *. * / S / d Mas eu não conheço nenhum método para verificar como obter uma lista de arquivos ocultos. Saber mais
Marks PC Solution
Encontrei isto em outro site. Mesmo assunto. [windows-batch-script-para-unhide-files-hidden-by-virus] [1] [1]: stackoverflow.com/questions/8095002/…
rdubyab

Respostas:

0

Você pode usar isso no PowerShell para obter uma lista de arquivos ocultos

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

Você deveria poder usar dir/ah para o mesmo resultado em cmd no caminho atual.

Zulgrib
fonte
0

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 é He 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) para 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 esqueça 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 modificador

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
dbenham
fonte