Cópia em lote dá erros, xcopy funciona bem

1

Estou escrevendo um programa geral de backup de arquivos. Ele procura na unidade arquivos correspondentes a um conjunto de tipos e, em seguida, os grava em uma pasta na área de trabalho. Eu escrevi usando xcopy no Windows XP, mas ao saber que xcopy foi preterido em favor de robocopy no Vista e mais recente, ainda querendo manter a compatibilidade, decidi mudar para o não-preterido copy .

É aqui que os problemas começam. Estou tentando consertar a rotina de cópia. Eu pensei que tinha tudo resolvido, mas não copia nada. Minha saída é zero arquivos copiados para cada iteração.

Código original usando xcopy :

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   echo f | xcopy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /q /y /g /c
)

Código revisado (quebrado) usando copy :

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   copy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /d /y /z
)

Saída:

The system cannot find the path specified.
    0 files copied.

Sei que parece que todos usam xcopy ou robocopy , mas alguém pode ajudar com copy ?

Nota: estou usando o Batch para mantê-lo muito leve e acessível em linha de comando.

    
por ndm13 09.06.2014 / 04:49

1 resposta

0

Solução finalmente encontrada!

Aparentemente, xcopy cria diretórios se eles não forem especificados. Eu não tenho o \LDR\Images\Bitmap filepath já definido. copy não sabe como fazer pastas, então eu terei que gerá-las antecipadamente, o que é um pouco irritante, porque com xcopy ela não criaria pastas quando não havia arquivos para colocar nelas. Com copy , estou criando pastas assumindo que elas serão preenchidas.

Obrigado pela ajuda. PARA O REGISTRO: copy não cria caminhos de arquivos inexistentes. xcopy faz!

ATUALIZAÇÃO: Minha solução final. Funciona como um campeão.

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   if not exist "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\" (md "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\")
   copy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /d /y /z
)
    
por 09.06.2014 / 18:14