这看起来很简单,也许我只是忽略了正确的标志,但是我如何在一个命令中将文件从一个目录复制到另一个目录并在目标目录中重命名? 这是我的命令:
1 2 3 4
| 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" |
每次都会提示我以下内容:
Does TestConnectionExternal\bin\Debug\whee.config specify a file name
or directory name on the target (F = file, D = directory)?
我想压制这个提示; 答案总是F。
-
echo f | xcopy ...
-
downvote为什么你甚至使用xcopy如果副本做你想要的
-
Miscrosoft:"为什么在让用户真正感到困惑的时候会让事情变得简单?" 这是他们应该复制在Linux世界中所做的事情的时候,看看cp没有b ** t复制文件/目录!
-
相关:XCOPY仍然要求(F =文件,D =目录)确认
-
我建议在BATCH文件上阅读我的答案,询问文件或文件夹,当显示提示时详细解释,以及如何通过独立于批处理文件OS语言自动回答。
我用
1
| echo f | xcopy /f /y srcfile destfile |
绕过它。
-
@Arnshea-谢谢!适用于静默目录副本echo d | xcopy srcdirectory destdirectory /S
-
+1 @Arnshea我花了一些时间来了解你在那里做了什么,因为我在德国的Windows上安装了它的echo d | xcopy ...。你太聪明了
-
你能否扩展一下这是做什么以及为什么它比接受的答案更好?
-
他正在模拟用户对xcopy将要问的问题的回应。
-
@Thomas这是否暗示使用此技术的批处理文件不能在不同的语言环境中移植?
-
@MaxNanasy我确认这不能跨语言环境移植。在德语设置中,您传入D表示文件,或传入V表示目录。 :(
-
这很整洁 - 我知道你可以使用"
-
很棒的答案!我一直在尝试用xcopy写一个批处理脚本,但OP提到的问题正在出现。谢谢你的简单解决方案!
-
谢谢@Arnshea,正是我需要的。我正在复制整个目录,所以使用它而不是echo D | xcopy /f /y /d /e SourceDir DestDir
-
我想使用cygwin windows从shell脚本执行整个命令。我无法将"d"传递给xcopy命令。请帮忙
不要使用xcopy,而是使用copy,它没有这个问题。
xcopy通常在执行多个文件/文件夹的递归副本时使用,或者在您需要它提供的验证/提示功能时使用。对于单个文件副本,copy命令工作正常。
-
如果目标的整个目录结构尚不存在,copy将不会复制该文件。 XCOPY将自动创建所有需要的目录。
-
令人惊讶的是xcopy有这个遗漏。如果它只是为目录(/ I)提供了文件选项,那么这将被解决,xcopy可以成为复制的绝佳替代品。相反,由于此缺陷,您必须为这些情况选择副本。
-
正如其他人已经指出的那样,@ Arnshea的回答是正确的。这是因为a)问题中没有提到OP已经具有目录结构的特定情况,并且b)对于这个问题的未来读者来说,更有价值的是谁会来这里寻找关于XCOPY的答案而不只是copy。
-
那么@Amshea的答案也是正确的,因为这个问题是针对xcopy的,这个答案基本上是"不要使用xcopy"。是不是真的回答了关于xcopy的问题,现在呢?
-
在我的情况下,我需要xcopy提供的/ F / R / D开关和复制缺乏。所以我接受了Amshea的回答。
-
如果源比目标更新,则xcopy可以选择仅执行复制,因此在这种情况下(和其他)复制不能简单地用于代替xcopy,因为它不会执行相同的操作。
-
只需在目标路径末尾添加一个星号即可。请看下面的答案.stackoverflow.com/a/26034267/1231
-
这个答案很垃圾。使用Xcopy的全部原因是副本无法做到的
-
我也不喜欢这个答案。 @ Arnshea或zippycoder的答案要好得多,因为他们使用xcopy,它可以做复制不能的事情,例如,在我的情况下,我想覆盖目标文件,即使设置了只读属性。
-
copy已从Windows 10中删除。
另一种选择是使用目标通配符。请注意,这仅在源文件名和目标文件名相同时才有效,因此虽然这不能解决OP的具体示例,但我认为值得分享。
例如:
1
| xcopy /y"bin\development\whee.config.example""TestConnectionExternal\bin\Debug\*" |
将在目标目录中创建文件"whee.config.example"的副本,而不提示输入文件或目录。
更新:如@chapluck所述:
您可以将"*"更改为"[newFileName].*"。它会保留文件扩展名,但允许重命名。或更多hacky:"[newFileName].[newExt]*"更改扩展名
-
"回声f |"方式很酷,但这避免了我经常搜索的额外输出,以便首先找到问题。
-
@ Durden81 - 正如zippycoder所指出的那样,他们的答案不会重命名文件,这是OP的要求。
-
为了扩展答案,我将"*"更改为"[newFileName]。*"。它会保留文件扩展名,但允许重命名。或者更hacky:"[newFileName]。* [newExt]"改变扩展名。
-
谢谢!更新部分解决了我的问题,需要更改文件名,同时保留扩展并假设它是文件。 XCopy应该将此作为一个开关。
-
为什么这不是答案。这是基于ss64.com/nt/xcopy.html的正确答案。
-
在最后没有星号的情况下为我工作,只是反斜杠。
-
这甚至适用于复制单个文件并将其重命名为:xopy file * .bat to newfile.bat *。我必须这样做,因为供应商每次发布新版本时都会重命名安装文件。因此,虽然我不必为多个部署重新编辑批处理文件,但将文件xopying为"固定"文件名有助于我实施部署策略。
XCOPY中存在某种未记录的功能。您可以使用:
xcopy"bin development whee.config.example""c: mybackup TestConnectionExternal bin Debug whee.config *"
我刚刚测试了它。 :-)
-
非常感谢。我在目标文件的末尾添加了一个"*",它工作.. :) +1的技巧
-
优秀的解决方案 - 干净,优雅,不使用不同的命令,兼容现有的xcopy标志,完美无瑕。这应该是最高投票的答案。
-
答案不正确,该命令将在目标文件夹中生成whee.config.example,因为whee.config*匹配whee.config.example。
-
我刚刚创建了一个文件b.txtxt,然后我按照预期启动了命令xcopy a.txt b.txt* /F /Y并将文件a.txt复制到b.txt。最重要的是,在使用/F /Y开关时,屏幕上会显示实际副本,与预期完全一致。
-
@Meow:不,因为通配符在目的地,而不是源。
-
这对我来说不起作用,并且复制(更多)比应该复制的更多。在我的情况下,我是从包含许多文件和子目录的目录中复制特定文件,并且它复制得太多,即使星号是正确的,仅在目标参数上,并用双引号括起来。但是,使用echo f|完全按照我的意愿工作
请访问http://technet.microsoft.com/en-us/library/bb491035.aspx
以下是MAIN ISSUE的内容"......如果Destination不包含现有目录且不以反斜杠()结尾,则会显示以下消息:...
目标是否指定文件名
或目标上的目录名称
(F =文件,D =目录)?
您可以使用/ i命令行选项来禁止显示此消息,这会导致xcopy假定如果源是多个文件或目录,则目标是目录。
花了我一会儿,但只需要RTFM。
-
这应该是最好的答案!为了让别人真正清楚。如果要将一个文件从一个位置复制到另一个位置并且您希望创建完整的目录结构,请使用以下命令: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"。是的,在文件名的末尾加一个反斜杠!
-
很好的答案,但没有解决问题。我试过xcopy hello.txt hello2 。没有提示。现在我尝试xcopy hello.txt hello3(没有反斜杠)。它会提示我dest是file还是dir。我需要一种方法来告诉它在脚本中假设F或D.
-
这是一个非常奇怪的答案,特别是因为赞成票,无益的"RTFM"嗤之以鼻,以及放下"流行"答案的评论......因为它没有解决原始问题!原始问题清楚地说"将文件从一个目录复制到另一个目录并在目标目录中重命名"。上面给出的尝试答案似乎解决了复制文件的不同情况,目标文件名是SAME名称作为源文件。 @Arnshea给出的"凌乱"解决方案是我在这里给出的唯一的单步答案 - 因此它的"受欢迎程度"。
-
贝尔登先生非常有礼貌,但考虑到投票数量,我认为有必要明确列出这个问题的答案:1)似乎为OP的问题提供解决方案的第1段(第4段,第5段),不起作用,因为OP正在复制和重命名文件,而不是目录; 2)答案顶部给出的链接不提供解决方案; 3)主要问题的陈述不适用于OP的问题; 4)答案是冒犯性的,在第2段喊叫,在最后一段侮辱。也许他应该重新阅读这个问题。
-
这里给出的所有答案都是复制到目录,而不是复制到文件目的地,这是可能的和未记录的,请参阅zippycoder的另一个答案,chapluck,LBushkin
-
如上所述,您的答案不起作用,至少对于复制文件。太糟糕了我投了赞成票然后10分钟过去才发现它不起作用;)
-
这不回答OP,具体是不想假设输出目录,/ I切换的东西。另外,答案是以讽刺的方式制定的。
所以,有一个简单的解决方案。这无疑是尴尬的,但它确实有效。
如果新文件(文件名)已经存在,xcopy将不会提示找出目标是目录还是文件。如果在xcopy命令之前使用简单的回显到新文件名,它将覆盖空文件。例
1 2
| echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y |
这是来自比尔斯答案。
为了让别人真正清楚。
如果要将一个文件从一个位置复制到另一个位置并且您希望创建完整的目录结构,请使用以下命令:
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" |
是的,在文件名的末尾加一个反斜杠,它不会问你是文件还是目录。因为源中只有一个文件,所以它将假定它是一个文件。
-
这是错的。运行"xcopy versionBase.txt asd versionBase.txt"并且asd目录不存在时,我得到asd versionBase.txt versionBase.txt文件。
-
与本页的其他答案一样,这篇文章并没有解决原始问题。问题是如何复制和重命名(一步)文件。与其他明显混淆的答案一样,本文讨论了如何在不重命名的情况下复制文件。
-
更不用说它确实创建了一个具有该名称的目录,而不是文件夹。测试一下,然后运行一个dir,你会看到类似这样的东西:dir"C:\Target Data\\Images\2013\08\12" 09/25/2015 10:48 AM 85e4a707-2672-481b-92fb-67ecff20c96b.jpg
xcopy src dest /I
REM This assumes dest is a folder and will create it, if it doesnt exists
回到原来的问题:
1
| xcopy"bin\development\whee.config.example""TestConnectionExternal\bin\Debug\whee.config" |
可以用两个命令来完成,例如:
1 2
| mkdir"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."
xcopy"bin\development\whee.config.example""c:\mybackup\TestConnectionExternal\bin\Debug\whee.config" |
通过简单地将" .."附加到目标文件的路径,如果目标目录尚不存在,则创建目标目录。在这种情况下
1
| "c:\mybackup\TestConnectionExternal\bin\Debug" |
这是父目录
不存在的目录
1
| "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.." |
至少对于WIN7 mkdir并不关心目录
1
| "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config" |
确实存在。
-
如果目录不存在,这是一个有趣的修复。不幸的是,下一行(在我的测试中)仍然提示用户。
-
你是对的,应该是xcopy"bin development whee.config.example""c: mybackup TestConnectionExternal bin Debug whee.config"。我使用我的aproach将文件复制到可能不存在的dirotory。对于重命名,它看起来像必须在最后添加反斜杠。
我有一个类似的问题,robocopy和xcopy都没有帮助,因为我想抑制注释并使用不同的目标文件名。我发现
1
| type filename.txt > destfolder\destfilename.txt |
按照我的要求工作。
XCOPY在目标末尾带*,用于复制文件,无论它们是否存在于目标中
XCOPY在目标末尾用来复制目标中是否存在的文件夹和内容
另外
RoboForm SOURCE DEST文件的文件
RoboForm SOURCE DEST文件夹
我建议robocopy而不是copy或xcopy。在客户端或服务器上用作命令或GUI。容忍网络暂停,您可以选择在按文件属性复制副本时忽略文件属性。哦,它支持多核机器,因此文件可以相互"并行"而不是按顺序复制得更快。 robocopy可以在MS TechNet上找到。
-
我一直使用robocopy。但是,对于这个海报的问题,它不起作用,因为它无法重命名文件。在今天之前我不知道的是xcopy确实有一个/ z开关,它可以容忍网络暂停!
如果你想复制文件并在目的地更改它的名称,那么正确的做法是:
xcopy /f /y"bin\development\example.exe"
"TestConnectionExternal\bin\Debug
ewName.exe*"
它会好起来的
对于复制大文件,使用/ J开关的xopy是一个不错的选择。在这种情况下,只需管道F表示文件或D管道目录。此外,您可以将作业保存在数组中以供将来参考。例如:
1 2 3 4 5 6 7
| $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
在目标路径的末尾放置一个星号(*)以跳过D和F的争议。
例:
xcopy"compressedOutput.xml""../../Execute
Scripts/APIAutomation/Libraries/rerunlastfailedbuild.xml*"
xcopy将允许您将单个文件复制到指定的文件夹中,它不允许您定义目标名称。如果您需要目标名称,请在复制之前重命名。
ren"bin development whee.config.example"whee.config
xcopy / R / Y"bin development whee.config"
"TestConnectionExternal BIN 调试"
-
假设这可以在特定的环境中工作(即,肯定永远不会是源文件夹中的whee.config),要复制OP的代码,它不应该包含重命名回原始名称吗? ren"bin\development\whee.config" whee.config.example
由于您实际上没有更改文件名,因此可以从目标中取出文件名,不会有任何问题。
1
| xcopy bin\development\whee.config.example TestConnectionExternal\bin\Debug\ /Y |
当目标目录保证存在时,以及源可能同样是文件或目录时,此方法很有效。
-
@downvoters:为什么这个答案本可以被低估?在此上下文中,可能保证Debug目录存在。
-
这个回答说"因为你实际上没有更改文件名",而原始问题清楚地说"将文件从一个目录复制到另一个目录并在目标目录中重命名"。所以这似乎与这个话题无关。
复制文件时使用copy而不是xcopy。
例如
复制"bin development whee.config.example"
"TestConnectionExternal BIN 调试 whee.config"
-
我试图将文件复制到具有不同名称的同一文件夹,xcopy无法正常工作。我使用copy /Y source destination来传递覆盖确认。
解决方法,使用ReName ...并将其命名为一些隐藏名称,然后将其命名为其正确名称
C:
CD"C: Users Public Documents My Website 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"
您不能指定它始终是文件。如果您不需要xcopy的其他功能,为什么不使用常规copy?
-
一个原因是作为内部命令的copy不设置ErrorLevel。如果您希望能够在发生复制错误时影响批处理文件的路径,则需要使用XCOPY。
-
另一个原因是如果你想使用xcopy的其他功能,比如/ d