Estou lutando com um dos erros mais frustrantes que já vi.
Descrição do bug:
O for
comando do interpretador de comandos não pode ver arquivos ocultos.
Etapas de reprodução:
- Crie um diretório temporário
- Crie alguns arquivos
- Atribua uma variedade de atributos aos arquivos (incluindo ocultos)
- Use um comando como
for %i in (*) do echo "%i"
Resultados esperados:
Todos os arquivos são processados no for
loop por padrão ou através de uma opção.
Resultados reais:
- Arquivos com qualquer atributo diferente de oculto são processados; arquivos sinalizados como ocultos são ignorados
- Não há opção para o
for
comando permitir processar arquivos ocultos
Implicações:
Não há como processar todos os arquivos no prompt de comando.
Pergunta, questão:
Como diabos os arquivos ocultos podem ser processados no prompt de comando ou nos arquivos em lotes (pelo menos no Windows, se não no DOS)?
fonte
ls.exe
seja útil, ofor
comando é incorporado ao shell como no Windows. Suponho que alguém possa usar uma porta shell do Unix, mas esse não seria o prompt de comando do Windows.)ls
paraxargs
ou simplesmente usarfind
. Ambos estão disponíveis para Windows.for
comando interno).Aqui está uma solução alternativa (feia, desagradável, não ideal) para arquivos:
E uma versão para pastas (análoga a
for /d…
):E uma versão para ambos (sem
for
analógico, portanto, isso é um benefício):Versão recursiva para arquivos (
for… /r
):E pastas (
for /r /d…
):E ambos
Isso funciona mais ou menos, mas definitivamente tem seus problemas (especialmente para grandes conjuntos de arquivos ou pastas). Espero que exista uma solução melhor ou a Microsoft possa corrigir / melhorar isso em um patch.
fonte
tokens=*
você, você pode omitir adelims=
opção, e o*
é redundante. Tambémdir /b/a
listará diretórios e arquivos. Se você deseja apenas arquivos, precisadir /b/a:-d
. E como esse comportamento da linha de comando do Windows não mudou em 20 anos, provavelmente não vai mudar agora. Não gosta disso? Use VBScript ou PowerShell./f
outra coisa senão para processar as linhas em um arquivo de texto (por exemplo,for /f "delims=" %i in (list.txt)…
), por isso não conheço bem as opções extras. Você está certo em/a
listar diretórios; Não sei por que meu teste anterior não os listou.tokens
edelims
totalmente excluídas para este). Por enquanto, vou aceitar isso porque ele mantém afor
sintaxe, então nada precisa ser reescrito e "simplesmente funciona"./f
switch para usar muito um comando para a expressão de loop nos últimos meses e, para ser sincero, estou realmente me acostumando. Ele ainda tem a desvantagem de que deve primeiro enumerar todos os arquivos / pastas para criar uma lista antes mesmo de iniciar o comando, mas também possui alguns benefícios como: • usardir
para acessar arquivos / pastas ocultos / do sistema; • criar a lista antes do processamento; itens de processamento que são modificados; umfor
loop regular enumera in situ, para que ele possa inserir um loop infinito, pois os objetos modificados podem aparecer como novos a serem (re) processados.