Arquivo em lote que exclui pastas dos Meus Documentos, exceto as de uma matriz

0

Eu estou absolutamente doente de pastas de lixo aleatório (CyberPower, VirtualBox, etc) sendo despejadas na pasta Meus Documentos no Windows. Estou usando o Windows 7 para esclarecimentos. Não, não é o "arquivo de usuários" é Meus Documentos, eu também não vou chamar o Xbox 3 do número errado. Agora que nós esclarecemos que eu gostaria de descobrir uma maneira de fazer um pequeno programa em lote que irá dizimar pastas de lixo desconhecidas e então eu vou colocá-lo em um lugar que eu ativamente permitir que os programas sejam executados na inicialização: o pasta de inicialização na pasta de todos os usuários.

Se as matrizes (ou isto em geral) não podem ser feitas através de um lote, qual seria uma boa linguagem neutra de plataforma para abordar este problema?

    
por John 14.09.2013 / 10:43

1 resposta

2

Primeiro, uma cautela. Uma lista de desbloqueio incompleta pode causar a exclusão de arquivos importantes. Além disso, essas "pastas de lixo" são geralmente necessárias para a operação correta do software que as criou. Se você ainda optar por esta solução, aqui está um one-liner, com quebras de linha para facilitar a leitura:

pushd C:\Users\John\Documents && 
  for /D %i in (*) do @(
    echo %i| findstr /V /I /R /C:"^Important$" /C:"^Keep me$" > NUL &&
    echo rmdir /S /Q %i
  ) & popd

Na sua forma atual, esta declaração não faz nada prejudicial. O segundo echo é exibido, em vez de executar o comando 'rmdir' e é incluído como precaução. Verifique se o script funcionaria como pretendido e, em seguida, remova a segunda ocorrência de 'eco'.

Uma breve explicação. pushd altera temporariamente o diretório para a pasta de documentos. for /D lista todos os diretórios lá. Para cada diretório, findstr corresponde seu nome à lista de permissões. Os comutadores /V /I /R imprimem apenas entradas não correspondentes, tornam a procura insensível a maiúsculas e ative expressões regulares. Todos os diretórios que devem ser mantidos são listados como /C:"^dirname$" . Os diretórios que não estiverem na lista de desbloqueio farão com findstr return errorlevel zero, executando assim o comando após o duplo comercial, ou seja, rmdir /S /Q %i , excluindo esse diretório, vazio ou não, sem solicitar confirmação.

Se for executado a partir de um arquivo de lote em vez de diretamente da linha de comando, substitua cada %i por %%i .

    
por 14.09.2013 / 13:02