Copiando todos os arquivos de uma extensão para uma pasta

1

Eu tenho tentado escrever um programa .bat , que encontrará todos os arquivos com uma determinada extensão, por exemplo * .doc, e os colocará em um arquivo rar .

Eu quero que todos os arquivos sejam copiados mesmo que tenham o mesmo nome (eu tenho arquivos com o mesmo nome em diretórios diferentes). Eu não me importo se os arquivos serão renomeados, desde que eu mantenha todos eles. Por exemplo, se eu tiver um new.doc em Desktop e outro new.doc em D: , não me importo se um dos dois ou ambos forem renomeados new1.doc ou new2.doc ou qualquer outra forma . Como alternativa, o programa pode salvá-las usando o caminho em que elas foram encontradas. O uso de rar over 7-zip ou qualquer outro programa de compactação é o preferido, mas se for realmente necessário, usar outro programa é OK. Por último, mas não menos importante, quero que o programa pesquise todo o computador (todos os discos rígidos). Por exemplo, eu tenho C: , D: e F: e eu quero pesquisar todos os 3 e criar o arquivo D:\test.rar . Eu tentei várias soluções e cheguei até

for %%i in (c: d: f:) do for /f "delims=" %%j in ('dir /s /a-d /b %%i\*.doc') do "C:\Program Files\WinRAR\Rar.exe" a d:\test.rar "%%~j"

Agora, meu problema é que em alguns PCs ele funciona bem, mas em alguns ele encontra menos arquivos do que realmente existe. Eu localizo o número total de arquivos procurando por *.doc e comparo o número encontrado com o número de arquivos .doc no arquivo. Eu não tenho idéia porque alguns arquivos não são encontrados. Qualquer informação ou comentário será muito apreciado.

    
por user2237380 14.04.2013 / 15:44

1 resposta

0

Nesse caso, você nem precisa usar for , já que o próprio RAR suporta recursão (sem mencionar que usar for é terrivelmente ineficiente, já que seu comando está abrindo e fechando o arquivo de cada vez para atualizá-lo e adicionar o próximo arquivo). Use o seguinte comando (você pode substituir o WinRAR.exe pelo RAR.exe se preferir):

WinRAR a -ep2 -r D:\Test.rar C:\*.doc D:\*.doc F:\*.doc

Substitua -ep2 por -ep3 se você quiser armazenar as letras de unidade no arquivo. Além disso, se você de alguma forma ainda encontrar menos arquivos correspondentes no arquivo morto do que existe em seu sistema, adicione a opção -e+rash e compare. Isso deve garantir que nenhum arquivo seja perdido, independentemente de seus atributos.

Quanto ao tamanho final do arquivo, basta salvar em uma unidade formatada em NTFS (ou exFAT) e você deve estar bem. Se um único arquivo grande for de seu interesse, dê uma olhada na opção -v para criar vários volumes, por exemplo, um arquivo dividido.

    
por 14.04.2013 / 20:08