Acrescentando uma extensão a um novo arquivo criado com xcopy

0

Eu tenho tido problemas com xcopy nos últimos dias, e gostaria de parar de arrancar meu cabelo. Na minha classe DOS, uma parte de uma tarefa exige que um arquivo seja copiado (com xcopy), e o novo nome de arquivo deve ter .bak anexado, mantendo a extensão original, mas não consigo fazer isso corretamente. Usando xcopy * * .bak, eu esperaria que isso acontecesse, mas substitui a extensão do arquivo, em vez de anexar. Um amigo meu na mesma classe diz que isso funciona como deveria para ele, o que eu acho estranho. Também experimentei outras combinações de curingas sugeridas pelos resultados do Google, mas elas me deram os mesmos resultados, e isso é possível se encontrar algo relacionado a isso.

Gostaria de expandir também, estou não pedindo ajuda para trabalhos de casa. Minha lição de casa é fácil, mas não entendo porque xcopy me daria esses resultados quando o mesmo comando funciona para outra pessoa. Obrigado.

    
por Herpeslurpee 24.04.2015 / 19:19

1 resposta

0

na máscara do DOS (e na linha de comando do Windows) para todos os arquivos é *.* . Como em "arquivos sempre tem uma extensão, às vezes é uma string vazia". E nomes de arquivos não podem terminar com .

Portanto, mascarar * canonicamente significa "arquivos com extensão vazia". Mas alguns utilitários, incluindo xcopy como você encontrou, automagicamente expandem * para *.* porque ... bem, eu não procuro lógica quando não há uma. Então, * é o atalho para *.* em alguns casos.

Além disso, xcopy é aparentemente muito inteligente e substitui a extensão mesmo com

xcopy *.* *.*.bak

para adicionar .bak extension, use% comumcopy com

copy * *.*.bak

(observe que copy * *.bak ainda substituirá extensão)

ou, se você usar o xcopy, escreva for-loop.

FOR %%I IN (*.*) DO xcopy %%I "%%~I.bak"

(em uma linha de comando interativa, use um único sinal de porcentagem % em vez de %% )

    
por 24.04.2015 / 19:36