Jak skopiować plik do katalogu w DOS i w razie potrzeby utworzyć katalogi?

37

Jak mogę skopiować plik za pomocą poleceń DOS do struktury katalogów, która może jeszcze nie istnieć? Muszę mieć możliwość wymuszenia utworzenia ścieżki katalogu do docelowej lokalizacji pliku, jeśli ta lokalizacja jeszcze nie istnieje.

Na przykład w tej lokalizacji znajduje się już plik.txt:

C:\file.txt

I chcę to skopiować

C:\example\new\path\to\copy\of\file\file.txt

ale w tej chwili

C:\example\

i wszystkie podkatalogi mogą jeszcze nie istnieć.

Zasadniczo szukam polecenia „skopiuj i w razie potrzeby utwórz ścieżkę docelową”. Jaki byłby najlepszy sposób, aby to osiągnąć?

nodmonkey
źródło
Czy to pytanie faktycznie dotyczy DOS (lub MS-DOS), czy też dotyczy wiersza poleceń w wersjach systemu Windows opartych na NT (2000, XP, Vista, 7, 8, Serwer)?
Bob
Miałem na myśli podobny do DOS Windows CLI. Jaki jest najlepszy sposób na opisanie „DOS-podobnego Windows CLI” dla tytułu postu?
nodmonkey
Zasadniczo używałbym Windows command linew tytule / treści wraz z tagami windows i wierszem poleceń (zauważ, że cmd.exe jest synonimem wiersza poleceń ). Tag ms-dos powinien zostać usunięty; i tagu dos nie należy w żadnym wypadku używać.
Bob
Jednak w tym przypadku, z istniejącymi / zaakceptowanymi odpowiedziami dla DOS / MS-DOS, możesz równie dobrze zostawić je bez zmian. Na przyszłość, DOS jest / powinien być interpretowany jako system operacyjny. Chociaż wiersz poleceń systemu Windows jest na nich oparty, istnieją pewne znaczące różnice.
Bob
możesz to nazwać poleceniem cmd
barlop

Odpowiedzi:

28

Tak, to jest xcopy . Oto jak to będzie wyglądać:

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

Informacje o XCOPY pod adresem

Możesz także zajrzeć do ROBOCOPY , w zestawie zasobów XP i standardzie w Vista, Windows 7 i Server 2008.

robocopy . c:\example\new\path\to\copy\of\file file.txt
bw
źródło
3
xcopy jest w porządku, jeśli nie musisz również zmieniać nazwy pliku. Jeśli to zrobisz, niestety xcopy zapyta, czy miejscem docelowym jest katalog, czy nazwa pliku i nie ma przełącznika wiersza polecenia, który określa „to plik”.
RomanSt
4
Zobacz drugą odpowiedź - użyj poprzedniej echo f | z xcopy, aby automatycznie odpowiedzieć na to pytanie.
mcw0933,
Zwróć uwagę, że na końcu ścieżki docelowej powinien znajdować się znak ukośnika ``. W przeciwnym razie polecenie zapyta użytkownika, czy miejscem docelowym jest katalog, czy plik, jeśli nie istnieje.
Lii
17

Próbowałem użyć czegoś takiego:

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

Ale zapytałoby mnie, czy to plik czy katalog. Ponieważ miałem to w pliku wsadowym z 40000 plików, byłoby to niepraktyczne. To rozwiązanie rozwiązuje tylko częściowo mój problem: tworzy strukturę katalogów, ale wymaga interakcji użytkownika. Tutaj znalazłem rozwiązanie mojego problemu:

https://stackoverflow.com/questions/4283312/batch-file-asks-for-file-or-folder

Co w zasadzie polega na dodaniu „*” na końcu pliku docelowego:

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

EDYCJA: jak wskazuje @romkyns, może mieć niepożądane wyniki, jeśli masz pliki o tej samej nazwie plus coś innego (np. „File.txt.bak”). W tym samym wątku opublikowanym powyżej innym działającym rozwiązaniem jest przesłanie polecenia „echo f” do polecenia:

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

Gdzie należy zastąpić literę „f” dowolną literą, której system używa do pliku, na wypadek, gdybyś używał jej w innym języku…

msb
źródło
1
Co file.txt.bakoczywiście działa tylko wtedy, gdy nie ma go w katalogu. Mimo to może to działać w niektórych scenariuszach.
RomanSt
@romkyns true. kilka miesięcy po tym, jak to opublikowałem, stanąłem wobec tego samego problemu i zrobiłem rozwiązanie „echo f”, które również działa świetnie. Edytowanie mojej odpowiedzi ...
msb
1
Dzięki echo f | nie musisz już kończyć *.
mcw0933,
1
Druga nazwa pliku jest zbędna, jeśli jest taka sama. „xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \” będzie działał tak długo, jak długo będzie widoczny ukośnik w katalogu (w przeciwnym razie zostanie wyświetlone pytanie, czy chodziło o plik, czy katalog) .
FourtyTwo
3

DOS, wow! W każdym razie używasz polecenia XCOPY .

Dustin Laine
źródło
1
4 lata później: tak. DOS wszyscy nadal go używamy, mimo że PowerShell istnieje ...
Pan AH
0

Niezależnie od tego, czy używasz copylub xCopy, aby uniknąć błędu copylub pytania z xCopy, sprawdź, czy istnieje potrzebny folder i utwórz go, jeśli to konieczne:

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

lub połącz polecenia z &&jednym wierszem poleceń:

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

To samo można zrobić movezamiast copy. Dowiedziałem się o tej technice od odpowiedzi StackOverflow o tym, jak to zrobić move.

NewSites
źródło