xcopy文件,重命名,取消显示“ xxx是否指定文件名...”消息


404

这似乎很简单,也许我只是忽略了正确的标志,但是我将如何在一个命令中将文件从一个目录复制到另一个目录并在目标目录中重命名?这是我的命令:

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

downvote如果复制
可以满足

3
Miscrosoft:“为什么要简化一些事情,让您的用户感到困惑呢?”。这是他们应该只复制Linux世界中正在做的事情的时候了,cp不要无所事事地复制文件/目录!
fduff


我建议阅读有关BATCH文件的答案,询问文件或文件夹,详细说明显示提示的时间,以及独立于批处理文件OS语言如何自动回答该问题。
Mofi

Answers:


217

不要使用xcopycopy而应使用,因为它没有这个问题。

xcopy通常在执行多个文件/文件夹的递归副本时,或者在需要使用它提供的验证/提示功能时使用。对于单个文件副本,该copy命令可以正常工作。


97
copy如果目标的整个目录结构还不存在,则不会复制文件。xcopy将自动创建所有需要的目录。
BQ。

41
这是令人惊讶的是XCOPY有这种遗漏。如果它只是像目录(/ I)一样具有文件选项,则可以解决此问题,并且xcopy可以很好地替代copy。相反,由于此缺陷,您必须为这些情况选择副本。
火箭猴2011年

35
正如其他人已经指出的那样,@ Arnshea的答案是正确的。这是因为a)在问题中没有提到OP已有目录结构的特殊情况,并且b)对于该问题的未来读者来说,其价值更大,他们将来这里寻求有关的答案,xcopy而不仅仅是copy
Mike Nakis 2012年

17
@Amshea的答案也是正确的答案,因为该问题特定于xcopy,并且该答案基本上是“不要使用xcopy”。根本不真正回答有关xcopy的问题,现在可以了吗?
BrainSlugs83

9
只需在目标路径的末尾添加一个星星。请在下面查看此答案。stackoverflow.com/a/26034267/1231
Donny V.

638

我用

echo f | xcopy /f /y srcfile destfile

绕过它。


17
@Arnshea-谢谢!适用于静默目录复制echo d | xcopy srcdirectory destdirectory /S
ABT博士2012年

8
+1 @Arnshea,我花了一些时间来了解您在那做的事情,并且因为我正在echo d | xcopy ...为我安装德语Windows安装程序。您太棒了
Thomas

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].*"。它保留文件扩展名,但允许重命名。或更hacky:"[newFileName].[newExt]*"更改扩展名


1
“回声f |” 方式很酷,但这避免了我通常首先搜索以发现问题的额外输出。
理查德·安东尼·海因

6
@ Durden81-正如zippycoder指出的那样,他们的答案并未重命名文件,这是OP的要求。
Polyfun 2014年

6
为了扩展答案,我将把“ *”更改为“ [newFileName]。*”。它保留文件扩展名,但允许重命名。或更hacky:“ [newFileName]。* [newExt]”以更改扩展名。
chapluck 2014年

谢谢!更新部分是解决我的问题的地方,需要更改文件名,同时保留扩展名并假定它是文件。XCopy应该具有此功能。
斯坦尼斯拉夫

1
为我工作,最后没有星号,只是反斜杠。
tivnet

91

XCOPY中有某种未记录的功能。您可以使用:

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

我今天才测试过。:-)


4
非常感谢。我在目标文件的末尾添加了一个“ *”,它起作用了.. :) +1的窍门
Rahul Patel 2014年

2
出色的解决方案-干净,优雅,不使用其他命令,与现有的xcopy标志兼容,可以完美地工作。这应该是票数最高的答案。
布赖恩·斯威夫特

7
答案不正确whee.config.example,因为whee.config*匹配,命令将进入目标文件夹whee.config.example
喵2016年

2
我刚刚创建了一个文件b.txtxt,然后启动了命令xcopy a.txt b.txt* /F /Y,该文件a.txtb.txt按预期复制到。最重要的是,在使用/F /Y开关时,实际的副本会完全按预期显示在屏幕上。
多米尼克

1
@喵:不,因为通配符位于目标位置,而不是源位置。
ienaxxx '18

74

只需转到http://technet.microsoft.com/zh-cn/library/bb491035.aspx

这是主要问题是“ ...如果目标不包含现有目录并且不以反斜杠结尾()则会显示以下消息:...

目标是否在目标上指定文件名或目录名(F =文件,D =目录)?

您可以通过使用/ i命令行选项来禁止显示此消息,如果源是多个文件或目录,则xcopy会使xcopy假定目标是目录。

花了我一段时间,但只需要RTFM。


7
这应该是最佳答案!只是要对其他人真正清楚。如果要将一个文件从一个位置复制到另一个位置,并且想要创建完整的目录结构,请使用以下命令: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

4
好的答案,但不能解决问题。我尝试了xcopy hello.txt hello2 \。没有提示。现在,我尝试使用xcopy hello.txt hello3(不带反斜杠)。它提示我dest是文件还是目录。我需要一种告诉脚本在脚本中假设F或D的方法。
2014年

27
这是一个非常奇怪的答案,特别是由于投票,无助的“ RTFM”提示以及放下“受欢迎”答案的评论……因为它没有解决原始问题!原始问题明确指出:“将文件从一个目录复制到另一个目录,然后在目标目录中重命名它”。上面给出的尝试答案似乎是解决复制文件的另一种情况,其中目标文件名是SAME名称作为源文件。@Arnshea给出的“混乱”解决方法是我在这里看到的唯一的单步答案,因此它的“受欢迎程度”。
M.Bearden

3
Bearden先生非常有礼貌,但是鉴于得票数较高,我认为有必要明确列出这个答案的问题:1)似乎可以解决OP问题的第1段(第5款第4段),也没有工作,因为OP是复制和重命名一个文件不是一个目录; 2)答案顶部给出的链接没有提供解决方案;3)该声明主要问题不能适用于OP的问题; 4)答案令人反感,第二段大喊大叫,最后一段侮辱。也许他应该重新阅读《问题》。
爱荷华州格伦

2
此处给出的所有答案都是复制到目录中,而不是复制到文件目的地中,这是可能的并且没有记录,请参阅zippycoder,chapluck,LBushkin的其他答案
pdem

27

因此,有一个简单的解决方案。固然它很笨拙,但是可以用。如果新文件(文件名)已经存在,则xcopy不会提示您确定目标是目录还是文件。如果在xcopy命令之前通过简单回显到新文件名,它将覆盖空文件。例

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

6

这是比尔的答案。

只是要对其他人真正清楚。

如果要将一个文件从一个位置复制到另一个位置,并且想要创建完整的目录结构,请使用以下命令:

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\" 

是的,在文件名的末尾加上一个反斜杠,它不会询问您是文件还是目录。由于源中只有一个文件,因此将假定它是一个文件。


12
错了 当运行“ xcopy versionBase.txt asd \ versionBase.txt \”并且不存在asd目录时,我得到了asd \ versionBase.txt \ versionBase.txt文件。
Cristian Niculescu 2014年

1
与该页面上的其他答案一样,该帖子未解决原始问题。问题是如何复制和重命名(一步)文件。与其他明显困惑的答案一样,本文讨论了如何在不重命名的情况下复制文件。
M.Bearden 2014年

更不用说它确实创建了具有该名称的目录,而不是文件夹。测试一下,然后再运行目录,您将看到类似以下的内容:dir "C:\Target Data\\Images\2013\08\12" 09/25/2015 10:48 AM <DIR> 85e4a707-2672-481b-92fb-67ecff20c96b.jpg
GlennFromIowa 2015年

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"

可以用两个命令来完成,例如:

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 \”。我用我的方法将文件复制到一个可能不存在的磁盘上。为了重命名,似乎必须在末尾添加反斜杠。
grenix '16

2

XCOPY在目标末尾带有*复制文件是否在目标中XCOPY在目标末尾带有\复制文件夹和内容在目标中是否存在

或者

用于文件的RoboForm源DEST文件用于文件夹的RoboForm源DEST


1

我建议robocopycopy或代替xcopy。用作命令或在客户端或服务器上的GUI中。容忍网络暂停,您可以选择按文件属性复制副本时忽略文件属性。哦,它支持多核计算机,因此文件彼此“并行”复制而不是顺序复制要快得多。 robocopy可以在MS TechNet上找到。


2
我一直在使用robocopy。但是,对于此发布者的问题,它将无法工作,因为它无法重命名文件。我之前不知道的是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

感谢Chand进行了一些修改:https : //stackoverflow.com/users/3705330/chand


0

复制文件时,请使用copy而不是xcopy。

例如,复制“ 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

4
此响应显示为“因为您实际上并未更改文件名”,而原始问题明确指出“将文件从一个目录复制到另一个目录并在目标目录中重命名它”。因此,这似乎与主题无关。
M.Bearden

0

变通方法,使用重命名...并为其命名一个隐秘名称,然后将其重命名为适当的名称

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”

任“ cop.htm”“ christ-our-passover.htm”


0

xcopy将允许您将单个文件复制到指定的文件夹中,而只是不允许您定义目标名称。如果您需要目的地名称,只需在复制之前重命名即可。

任“ 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

仅当文件在目标位置不存在或不存在(使用新名称)但较旧时,才尝试使用新名称复制文件时遇到相同的问题。解决方案是*在目标文件名的末尾添加char。例:

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

就像魅力一样,谢谢
E.Big

-2

您不能指定它始终是文件。如果您不需要xcopy的其他功能,为什么不只使用Regular copy


5
原因之一是copy,作为内部命令,没有设置ErrorLevel。如果希望在发生复制错误时能够影响批处理文件的路径,则需要使用XCOPY
rossmcm 2011年

2
另一个原因是,如果您想使用xcopy的其他功能,例如/ d
Victoria Victoria
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.