Como copiar um arquivo usando comandos do DOS em uma estrutura de diretórios que ainda não existe? Preciso poder forçar a criação do caminho do diretório para o local do arquivo de destino, se esse local ainda não existir.
Por exemplo, já existe um arquivo.txt neste local:
C:\file.txt
E eu quero copiá-lo para
C:\example\new\path\to\copy\of\file\file.txt
mas neste momento
C:\example\
e todos os subdiretórios podem ou não existir ainda.
Basicamente, estou procurando um comando "copiar e criar o caminho de destino, se necessário". O que você recomendaria é a melhor maneira de conseguir isso?
Windows command line
no título / corpo, junto com as marcas windows e linha de comando (observe que cmd.exe é um sinônimo de marca de linha de comando ). A tag ms-dos deve ser removida; e a tag dos não deve ser usada em nenhuma circunstância.Respostas:
Sim, isso é xcopy . Aqui está como será:
Informações sobre o XCOPY em
Você também pode pesquisar no ROBOCOPY , no kit de recursos do XP e no padrão no Vista, Windows 7 e Server 2008.
fonte
echo f |
com xcopy para responder a esta solicitação automaticamente.Eu tentei usar algo como:
Mas ele me perguntaria se era um arquivo ou diretório. Como eu tinha isso em um arquivo em lotes com 40000 arquivos, seria impraticável. Esta solução resolve apenas parcialmente o meu problema: cria a estrutura de diretórios, mas requer interação do usuário. Encontrei a solução para o meu problema aqui:
https://stackoverflow.com/questions/4283312/batch-file-asks-for-file-or-folder
O que é basicamente adicionar um "*" no final do arquivo de destino:
EDIT: como apontado por @romkyns, pode ter resultados indesejados se você tiver arquivos com o mesmo nome e mais alguma coisa (como 'file.txt.bak'). No mesmo tópico postado acima, outra solução que funciona é canalizar "eco f" para o seu comando:
Onde você deve substituir o "f" por qualquer letra que seu sistema use para arquivo, caso esteja usando-o em outro idioma.
fonte
file.txt.bak
no diretório, é claro. Ainda assim, isso pode funcionar em alguns cenários.echo f |
, você não precisa mais do final*
.DOS, uau! De qualquer forma, você usa o comando XCOPY .
fonte
Se estiver usando
copy
ouxCopy
, para evitar um errocopy
ou um prompt dexCopy
, teste a existência da pasta necessária e crie-a, se necessário:ou combine os comandos com
&&
uma linha de comando:A mesma coisa pode ser feita com em
move
vez decopy
. Aprendi sobre essa técnica com uma resposta do StackOverflow sobre como fazê-lomove
.fonte