DOSのディレクトリにファイルをコピーし、必要に応じてディレクトリを作成する方法は?


37

DOSコマンドを使用して、まだ存在しないディレクトリ構造にファイルをコピーするにはどうすればよいですか?ターゲットファイルの場所がまだ存在しない場合は、その場所へのディレクトリパスを強制的に作成できるようにする必要があります。

たとえば、次の場所にfile.txtが既にあります。

C:\file.txt

そして、私はそれをにコピーしたい

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

しかし、現時点では

C:\example\

また、すべてのサブディレクトリがまだ存在する場合と存在しない場合があります。

基本的に、「必要に応じてターゲットパスをコピーして作成する」コマンドを探しています。これを達成する最良の方法は何ですか?


この質問は、実際にはDOS(またはMS-DOS)に関するものですか、それともNTベースのWindowsバージョン(2000、XP、Vista、7、8、Server)にあるコマンドラインに関するものですか?
ボブ

DOSのようなWindows CLIを意味しました。投稿タイトルに「DOSライクなWindows CLI」を記述する最良の方法は何ですか?
nodmonkey

一般的に、私が使用するWindows command lineタグと一緒に、タイトル/本文にコマンドライン(ことに注意してくださいcmd.exeのはのタグ同義語であるコマンドライン)。タグms-dosは削除する必要があります。また、どのような状況でもタグdosを使用しないでください。
ボブ

ただし、この場合、DOS / MS-DOS用の既存の/受け入れられた回答があるため、そのままにしておくこともできます。将来の参照のために、DOSはオペレーティングシステムとして解釈されるべきです。Windowsコマンドラインはそれらに基づいていますが、いくつかの顕著な違いがあります。
ボブ

cmdプロンプト
-barlop

回答:


28

ええ、それはxcopyです。表示は次のとおりです。

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

XCOPY情報

XPリソースキットのROBOCOPYおよびVista、Windows 7、およびServer 2008の標準もご覧ください。

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

3
ファイルの名前も変更する必要がない場合は、xcopyで問題ありません。その場合、残念ながらxcopyは宛先がディレクトリかファイル名かを尋ね、「ファイルだ」と指定するコマンドラインスイッチはありません。
RomanSt 14

4
他の回答を参照してください-前述のecho f | xcopyを使用して、このプロンプトに自動的に回答してください。
mcw0933 14

宛先パスの最後にスラッシュ文字「」が必要であることに注意してください。そうでない場合、コマンドは、宛先がdirであるかファイルが存在しない場合にファイルであるかについてユーザーにプロンプ​​トを出します。

17

私は次のようなものを使ってみました:

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

しかし、それがファイルなのかディレクトリなのか尋ねられます。40000個のファイルを含むバッチファイルにそれがあるので、実際的ではありません。このソリューションは、私の問題を部分的に解決するだけです。ディレクトリ構造を作成しますが、ユーザーの操作が必要です。私はここで私の問題の解決策を見つけました:

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

基本的には、宛先ファイルの最後に「*」を追加することです。

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

編集:@romkynsが指摘するように、同じ名前に他の何か(「file.txt.bak」など)があるファイルがある場合、望ましくない結果になる可能性があります。上記の同じスレッドで動作する別のソリューションは、コマンドに「echo f」をパイプすることです。

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

別の言語で使用している場合に備えて、システムがファイルに使用する文字を「f」に置き換える必要があります。


1
file.txt.bakもちろん、ディレクトリにない場合にのみ機能します。それでも、これはいくつかのシナリオで機能する可能性があります。
RomanSt 14

@romkyns true。これを投稿してから数か月後、私は同じ問題に直面し、「エコーf」ソリューションを実行しました。私の答えを編集しています...
msb 14

1
echo f | 、あなたはもはや末尾を必要としません*
mcw0933 14

1
2番目のファイル名は、同じ場合に冗長です。「xcopy file.txt c:\ example \ new \ path \ to \ copy \ of \ file \」は、ディレクトリ内の末尾のスラッシュがある限り機能します(そうでない場合は、ファイルまたはディレクトリのどちらが意図されているかを尋ねます) 。
FourtyTwo

3

DOS、すごい!とにかくXCOPYコマンドを使用します。


1
4年後:はい。DOS我々は、すべてのまだ.. PowerShellが存在するにもかかわらず、それを使用する
氏AH

0

copyまたはを使用するかどうかにかかわらずxCopy、からのエラーcopyやプロンプトを回避するためにxCopy、必要なフォルダーの存在をテストし、必要に応じて作成します。

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

または、&&1つのコマンドラインでコマンドを組み合わせます。

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

同じことをのmove代わりに行うことができますcopy。この手法については、StackOverflowでの方法に関する回答から学びましたmove

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.