xcopyファイル、名前変更、「xxxはファイル名を指定していますか?」メッセージを抑制


404

これは非常に単純に見え、おそらく適切なフラグを見落としているだけかもしれませんが、1つのコマンドで、あるディレクトリから別のディレクトリにファイルをコピーし、宛先ディレクトリでその名前を変更するにはどうすればよいでしょうか。これが私のコマンドです:

if exist "bin\development\whee.config.example"
  if not exist "TestConnectionExternal\bin\Debug\whee.config"
    xcopy "bin\development\whee.config.example"
          "TestConnectionExternal\bin\Debug\whee.config"

毎回次のメッセージが表示されます。

TestConnectionExternal \ bin \ Debug \ whee.configは、ターゲット上のファイル名またはディレクトリ名を指定していますか(F =ファイル、D =ディレクトリ)?

このプロンプトを抑制したい。答えは常にFです。


15
エコーf | xcopy ...
Cyclion 2015年

コピーがあなたの望みどおりの結果である場合、なぜxcopyを使用するのかという
反対投票

3
Miscrosoft:「ユーザーを混乱させることができるのに、なぜシンプルなものにするのか?」これは、彼らがLinuxの世界で行われていることを単にコピーするべき時cpです。ファイル/ディレクトリをコピーするためのb ** tを見てください!
fduff


私はBATCHファイルで私の回答を読むことをお勧めします。プロンプトが表示されるタイミングと、バッチファイルのOS言語に依存しない方法で自動的に回答する方法について、ファイルまたはフォルダーで詳細に説明するように求められます
Mofi、

回答:


217

使用しないでください xcopy、使用copy代わりに、それはこの問題は発生しません。

xcopy通常、複数のファイル/フォルダーの再帰的コピーを実行するとき、またはそれが提供する検証/プロンプト機能が必要なときに使用されます。単一ファイルのコピーの場合、copyコマンドは正常に機能します。


97
copy宛先のディレクトリ構造全体がまだ存在しない場合、ファイルはコピーされません。xcopy必要なすべてのディレクトリが自動的に作成されます。
BQ。

41
それはだ素晴らしい XCOPYは、この省略を持っていること。ディレクトリ(/ I)のようにファイルのオプションが単にあった場合、これは解決され、xcopyはcopyの優れた代替品になる可能性があります。代わりに、この欠陥のため、これらの状況ではコピーを選択する必要があります。
rocketmonkeys、2011

35
他の人がすでに指摘したように、@ Arnsheaの答えは正しいものです。これは、a)既にディレクトリ構造が配置されているOPの特定の状況が質問で言及されていないため、およびb)この質問の今後の読者にとって、ここxcopyだけでなく、だけでなく、copy
Mike Nakis、2012

17
質問はxcopyに固有なので、@ Amsheaの答えも正しいものです。この答えは基本的に「xcopyを使用しない」です。xcopyに関する質問に本当に答えていませんか?
BrainSlugs83 2013

9
ターゲットのパスの最後に星を追加するだけです。以下のこの答えを見てください。stackoverflow.com/a/26034267/1231
Donny V.

638

私が使う

echo f | xcopy /f /y srcfile destfile

それを回避する。


17
@Arnshea-ありがとう!サイレントディレクトリコピーにecho d | xcopy srcdirectory destdirectory /S
適合

8
+1 @Arnshea私があなたがそこで何をしているのかを理解するのに少し時間がかかりましecho d | xcopy ...た。あなたは素晴らしいです
トーマス

23
彼はxcopyが尋ねる質問に対するユーザーの応答をシミュレートしています。
ジョンマンシュ

5
@Thomasこれは、この手法を使用するバッチファイルが異なるロケール間で移植できないことを意味しますか?
Max Nanasy 2012年

17
@MaxNanasyこれはロケール間で移植できないことを確認しました。ドイツ語の設定では、ファイルにはDを、ディレクトリにはVを渡します。:(
マット

177

別のオプションは、宛先ワイルドカードを使用することです。これは、ソースと宛先のファイル名が同じになる場合にのみ機能することに注意してください。これはOPの特定の例を解決しませんが、共有する価値があると思いました。

例えば:

xcopy /y "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\*" 

ファイルまたはディレクトリを要求せずに、宛先ディレクトリに「whee.config.example」ファイルのコピーを作成します。

更新:@chapluckで述べたように:

あなたは変更することができます"* ""[newFileName].*"。ファイル拡張子は保持されますが、名前を変更できます。またはもっとハッキー:"[newFileName].[newExt]*"拡張子を変更する


1
「エコーf |」方法はクールですが、これにより、最初に問題を見つけるために頻繁に検索する余分な出力が回避されます。
Richard Anthony Hein

6
@ Durden81-zippycoderが指摘するように、彼らの答えはOPの要件であったファイルの名前を変更しません。
Polyfun、2014年

6
答えを拡張するには、「*」を「[newFileName]。*」に変更します。ファイル拡張子は保持されますが、名前を変更できます。またはもっとハッキー: "[newFileName]。* [newExt]"で拡張子を変更します。
chapluck 2014

ありがとう!更新セクションは、拡張子を保持し、それがファイルであると想定しながら、ファイル名を変更する必要があるという私の問題を解決したものです。XCopyはこれをスイッチとして持つべきでした。
Stanislav

1
末尾にアスタリスクを付けずに、バックスラッシュだけで機能しました。
tivnet 2017

91

XCOPYには、ドキュメントに記載されていない機能があります。あなたは使うことができます:

xcopy "bin \ development \ whee.config.example" "c:\ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config *"

私はちょうど今日それをテストしました。:-)


4
どうもありがとう。宛先ファイルの最後に「*」を追加し、それは機能しました..::)トリックのための+1
Rahul Patel 14年

2
優れたソリューション-クリーンでエレガント、別のコマンドを使用せず、既存のxcopyフラグと互換性があり、問題なく動作します。これがトップ投票の答えになるはずです。
Brian Swift

7
答えは正しくありません。whee.config.examplewhee.config*一致するため、コマンドは宛先フォルダになりますwhee.config.example
Meow

2
ファイルを作成したばかりでb.txtxt、コマンドを起動してxcopy a.txt b.txt* /F /Y、ファイルa.txtがにコピーb.txtされました。その上、/F /Yスイッチを使用している間、実際のコピーが期待どおりに画面に表示されます。
ドミニク

1
@Meow:いいえ、ワイルドカードは宛先ではなくソースにあるためです。
ienaxxx 2018

74

http://technet.microsoft.com/en-us/library/bb491035.aspxにアクセスするだけです

主な問題は次のとおりです。「宛先が既存のディレクトリを含まず、バックスラッシュ()で終わっていない場合、次のメッセージが表示されます。...

宛先はターゲット上のファイル名またはディレクトリ名を指定していますか(F =ファイル、D =ディレクトリ)?

/ iコマンドラインオプションを使用すると、このメッセージを抑制できます。これにより、ソースが複数のファイルまたはディレクトリである場合、xcopyは宛先がディレクトリであると想定します。

少し時間がかかりましたが、必要なのはRTFMだけです。


7
これが一番の答えになるはずです!他の人には本当にはっきりさせてください。1つのファイルをある場所から別の場所にコピーしていて、完全なディレクトリ構造を作成したい場合は、次のコマンドを使用します。xcopy / "C:\ Data \ Images \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb -67ecff20c96b.jpg "" C:\ Target Data \\ Images \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb-67ecff20c96b.jpg \ "。はい、ファイル名の最後にバックスラッシュを置きます!
adudley 2013

4
良い答えですが、問題は解決しません。xcopy hello.txt hello2 \を試しました。プロンプトはありません。次に、xcopy hello.txt hello3(バックスラッシュなし)を試します。destがfileとdirのどちらであるかを尋ねます。スクリプトでFまたはDと仮定するように指示する方法が必要です。
RuntimeException 2014

27
これは非常に奇妙な答えです。特に、賛成投票、役に立たない「RTFM」スナック、および「人気のある」答えを記したコメントが原因です...元の質問には対応していないためです。元の質問では、「1つのディレクトリから別のディレクトリにファイルをコピーして、宛先ディレクトリのITの名前を変更する」と明記されていました。上記の試行された回答は、宛先ファイル名がソースファイルと同じ名前であるファイルをコピーする別のケースに対処しているようです。@Arnsheaによって与えられた「乱雑な」回避策は、私がここで示した単一のステップでの唯一の回答であり、その「人気」です。
M.ベアデン2014

3
ベアデン氏は非常に丁寧でしたが、賛成票が多かったので、この回答の問題を明確にリストする必要があると感じています。1)OPの問題の解決策を与えると思われる1つの段落(段落5/5)、OPがディレクトリではなくファイルをコピーして名前を変更しているため、機能しませ。2)回答の上部にあるリンクは解決策を提供しませ。3)主な問題の記述は、OPの質問に適用されませ。4)答えは攻撃的で、2番目の段落で叫び、最後の侮辱である。おそらく、彼は質問を再読する必要があります。
GlennFromIowa

2
ここで与えられたすべての答えは、ファイルの宛先にコピーするのではなく、ディレクトリにコピーすることです。これは可能であり、文書化されていません。zippycoder、chapluck、LBushkinからの他の答えを参照してください
pdem

27

したがって、これには簡単な修正があります。確かに厄介ですが、機能します。xcopyは、新しいファイル(ファイル名)がすでに存在する場合、宛先がディレクトリまたはファイルであるかどうかを確認するプロンプトを表示しません。xcopyコマンドの前に新しいファイル名への単純なエコーを付けると、空のファイルが上書きされます。例

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y

6

これはビルズの回答からです。

他の人には本当にはっきりさせてください。

あなたがコピーしている場合はONEある場所から別の場所へファイルをあなたは完全なディレクトリ構造を作成することにしたい、次のコマンドを使用します。

xcopy "C:\Data\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg" "C:\Target Data\\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg\" 

はい、ファイル名の最後にバックスラッシュを付けてください。ファイルかディレクトリかを尋ねることはありません。ソースにはファイルが1つしかないため、ファイルであると見なされます。


12
これは間違っています。「xcopy versionBase.txt asd \ versionBase.txt \」を実行していて、asdディレクトリが存在しない場合、asd \ versionBase.txt \ versionBase.txtファイルを取得します。
クリスティアンニクレスク2014

1
このページの他の回答と同様に、この投稿は元の質問を扱っていません。問題は、ファイルのコピーと名前の変更(1ステップで)をどのように行うかでした。他の明らかに混乱している回答と同様に、これは名前を変更せずにファイルをコピーする方法について説明します。
M.ベアデン2014年

フォルダーではなく、その名前のディレクトリが実際に作成されることは言うまでもありません。それをテストし、その後DIRを実行すると、次のように表示されます: dir "C:\Target Data\\Images\2013\08\12" 09/25/2015 10:48 AM <DIR> 85e4a707-2672-481b-92fb-67ecff20c96b.jpg
GlennFromIowaを

3

xcopy src dest /I

REM This assumes dest is a folder and will create it, if it doesnt exists


2

私は同様の問題を抱えていましたが、コメントを抑制して別の宛先ファイル名を使用したかったので、robocopyとxcopyのどちらも役に立ちませんでした。見つけた

type filename.txt > destfolder\destfilename.txt

私の要件に従って働いています。


2

元の質問に戻ります:

 xcopy "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\whee.config"

たとえば、次の2つのコマンドで実行できます。

mkdir "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."
xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

宛先ファイルのパスに「\ ..」を追加するだけで、宛先ディレクトリがまだ存在しない場合は作成されます。この場合

"c:\mybackup\TestConnectionExternal\bin\Debug\"

これは存在しないディレクトリの親ディレクトリです

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."

少なくともWIN7の場合、mkdirはディレクトリが

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

本当に存在します。


ディレクトリが存在しない場合の興味深い修正。残念ながら、(私のテストでは)次の行でもユーザーにプロンプ​​トが表示されます。
GlennFromIowa 2015

xcopy "bin \ development \ whee.config.example" "c:\ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config \"である必要があります。私は自分のアプローチを使用して、存在しない可能性があるディレクトリにファイルをコピーしました。名前を変更するには、最後にバックスラッシュを追加する必要があるようです。
グレニックス2016

2

ターゲットの最後に*を付けてXCOPYし、宛先にファイルが存在するかどうかに関係なくコピーするターゲットの最後に\を付けてXCOPYを実行すると、宛先に存在するかどうかにかかわらず、フォルダとコンテンツをコピーする

あるいは

ファイル用のロボフォームソースデストファイルフォルダ用のロボフォームソースデスト


1

またはのrobocopy代わりに提案します。コマンドまたはクライアントまたはサーバーのGUIで使用されます。ネットワークの一時停止を許容し、ファイル属性によるコピーのコピー時にファイル属性を無視するように選択できます。ああ、それはマルチコアマシンをサポートしているので、ファイルは順次ではなく、互いに「並列」にコピーされます。 MS TechNetにあります。copyxcopyrobocopy


2
私はいつもロボコピーを使っています。ただし、この投稿者の質問では、ファイルの名前を変更できないため、機能しません。今日まで私が知らなかったのは、xcopyに / zスイッチがあり、ネットワークの一時停止に対応できることです。
GlennFromIowa

1

ファイルだけをコピーして宛先でその名前を変更する場合の正しいことは次のとおりです。

xcopy / f / y "bin \ development \ example.exe" "TestConnectionExternal \ bin \ Debug \ NewName.exe *"

そしてそれはうまくいくだろう


1

大きなファイルを複製する場合は、/ Jスイッチを使用したxopyが適しています。この場合、単純にファイルのFまたはディレクトリのDをパイプします。また、将来の参照のためにジョブを配列に保存することもできます。例えば:

$MyScriptBlock = {
    Param ($SOURCE, $DESTINATION) 
    'F' | XCOPY $SOURCE $DESTINATION /J/Y 
    #DESTINATION IS FILE, COPY WITHOUT PROMPT IN DIRECT BUFFER MODE
}
JOBS +=START-JOB -SCRIPTBLOCK $MyScriptBlock -ARGUMENTLIST $SOURCE,$DESTIBNATION
$JOBS | WAIT-JOB | REMOVE-JOB

少し変更を加えたチャンドに感謝:https : //stackoverflow.com/users/3705330/chand


0

ファイルをコピーするときは、xcopyではなくcopyを使用してください。

例:「bin \ development \ whee.config.example」「TestConnectionExternal \ bin \ Debug \ whee.config」をコピーします


1
別の名前で同じフォルダにファイルをコピーしようとしていますが、xcopyが機能しません。私が使用してcopy /Y source destination上書き確認を渡します。
SandRock、2014年

0

実際にファイル名を変更するわけではないので、宛先からファイル名を取り出すことができ、質問はありません。

xcopy bin\development\whee.config.example TestConnectionExternal\bin\Debug\  /Y

このアプローチは、宛先ディレクトリが存在することが保証されている場合、およびソースがファイルまたはディレクトリである可能性がある場合にうまく機能します。


1
@downvoters:なぜこの回答が反対投票されたのでしょうか?このコンテキストでは、Debugディレクトリはおそらく存在することが保証されています。
Jirka Hanika、2013

4
この応答は「実際にはファイル名を変更していないため」であるのに対し、元の質問では「ファイルをあるディレクトリから別のディレクトリにコピーして、宛先ディレクトリのITの名前を変更する」と明記されていました。したがって、これはトピックとは無関係のようです。
M.ベアデン2014

0

回避策として、ReNameを使用して、暗号の名前を付けてから、適切な名前に変更します。

C:

CD「C:\ Users \ Public \ Documents \ My Web Sites \ AngelFire〜Zoe \」

XCopy / D / I / V / Y "C:\ Users \ Public \ Documents \ My Web Sites \ HostGator〜ZoeBeans \ cop.htm"

Ren "cop.htm" "christ-our-passover.htm"


0

xcopyを使用すると、1つのファイルを指定したフォルダーにコピーできます。コピー先の名前を定義することはできません。コピー先の名前が必要な場合は、コピーする前に名前を変更してください。

ren "bin \ development \ whee.config.example" whee.config

xcopy / R / Y "bin \ development \ whee.config" "TestConnectionExternal \ bin \ Debug \"


これが特定の環境(つまり、ソースフォルダーにwhee.configが存在しないことが確実にある)で機能すると仮定して、OPのコードを複製するには、元の名前に戻す名前変更を含めるべきではありませんか?ren "bin\development\whee.config" whee.config.example
GlennFromIowa

0

DとFの論争をスキップするには、宛先パスの最後にアスタリスク(*)を配置します。

例:

xcopy "compressedOutput.xml" "../../Execute Scripts / APIAutomation / Libraries / rerunlastfailedbuild.xml *"


0

xxxxxxxxxxxxはターゲット上のファイル名またはディレクトリ名を指定していますか

(F = file, D = directory)? D

if a File : (echo F)
if a Directory (echo D)

0

ファイルが宛先に存在しないか、または存在していて(新しい名前で)古い場合にのみ、新しい名前でファイルをコピーしようとしたときに同じ問題が発生しました。解決策は*、宛先ファイル名の最後に文字を追加することです。例:

xcopy "C:\src\whee.config.txt" "C:\dest\bee.config.txt*" /D /Y

それは魅力のように機能します、thx
E.Big

-2

常にファイルであることを指定することはできません。xcopyの他の機能が必要ない場合は、通常の機能を使用しないでcopyください。


5
1つの理由はcopy、は内部コマンドであるため、ErrorLevelを設定しないためです。コピーエラーが発生したときにバッチファイルのパスに影響を与えたい場合は、を使用する必要がありますXCOPY
rossmcm

2
あなたはXCOPYの他の機能を使用する場合はもう一つの理由は、/ Dのように、ある
ビクトリア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.