O WildCards corrompe o arquivo de saída do Copy quando um nome de saída é especificado

2

copy create é um arquivo quase vazio (1K) quando um curinga (*?) é usado na origem & um nome de saída é especificado.

copy /D /V *?ample.png %homepath%/example.png

funciona para alguns tipos de arquivos (.txt .rtf)
copy /D /V *?ample.txt %TEMP%\example.txt

curiosamente curingas na origem & o destino corrige isso,
copy "*xample.pdf" "%TEMP%/*xample.pdf"
mas bagunça o nome do arquivo, ele vem: le.pdfxample.pdf

isso é um erro ou uma sintaxe ruim? estou perplexo.

estou no Windows 7 x86_64
perguntas relacionadas
Usando o wildard com o comando COPY do DOS corrompe o arquivo de destino
Como faço para copiar um arquivo usando um curinga no Windows sem acrescentar?

    
por Vencen 12.06.2017 / 06:20

3 respostas

1

Eu acho que é um recurso (mal) usado.
Meu Windown 10 help copy diz:

To append files, specify a single file for destination, but multiple files for source (using wildcards or file1+file2+file3 format).

Se o formato do arquivo não for compatível com arquivos de origem simplesmente concatenados, cabe ao usuário ter isso em mente.

Além disso, a resposta de Bali ao seu primeiro link responde plenamente à sua pergunta.

Uma solução alternativa diferente se houver apenas um arquivo de origem com nome pouco claro é:

for %A in (*?ample.png) Do copy "%A"  "%homepath%/example.png"
    
por 12.06.2017 / 06:48
1

Um problema com o uso de curingas ... Você está copiando (potencialmente) muitos arquivos em um único destino, sobrescrevendo esse arquivo ruim muitas vezes de forma totalmente inútil :). Mas, isso trouxe esse 'recurso' interessante. Estou tentado a trazer meus disquetes DOS para verificar se o bug é tão antigo.

Felicito você por encontrar este bug interessante no DIR! O arquivo copiado acaba corrompido. É muito consistente, não depende das opções / D / V, e só acontece quando sobrescrevendo o mesmo arquivo repetidas vezes. O bug não aparece ao usar xcopy, o que é uma boa notícia para todos os usuários do Windows.

    
por 12.06.2017 / 07:57
1

copy deve saber o tipo de arquivo i: "Texto ASCII" /A ou "Arquivo binário" /B

Um arquivo binário /B é assumido, a menos que você esteja combinando arquivos.
mas o Windows "assume" quando você coloca curingas na fonte & especificar um nome de saída que você está combinando arquivos, & use o interpretador "ASCII text", fazendo um arquivo vazio de 1K.

Então, o parâmetro /B (indica um arquivo binário)
 deve ser usado ao usar curingas na origem com um nome de saída especificado,
 em todos os arquivos não "texto ASCII".

copy /B /D /V *?ample.png %homepath%/example.png

Chame isso de Bug, um recurso estúpido da Microsoft, mas é assim.

Fonte

    
por 12.06.2017 / 07:37