A cópia em lote apresenta erros, o xcopy funciona bem

1

Estou escrevendo um programa geral de backup de arquivos. Ele procura na unidade arquivos que correspondem a um conjunto de tipos e os grava em uma pasta na área de trabalho. Eu o escrevi usando o xcopyWindows XP, mas ao saber que xcopyfoi preterido em favor do robocopyVista e mais recente, ainda querendo manter a compatibilidade, decidi mudar para os não preteridos 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 (quebrado) revisado 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.

Eu sei que parece que todo mundo usa um xcopyou mais, robocopymas alguém pode ajudar copy?

Nota: Estou usando o Lote para mantê-lo muito leve e acessível pela linha de comando.

ndm13
fonte
você poderá encontrar o problema se inserir a palavra 'eco' antes da palavra 'copiar'. E, sem dúvida, pode tornar as coisas mais claras se você colocar um @ aqui @fore aqui, do @( que deve listar todos os comandos e você pode ver qualquer falha. Percebo também que estão faltando aspas duplas no seu comando de cópia. Você teve-os em seu comando xcopy
barlop
apenas uma sugestão, acho que funcionaria um pouco mais fácil com "forfiles". por exemplo: forfiles / pc: \ / s / m * .bmp / ​​c "cmd / c cópia @file"% HOMEDRIVE %% HOMEPATH% \ Desktop \ LDR \ Images \ Bitmap \ %% ~ nxa "mais informações aqui -> ss64.com/nt/forfiles.html
renove
@ Barlop Desculpe, essa foi uma revisão que publiquei. O que eu achava que estava totalmente correto está no ar agora. Eu peguei meu erro depois que o publiquei.
Ndm13
11
D:\>(copy "D:\Program Files\Winamp\Plugins\avs\whacko6-07.bmp" "C:\Documents and Settings\,,,,\Desktop\LDR\Images\Bitmap\whacko6-07.bmp" /d /y /z ) The system cannot find the path specified. 0 file(s) copied.Uma amostra em um test drive D. Os resultados foram todos iguais.
Ndm13 9/06/2014
11
Solução encontrada. Vou postar a resposta quando o StackExchange me permitir. Para o registro, copynão cria caminhos de arquivos e, portanto, não conseguiu copiar para um caminho que xcopyteria criado para mim. Eu vou ter que pré-criar meus diretórios, eu acho.
Ndm13

Respostas:

0

Solução finalmente encontrada!

Aparentemente, xcopycria diretórios se eles não forem especificados. Eu ainda não tinha o \LDR\Images\Bitmapcaminho definido. copynão sabe como criar pastas, então terei que gerá-las antecipadamente, o que é um pouco chato, porque com xcopyisso não seria possível criar pastas quando não havia arquivos para colocar nelas. Com copyeu estou criando pastas, assumindo que elas serão preenchidas.

Obrigado pela ajuda. PARA O REGISTRO: copynão cria caminhos de arquivo inexistentes. xcopyfaz!

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
)
ndm13
fonte