xcopy文件,重命名,禁止"xxx是否指定文件名..."消息

Sar*_*els 393 command-line xcopy command-prompt

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

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"
Run Code Online (Sandbox Code Playgroud)

每次都会提示我以下内容:

TestConnectionExternal\bin\Debug\whee.config是否在目标上指定文件名或目录名(F =文件,D =目录)?

我想压制这个提示; 答案永远是F.

Arn*_*hea 626

我用

echo f | xcopy /f /y srcfile destfile
Run Code Online (Sandbox Code Playgroud)

绕过它.

  • 他正在模拟用户对xcopy将要问的问题的回应. (22认同)
  • @Arnshea-谢谢!适用于静默目录复制`echo d | xcopy srcdirectory destdirectory/S` (17认同)
  • @MaxNanasy我确认这不能跨语言环境移植.在德语设置中,您传入D表示文件,或传入V表示目录.:( (16认同)
  • +1 @Arnshea我花了一些时间来了解你在那里做了什么,因为我在德国的Windows安装工作,它的`echo d | xcopy ...`对我来说.你太聪明了 (8认同)
  • @Thomas这是否暗示使用此技术的批处理文件不能在不同的语言环境中移植? (5认同)
  • 您能否扩展一下正在做的事情以及为什么它比公认的答案更好? (2认同)

LBu*_*kin 213

不要使用xcopy,copy而是使用,它没有这个问题.

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

  • 如果目标的整个目录结构尚不存在,`copy`将不会复制文件.`xcopy`将自动创建所有需要的目录. (92认同)
  • 令人惊讶的是,xcopy有这个遗漏.如果它只是为目录(/ I)提供了文件选项,那么这将被解决,xcopy可以成为复制的绝佳替代品.相反,由于此缺陷,您必须为这些情况选择副本. (40认同)
  • 正如其他人已经指出的那样,@ Arnshea的回答是正确的.这是因为a)问题中没有提到OP已经具有目录结构的特定情况,并且b)对于这个问题的未来读者而言,他们来这里寻找关于`xcopy的答案更有价值.而不仅仅是'复制'. (33认同)
  • 那么@Amshea的答案也是正确的,因为这个问题是针对xcopy的,这个答案基本上是"不要使用xcopy".是不是真的回答了关于xcopy的问题,现在呢? (16认同)
  • 只需在目标路径末尾添加一个星号即可.请看下面的答案.http://stackoverflow.com/a/26034267/1231 (9认同)
  • 这个答案是垃圾。使用Xcopy的全部原因是复制不能做的事情 (2认同)

zip*_*der 172

另一种选择是使用目标通配符.请注意,这仅在源文件名和目标文件名相同时才有效,因此虽然这不能解决OP的具体示例,但我认为值得分享.

例如:

xcopy /y "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\*" 
Run Code Online (Sandbox Code Playgroud)

将在目标目录中创建文件"whee.config.example"的副本,而不提示输入文件或目录.

更新:如@chapluck所述:

你可以"* "改为"[newFileName].*".它会保留文件扩展名,但允许重命名.或者更hacky:"[newFileName].[newExt]*"改变扩展

  • @ Durden81 - 正如zippycoder所指出的那样,他们的答案不会重命名文件,这是OP的要求. (6认同)
  • 为了扩展答案,我将"*"更改为"[newFileName].*".它会保留文件扩展名,但允许重命名.或者更hacky:"[newFileName].*[newExt]"改变扩展名. (5认同)

ien*_*xxx 89

XCOPY中存在某种未记录的功能.您可以使用:

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

我刚刚测试了它.:-)

  • 答案是不正确的,该命令将导致目标文件夹中的`whee.config.example`,因为`whee.config*`匹配`whee.config.example`. (6认同)
  • 非常感谢.我在目标文件的末尾添加了一个"*",它工作.. :) +1的技巧 (4认同)
  • 优秀的解决方案 - 干净,优雅,不使用不同的命令,兼容现有的xcopy标志,完美无瑕.这应该是最高投票的答案. (2认同)
  • 我刚创建了一个文件`b.txtxt`,然后我启动了命令`xcopy a.txt b.txt*/F/Y`,文件`a.txt`已被复制到`b.txt`,如预期.最重要的是,在使用`/ F/Y`开关时,实际副本显示在屏幕上,与预期完全一致. (2认同)
  • @Meow:不,因为通配符在目的地,而不是来源。 (2认同)

小智 71

请访问http://technet.microsoft.com/en-us/library/bb491035.aspx

以下是MAIN ISSUE的内容"......如果Destination不包含现有目录且不以反斜杠()结尾,则会显示以下消息:...

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

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

花了我一会儿,但只需要RTFM.

  • 这是一个非常奇怪的答案,特别是因为赞成票,无益的"RTFM"嗤之以鼻,以及放下"流行"答案的评论......因为它没有解决原始问题!原始问题清楚地说"将文件从一个目录复制到另一个目录并在目标目录中重命名".上面给出的尝试答案似乎解决了复制文件的不同情况,目标文件名是SAME名称作为源文件.@Arnshea给出的"凌乱"解决方案是我在这里给出的唯一的单步答案 - 因此它的"受欢迎程度". (27认同)
  • 这应该是最好的答案!为了让别人真正清楚.如果要将一个文件从一个位置复制到另一个位置并且您希望创建完整的目录结构,请使用以下命令: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 \".是的,在文件名的末尾加一个反斜杠! (7认同)
  • 很好的答案,但没有解决问题.我试过xcopy hello.txt hello2 \.没有提示.现在我尝试xcopy hello.txt hello3(没有反斜杠).它会提示我dest是file还是dir.我需要一种方法来告诉它在脚本中假设F或D. (4认同)
  • 贝尔登先生非常有礼貌,但考虑到投票数量,我认为有必要明确列出这个问题的答案:1)似乎为OP的问题提供解决方案的第1段(第4段,第5段),确实_not_工作,因为OP正在复制_和renaming_ a**文件**,_ not_目录; 2)答案顶部给出的链接确实没有提供解决方案; 3)**主要问题**的陈述确实不适用于OP的问题; 4)答案是冒犯性的,在第2段喊叫,在最后一段侮辱.也许他应该重新阅读这个问题. (3认同)
  • 这里给出的所有答案都是复制到目录,而不是复制到文件目的地,这是可能的和未记录的,请参阅zippycoder的另一个答案,chapluck,LBushkin (2认同)

小智 27

所以,有一个简单的解决方案.这无疑是尴尬的,但它确实有效.如果新文件(文件名)已经存在,xcopy将不会提示找出目标是目录还是文件.如果在xcopy命令之前使用简单的回显到新文件名,它将覆盖空文件.例

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y
Run Code Online (Sandbox Code Playgroud)


小智 7

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

xcopy "C:\src\whee.config.txt" "C:\dest\bee.config.txt*" /D /Y
Run Code Online (Sandbox Code Playgroud)


adu*_*ley 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\" 
Run Code Online (Sandbox Code Playgroud)

是的,在文件名的末尾加一个反斜杠,它不会问你是文件还是目录.因为源中只有一个文件,所以它将假定它是一个文件.

  • 这是错的.运行"xcopy versionBase.txt asd\versionBase.txt \"并且asd目录不存在时,我得到asd\versionBase.txt\versionBase.txt文件. (12认同)