Saída dir da tubulação do Windows Vista no comando attrib

0

Eu tinha um vírus ou algo no meu computador que definir os atributos para todas as pastas na raiz do meu disco externo para o sistema e oculto, e criei atalhos para eles. Agora estou tentando remover todos esses atributos de uma vez com o seguinte comando, mas não faz nada:

dir /ash /b | attrib -h -s

De acordo com o meu entendimento da documentação desses comandos, isso deve funcionar. Há algo de errado aqui?

Obrigado

    
por Merwe 04.02.2013 / 20:11

2 respostas

1

Sim. O canal | redireciona a saída do programa 1 para a entrada do programa 2. No entanto, seu programa 2 - attrib - não lê nenhuma entrada . Não foi escrito para fazer isso. Em vez disso, espera nomes de arquivos em sua linha de comando.

A maioria dos Unixes tem uma ferramenta chamada xargs para lidar com esses casos de conversão de entrada de texto em argumentos de linha de comando. (A maioria dos Unixes também tem uma ferramenta chamada find para lidar com esse caso específico de aplicação de um comando recursivamente também. (A maioria dos Unixes também tem um comando chmod que também tem uma opção de "modo recursivo", mas eu acho que isso é de pouca relevância aqui.))

No Windows, sem xargs , você terá que fazer algo como:

for/f "tokens=*" %f in ('dir/b/ash') do @attrib -r -h -s "%~f"

Ou talvez:

for/r . %f in (*) do @attrib -r -h -s "%~f"
    
por 04.02.2013 / 22:57
1

Na verdade, você pode fazer isso de uma maneira muito mais fácil

attrib e:\*.* -s -h /s

Removerá todos os atributos ocultos e do sistema, começando na raiz da unidade e: e todos os seus subdiretórios

o / s informa sobre os subdiretórios do processo.

    
por 05.02.2013 / 00:10