Questão Windows: copie arquivos e mude de extensão sem duplicatas


Eu tenho um diretório que tem arquivos de imagem sem extensão. Vamos dizer que seja D:\initial\. Agora eu quero copiar esses arquivos para D:\final\ diretório e alterar a extensão para .jpg para cada arquivo.

Minha solução usando o ROBOCOPY:

@echo off

SET srcDir=D:\initial\
SET destDir=D:\final\

echo Copying files from %srcDir%
ROBOCOPY %srcDir% %destDir% /s /min:102400
echo Copying done

cd %destDir%

echo Renaming to JPG
ren *. *.jpg

No entanto, existem certas condições:

  1. Copie apenas os arquivos com tamanho superior a 100 KB.
  2. Não exclua arquivos no diretório de origem.
  3. O diretório de origem irá, em certos períodos, obter arquivos mais novos; copie-os para o diretório de destino (manualmente, sem necessidade de automação aqui)

Minha solução atende às duas primeiras condições, mas quando eu corro novamente depois que novos arquivos chegam, os mais antigos são copiados também, dando erro ao renomear.


0


origem


Use o /MAXAGE:n opção? - DavidPostill♦
Seu terceiro ponto diz que você vai fazer isso manualmente, então onde está o problema? - Seth
@Seth Eu quis dizer que o script não deveria ser programado para ser executado periodicamente; isso pode ser feito manualmente. No entanto, deve contabilizar duplicatas. - User528491
Renomeie os arquivos no diretório de origem e apenas execute o robocopy como de costume. O Robocopy deve otimizar e ignorar arquivos existentes. - Seth


Respostas:


Verifique o tamanho do arquivo e se existe um arquivo de destino com uma iteração nos arquivos de origem.

E use xcopiar em vez de invocar robocopy cada vez que seria um exagero aqui.

Copiar para o novo nome com extensão de uma só vez elimina a necessidade de renomear.

@echo off

SET "srcDir=D:\initial"
SET "destDir=D:\final"

echo Copying files from %srcDir%
For %%A in ("%srcDir%\*.") do (
    if %%~zA gtr 102400 if not exist "%destDir%\%%~nA.jpg" copy "%%~fA" "%destDir%\%%~nA.jpg" >NUL
)
echo Copying done

2



Tenta copiar D:\final\D:\initial\file.jpg com o erro Does ... specify a file name or directory name on the target? - User528491
Desculpe, esqueci de inserir o ~n modificador que usa apenas o nome do arquivo de origem sem drive, caminho. - LotPings
Funciona bem, mas agora pede confirmação sempre que o destino é um arquivo ou diretório. Além disso, quando eu corro novamente, ele pergunta se eu quero substituir por todos os arquivos (que é não) - User528491
Não é meu dia, o modificador também estava faltando no cheque. Por favor, tente novamente. - LotPings
Vamos tirar uma cópia sem x e devemos ser bons. Para suprimir a mensagem 1 file(s) copied apppend >NUL para a cópia - LotPings