Como uso o robocopy para listar todos os arquivos em um determinado tamanho recursivamente?

4

Eu me sinto um pouco bobo, já que o robocopy é a administração do servidor 101; mas parece que estou tendo problemas para listar arquivos.

Desejo listar todos os arquivos com mais de 10 MB no diretório e no subdiretório.

De acordo com os documentos , é isso que deve funcionar:

robocopy c:\ /min:10485760 /s /l /fp /tee /log:c:\robocopy.log /njh /njs /ndl

Mas quando o executo, um erro é retornado "Nenhum diretório de destino especificado", o que não é necessário se você estiver usando a opção de lista (/ L).

Além disso, se eu incluir o mesmo diretório que o destino da seguinte forma:

robocopy c:\ c:\ /min:10485760 /s /l /fp /tee /log:c:\robocopy.log /njh /njs /ndl

Nada é retornado; mas se eu derrubar a lista sem diretório (/ ndl), vejo uma lista de todos os diretórios.

Então, minha pergunta é: como usar o robocopy para listar arquivos com mais de 10 MB em uma estrutura de árvore de diretórios e apenas isso?

Obrigado!

    
por mbrownnyc 02.09.2011 / 14:47

5 respostas

2

Se você não estiver preso a robocopy , poderá conseguir isso usando a substituição de variável de for : -

@for /f "tokens=*" %F in ('dir /s /b /a:-d c:\') do @(
    if %~zF geq 10485760 echo %F
)

dir /s /b /a:-d c:\ fornece uma listagem recursiva ( /s ) de todos os não diretórios ( /a:-d ) em c:\ no formato simples ( /b ) para facilitar a análise.

for faz um loop sobre essa listagem ( "tokens=*" é necessário caso você tenha caminhos com espaços), e você obterá a referência do tamanho do arquivo usando seu modificador ~z variable em qualquer subcomando (como if para comparar com o tamanho que você deseja).

Os @ 's para suprimir o eco dos comandos e podem ser omitidos se você tiver chamado @echo off anteriormente (por exemplo, em um arquivo em lotes).

    
por 02.09.2011 / 22:51
1

Tente incluir o diretório% tmp% como o destino. Eu não tenho mais a variante mais antiga do robocopy para testar, mas lembro que / l realmente lista o que vai fazer não apenas os arquivos. Então você precisa "enviar" os dados para algum lugar que não exista, de modo que o robocopy imprima todos os arquivos e diretórios que ainda não existam no destino.

    
por 02.09.2011 / 16:21
1

Você pode dar uma olhada em tdel . Sua tem alguns recursos muito poderosos quando se trata de trabalhar com tamanhos de arquivo e datas. Ele pode ser executado no modo "teste" para produzir listagens correspondentes versus as exclusões de arquivos em execução.

    
por 03.09.2011 / 12:39
1

Encontre está disponível para Windows, e pode responder virtualmente qualquer pergunta em uma classe semelhante a isto. Eu coração encontro:)

    
por 06.09.2011 / 21:31
1

Com o Robocopy, a menos que você esteja criando um arquivo de trabalho de modelo com um / QUIT empregado (o que impede que o robocopy faça outra coisa além de verificar a sintaxe) e esteja usando o / NODD no lugar de um diretório de destino, você sempre precisará especificar um diretório de destino, mesmo quando você está apenas listando. A maneira de obter a lista de arquivos seria criar uma pasta vazia, por exemplo, em TEMP e especificar isso como o destino. Estaria vazio, então todos os arquivos da fonte apareceriam na lista. Em seguida, exclua a pasta em temp quando terminar - ela deve estar vazia.

    
por 27.02.2012 / 18:24