Como copiar um arquivo para um diretório no DOS e criar diretórios, se necessário?

37

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?

nodmonkey
fonte
Esta questão é realmente sobre o DOS (ou MS-DOS) ou sobre a linha de comando encontrada nas versões do Windows baseadas no NT (2000, XP, Vista, 7, 8, Server)?
21412 Bob
Eu quis dizer a CLI do Windows, semelhante ao DOS. O que você recomenda é a melhor maneira de descrever "CLI do Windows semelhante ao DOS" para o título da postagem?
nodmonkey
Geralmente, eu usaria Windows command lineno 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.
Bob
No entanto, nesse caso, com as respostas existentes / aceitas, sendo para o DOS / MS-DOS, você também pode deixá-lo como está. Para referência futura, o DOS é / deve ser interpretado como o sistema operacional. Embora a linha de comando do Windows se baseie nelas, existem algumas diferenças notáveis.
Bob
você pode chamá-lo de cmd prompt de
barlop

Respostas:

28

Sim, isso é xcopy . Aqui está como será:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

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.

robocopy . c:\example\new\path\to\copy\of\file file.txt
bw
fonte
3
O xcopy é bom se você também não precisar renomear seu arquivo. Se o fizer, infelizmente o xcopy perguntará se o destino é um diretório ou um nome de arquivo e não há opção na linha de comando para especificar "é um arquivo".
precisa saber é o seguinte
4
Veja a outra resposta - use uma precedente echo f | com xcopy para responder a esta solicitação automaticamente.
precisa saber é o seguinte
Observe que deve haver um caractere de barra, ``, no final do caminho de destino. Caso contrário, o comando solicitará ao usuário se o destino é um diretório ou arquivo, se ele não existir.
Lii
17

Eu tentei usar algo como:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

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:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt*

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:

echo f | xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Onde você deve substituir o "f" por qualquer letra que seu sistema use para arquivo, caso esteja usando-o em outro idioma.

msb
fonte
11
O que só funciona se não houver file.txt.bakno diretório, é claro. Ainda assim, isso pode funcionar em alguns cenários.
RomanSt
@romkyns true. alguns meses depois de postar isso, enfrentei o mesmo problema e fiz a solução "eco f", que também funciona muito bem. Editando minha resposta ...
msb 29/04
11
Com echo f | , você não precisa mais do final *.
precisa saber é o seguinte
11
O segundo nome do arquivo é redundante, caso seja o mesmo. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" funcionará enquanto a barra final no diretório estiver lá (caso contrário, ele perguntará se um arquivo ou diretório foi utilizado) .
FourtyTwo
3

DOS, uau! De qualquer forma, você usa o comando XCOPY .

Dustin Laine
fonte
11
4 anos depois: sim. DOS que todos nós ainda usá-lo mesmo que PowerShell existe ..
Sr. AH
0

Se estiver usando copyou xCopy, para evitar um erro copyou um prompt de xCopy, teste a existência da pasta necessária e crie-a, se necessário:

if not exist "NewPath" MkDir "NewPath"
copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

ou combine os comandos com &&uma linha de comando:

if not exist "NewPath" MkDir "NewPath" && copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

A mesma coisa pode ser feita com em movevez de copy. Aprendi sobre essa técnica com uma resposta do StackOverflow sobre como fazê-lo move.

NewSites
fonte