.bat arquivos para encontrar todos os arquivos na unidade maior que X

1

Até agora eu executei um arquivo .bat para encontrar todos os arquivos de mídia armazenados em nossa unidade compartilhada de alunos, que então gravam em um arquivo .txt em meus documentos, por exemplo:

dir S:*.mp3 /s > "M:\logs\student\mp3.txt"

Esta provavelmente não é a melhor maneira de fazê-lo e estou ciente de que provavelmente existem ferramentas melhores em 2008 R2 para fazer isso por mim. Agora estou tentando encontrar uma maneira de registrar apenas arquivos que são, por exemplo, maiores que 100 MB. Isso pode ser feito em arquivos .bat / cmd.exe, é melhor usar o PowerShell ou usar as funções no Server 2008R2?

    
por tombull89 18.10.2010 / 17:25

3 respostas

1
@echo off
rem only files bigger than %threshold% MB are listed
set threshold=100

for /r %%F in (*) do call :foo %%~zF "%%F"
goto :eof

:foo
set size=%1
set size_mb=%size:~0,-6%
if not defined size_mb set size_mb=0
if %size_mb% GTR %threshold% echo.%~2
goto :eof

A sub-rotina é infelizmente necessária, pois a expansão atrasada não queria a maneira como eu extraí os megabytes (sim, de fato, megabytes, não mebibytes - eu também não gosto disso, mas é o mais fácil aqui).

Observe que essa abordagem falhará em arquivos maiores que aproximadamente dois exabytes, pois cmd não pode fazer uma comparação numérica com valores que não se ajustam a um inteiro de 32 bits assinado.

O código também pode ser encontrado no meu repositório SVN .

    
por 09.11.2010 / 13:07
1

É melhor você usar o find .

    
por 18.10.2010 / 17:38
1

PowerShell ou VBScript são o caminho a percorrer. Eu tentei o que você está fazendo com o shell script, e você acaba fazendo muitas chamadas para () e findstr, tirando vírgulas de tamanhos, etc.

VBScript tem o FileSystemObject - faça um google.

O PowerShell tem o get-childitem:

Get-childitem -LiteralPath <basepath> -Filter *.mp3 -recurse -erroraction silentlycontinue | where-object{ $_.length -gt 100MB }

O texto acima pesquisa o caminho <basepath> e todos os subdiretórios para MP3s > 100MB.

Você pode adicionar ao "pipeline":

| foreach-object{ //dosomething }

A ajuda on-line do powershell é muito boa; tente: get-help get-childitem -detailed por exemplo.

Script feliz!

Ah, e não se esqueça que o Win2k8 tem "Gerenciador de Recursos de Servidor de Arquivos" - uma ótima ferramenta.

    
por 18.10.2010 / 23:02