xcopy 文件,重命名,抑制“是不是 xxx 指定文件名...”消息

Posted

技术标签:

【中文标题】xcopy 文件,重命名,抑制“是不是 xxx 指定文件名...”消息【英文标题】:xcopy file, rename, suppress "Does xxx specify a file name..." messagexcopy 文件,重命名,抑制“是否 xxx 指定文件名...”消息 【发布时间】:2011-03-02 09:21:22 【问题描述】:

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

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

【问题讨论】:

回声 f | xcopy ... 相关:XCOPY still asking (F = file, D = directory) confirmation 我建议阅读我在BATCH file asks for file or folder 上的答案,详细解释何时显示提示以及如何通过独立于操作系统语言的批处理文件自动回答。 【参考方案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。 :(【参考方案2】:

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

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

【讨论】:

如果目标的整个目录结构尚不存在,copy 将不会复制文件。 xcopy 会自动创建所有需要的目录。 xcopy 有这个遗漏是 惊人的。如果它只是像目录 (/I) 那样对文件有一个选项,这将得到解决,并且 xcopy 可能是复制的一个很好的替代品。相反,由于这个缺陷,您必须为这些情况选择副本。 正如其他人已经指出的那样,@Arnshea 的答案是正确的。这是因为 a) 问题中没有提到 OP 的目录结构已经到位的特殊情况,并且 b) 对于这个问题的未来读者来说,它更有价值,他们将来到这里寻找关于 xcopy 的答案而不仅仅是copy 嗯@Amshea 的回答也是正确的,因为这个问题是针对xcopy 的,而这个回答基本上是“不要使用xcopy”。根本没有真正回答有关 xcopy 的问题,是吗? 只需在目标路径的末尾添加一个星号。看看下面这个答案。***.com/a/26034267/1231【参考方案3】:

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

例如:

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]”来更改扩展名。 为什么这不是答案。这是基于ss64.com/nt/xcopy.html的正确答案。 为我工作,最后没有星号,只是反斜杠。【参考方案4】:

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:不,因为通配符在目的地,而不是源。【参考方案5】:

只要去http://technet.microsoft.com/en-us/library/bb491035.aspx

MAIN ISSUE 是这样的“...如果 Destination 不包含现有目录并且不以反斜杠结尾 (),则会出现以下消息:...

destination 是否指定了文件名 或目标上的目录名称 (F = 文件,D = 目录)?

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

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

【讨论】:

这应该是最佳答案!只是为了对其他人非常清楚。如果要将一个文件从一个地方复制到另一个地方,并且希望创建完整的目录结构,请使用以下命令:xcopy /"C:\Data\Images\2013\08\12\85e4a707-2672-481b-92fb -67ecff20c96b.jpg" "C:\目标数据\\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg\" .是的,在文件名的末尾加一个反斜杠! 很好的答案,但没有解决问题。我试过 xcopy hello.txt hello2\ 。没有提示。现在我尝试 xcopy hello.txt hello3 (没有反斜杠)。它提示我 dest 是文件还是目录。我需要一种方法来告诉它在脚本中假设 F 或 D。 这是一个非常奇怪的答案,尤其是因为赞成票,无益的“RTFM”恶作剧,以及 cmets 放下“流行”的答案......因为它没有解决原始问题!原始问题清楚地说“将文件从一个目录复制到另一个目录并在目标目录中重命名”。上面给出的尝试答案似乎解决了复制文件的不同情况,目标文件名与源文件名相同。 @Arnshea 给出的“杂乱”解决方法是我在这里看到的唯一一个单一步骤的答案——因此它的“受欢迎程度”。 先生。比尔登很有礼貌,但考虑到赞成票的数量,我觉得有必要明确列出这个答案的问题:1)似乎为 OP 的问题提供解决方案的第 1 段(第 4 段,共 5 段),确实 不工作,因为OP正在复制并重命名一个文件不是一个目录; 2)答案顶部给出的链接提供了解决方案; 3) 主要问题的陈述适用于OP的问题; 4) 答案令人反感,第二段是大喊大叫,最后一段是侮辱。也许他应该重新阅读这个问题。 这里给出的所有答案都是复制到目录,而不是复制到文件目的地,这是可能的且未记录的,请参阅 zippycoder、chapluck、LBushkin 的其他答案【参考方案6】:

所以,有一个简单的解决方法。诚然,这很尴尬,但它确实有效。 如果新文件(文件名)已经存在,xcopy 将不会提示查找目标是目录还是文件。如果您在 xcopy 命令之前对新文件名进行简单的回显,它将覆盖空文件。示例

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

【讨论】:

这不会复制文件属性 :-( 如果您不需要 attrs 那么copy 不是更好吗?【参考方案7】:

这是来自比尔的回答。

只是为了让其他人真正清楚。

如果您要将 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\" 

是的,在文件名的末尾加上一个反斜杠,它不会询问你是文件还是目录。因为源中只有一个文件,它会假设它是一个文件。

【讨论】:

这是错误的。当运行“xcopy versionBase.txt asd\versionBase.txt\”并且asd目录不存在时,我得到了asd\versionBase.txt\versionBase.txt文件。 与此页面上的其他答案一样,这篇文章并未解决原始问题。问题是如何复制和重命名(一步)文件。与其他明显混淆的答案一样,这讨论了如何在不重命名的情况下复制文件。 更不用说它确实创建了一个具有该名称的目录,而不是文件夹。测试一下,然后运行一个目录,你会看到这样的东西:dir "C:\Target Data\\Images\2013\08\12"09/25/2015 10:48 AM <DIR> 85e4a707-2672-481b-92fb-67ecff20c96b.jpg【参考方案8】:

xcopy src dest /I

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

【讨论】:

复制单个文件时还是提示这个【参考方案9】:

我遇到了类似的问题,robocopy 和 xcopy 都没有帮助,因为我想禁止 cmets 并使用不同的目标文件名。我找到了

type filename.txt > destfolder\destfilename.txt

按照我的要求工作。

【讨论】:

【参考方案10】:

回到原来的问题:

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

确实存在。

【讨论】:

如果目录不存在,这是一个有趣的修复。不幸的是,下一行(在我的测试中)仍然提示用户。 你说得对,它应该是 xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"。我使用我的方法将文件复制到可能不存在的目录中。对于重命名,它看起来必须在末尾添加一个反斜杠。【参考方案11】:

XCOPY 在目标末尾带有 * 以复制文件,无论它们是否存在于目标中 XCOPY 在目标末尾带有 \ 以复制目标中是否存在的文件夹和内容

或者

文件的 RoboForm SOURCE DEST FILE 文件夹的 RoboForm SOURCE DEST

【讨论】:

【参考方案12】:

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

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

【讨论】:

【参考方案13】:

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

【讨论】:

我一直在使用 robocopy。但是,对于此海报的问题,它不起作用,因为它无法重命名文件。今天之前我不知道的是 xcopy 确实有一个 /z 开关,它可以容忍网络暂停!【参考方案14】:

如果您只想复制文件并在目的地更改其名称,正确的做法是:

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

它会正常工作

【讨论】:

【参考方案15】:

对于复制大文件,带有 /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://***.com/users/3705330/chand

【讨论】:

【参考方案16】:

在目标路径的末尾放置一个星号(*)以跳过 D 和 F 的争执。

例子:

xcopy "compressedOutput.xml" "../../Execute 脚本/APIAutomation/Libraries/rerunlastfailedbuild.xml*"

【讨论】:

【参考方案17】:

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

例如 复制“bin\development\whee.config.example” "TestConnectionExternal\bin\Debug\whee.config"

【讨论】:

我正在尝试将文件复制到具有不同名称的同一文件夹中,但 xcopy 无法工作。我使用copy /Y source destination 来通过覆盖确认。【参考方案18】:

解决方法,使用重命名...并将其命名为一些隐秘名称,然后将其重命名为其正确名称

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"

【讨论】:

【参考方案19】:

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

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【参考方案20】:

在处理单个文件时,我同时使用这两个命令。

要将文件复制到另一个现有目录,请使用copy

copy srcPath\srcFile existingDir\newFile

要将现有文件复制到创建新目录,请使用xcopy

xcopy srcPath\srcFile newDirectoryPath\newFile

要抑制xcopy“文件或目录”提示,请在响应中回显。所以对于f中的文件复制回显。

echo f | xcopy srcPath\srcFile newDirectoryPath\newFile

注意标志/y 在这两个命令中都起作用,以抑制覆盖现有目标文件的确认。


MS 文档:copy、xcopy

【讨论】:

【参考方案21】:

由于您实际上并没有更改文件名,因此您可以从目标中取出文件名,不会有任何问题。

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

当目标目录保证存在并且源可能同样是文件或目录时,这种方法很有效。

【讨论】:

@downvoters:为什么这个答案会被否决?在这种情况下,Debug 目录可能保证存在。 此响应说“因为您实际上并没有更改文件名”,而原始问题明确表示“将文件从一个目录复制到另一个目录并在目标目录中重命名它”。所以这似乎与主题无关。【参考方案22】:

xxxxxxxxxxxx 是否指定了文件名 或目标上的目录名称

(F = file, D = directory)? D

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

【讨论】:

【参考方案23】:

您不能指定它始终是一个文件。如果您不需要 xcopy 的其他功能,为什么不直接使用普通的copy

【讨论】:

一个原因是copy,作为一个内部命令,没有设置ErrorLevel。如果您希望在发生复制错误时能够影响批处理文件的路径,则需要使用XCOPY 另一个原因是如果您想使用 xcopy 的其他功能,例如 /d

以上是关于xcopy 文件,重命名,抑制“是不是 xxx 指定文件名...”消息的主要内容,如果未能解决你的问题,请参考以下文章

使用创建日期复制和重命名文件(批处理脚本)

如何使用bat批处理或cmd,:将一个文件复制为“多个副本“(增量备份,自动重命名)到指定目录

请问BAT中的命令 COPY和XCOPY有啥区别,还有REN和MOVE又有啥区别?

使用bat的Xcopy命令把一个目录下的指定多个不同的文件类型复制到别一个文件夹

windows 系统的copy命令

BAT脚本基础语法