Bir dosyayı DOS'taki bir dizine kopyalamak ve gerekirse dizinler oluşturmak nasıl?


37

DOS komutlarını kullanarak bir dosyayı henüz bulunmayan bir dizin yapısına nasıl kopyalayabilirim? Bu konum zaten mevcut değilse, dizin yolunun oluşturulmasını hedef dosya konumuna zorlayabilmem gerekiyor.

Örneğin, bu konumda zaten bir file.txt var:

C:\file.txt

Ve kopyalamak istiyorum

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

ama şu anda

C:\example\

ve tüm alt dizinler henüz mevcut olmayabilir veya olmayabilir.

Temel olarak "gerekirse hedef yolu kopyala ve oluştur" komutunu arıyorum. Bunu yapmanın en iyi yolu ne önerirsiniz?


Bu soru aslında DOS (veya MS-DOS) hakkında mı, yoksa NT tabanlı Windows sürümlerinde (2000, XP, Vista, 7, 8, Sunucu) bulunan komut satırıyla mı ilgili?
Bob

DOS benzeri Windows CLI'yi kastettim. Gönderi başlığı için "DOS benzeri Windows CLI" tanımlamanın en iyi yolu nedir?
nodmonkey

Genel olarak, Windows command linebaşlıkta / gövdede, windows ve komut satırı etiketleriyle birlikte kullanırdım ( cmd.exe'nin komut satırının bir eş anlamlısı olduğunu unutmayın ). Ms-dos etiketi çıkarılmalıdır; ve dos etiketi hiçbir koşulda kullanılmamalıdır.
Bob

Ancak, bu durumda, varolan / kabul edilen cevaplar DOS / MS-DOS için olduğu gibi, olduğu gibi bırakabilirsiniz. Gelecekte referans olması için, DOS'un işletim sistemi / sistemleri olarak yorumlanması gerekir. Windows komut satırı bunlara dayanırken, dikkate değer farklılıklar vardır.
Bob

cmd istemi olarak adlandırabilirsiniz
barlop

Yanıtlar:


28

Evet, bu xcopy . İşte nasıl görüneceği:

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

XCOPY bilgisi

Ayrıca ROBOCOPY'ye de bakabilirsiniz , XP kaynak kitinde ve standart olarak Vista, Windows 7 ve Server 2008'de.

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

3
Dosyanızı yeniden adlandırmanız gerekmiyorsa, xcopy iyidir. Bunu yaparsanız, maalesef xcopy, hedefin bir dizin mi yoksa dosya adı mı olduğunu soracak ve "bu bir dosya" olarak belirtilebilecek bir komut satırı anahtarı bulunmadığını soracaktır.
RomanSt

4
Diğer cevaba bakınız - echo f | bu soruyu otomatik olarak cevaplamak için bir xcopy ile kullanın.
mcw0933 21:14

Hedef yolun sonunda bir eğik çizgi karakteri olması gerektiğini unutmayın. Aksi halde komut, kullanıcıdan hedefin bir dir ya da yoksa bir dosya olup olmadığını sorar.
Lii

17

Gibi bir şey kullanmayı denedim:

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

Ama bana bir dosya mı yoksa dizin mi olduğunu sorardı. 40000 dosya içeren bir toplu iş dosyasında bulunduğumdan bu pratik olmazdı. Bu çözüm sadece benim sorunumu kısmen çözüyor: dizin yapısını yaratıyor, ancak kullanıcı etkileşimi gerektiriyor. Sorunumun çözümünü burada buldum:

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

Temelde hedef dosyanın sonuna "*" eklemek olan:

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

EDIT: @romkyns tarafından işaret edildiği gibi, aynı adı taşıyan başka bir şey varsa ('file.txt.bak' gibi) istenmeyen sonuçlara yol açabilir. Yukarıda yayınlanan aynı iş parçacığında, çalışan başka bir çözüm komutunuza "echo f" boru:

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

Başka bir dilde kullanıyorsanız, sisteminizin dosya için kullandığı her harf için "f" yi kullanmanız gereken yer.


1
file.txt.bakTabii ki sadece dizinde yoksa çalışır . Yine de, bu bazı senaryolarda işe yarayabilir.
RomanSt

@romkyns doğru. Bunu gönderdikten birkaç ay sonra kendimle aynı problemle karşılaştım ve "echo f" çözümünü yaptım, çok iyi çalışıyor. Cevabımı değiştiriyorum ...
msb

1
İle echo f | artık izine gerek yok *.
mcw0933

1
İkinci dosya adı aynı olması durumunda gereksizdir. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ / \ file \" dizinde sondaki eğik çizgi olduğu sürece çalışacaktır (aksi halde bir dosya veya dizinin ne anlama geldiğini sorar) .
FourtyTwo


0

Kullanarak olsun copyya xCopybir hata önlemek için, copyya da bir istemi xCopygerekli klasörün varlığını, test ve gerekirse oluşturun:

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

veya komutları &&tek bir komut satırında birleştirin :

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

Aynı şey moveyerine yapılabilir copy. Bu tekniği, nasıl yapılacağı hakkında bir StackOverflow yanıtından öğrendim move.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.