440

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

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

4

23 回答 23

661

我用

echo f | xcopy /f /y srcfile destfile

绕过它。

于 2010-06-10T20:45:49.167 回答
237

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

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

于 2010-06-10T20:45:41.530 回答
189

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

例如:

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

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

更新:正如@chapluck 提到的:

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

于 2013-02-09T13:02:07.207 回答
102

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

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

我今天才测试过。:-)

于 2014-09-25T08:49:19.967 回答
73

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

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

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

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

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

于 2013-08-09T00:11:56.693 回答
27

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

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y
于 2012-10-10T13:24:30.623 回答
4

这是来自比尔的回答。

只是为了对其他人非常清楚。

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

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

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

于 2013-08-20T08:04:55.553 回答
3

xcopy src dest /I

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

于 2013-07-22T19:54:54.443 回答
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\"

真的存在。

于 2013-11-11T16:25:10.033 回答
2

我有一个类似的问题,robocopy 和 xcopy 都没有帮助,因为我想禁止评论并使用不同的目标文件名。我发现

type filename.txt > destfolder\destfilename.txt

按照我的要求工作。

于 2016-01-14T17:57:41.117 回答
2

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

xcopy "C:\src\whee.config.txt" "C:\dest\bee.config.txt*" /D /Y
于 2020-06-01T08:05:30.223 回答
2

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

或者

RoboForm SOURCE DEST FILE 用于文件 RoboForm SOURCE DEST 用于文件夹

于 2018-01-24T00:30:21.227 回答
1

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

于 2013-02-20T23:13:21.007 回答
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

于 2017-12-28T19:19:59.680 回答
1

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

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

它会正常工作

于 2017-05-14T11:52:26.270 回答
1

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

例子:

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

于 2019-09-04T09:41:48.710 回答
0

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

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

于 2010-10-28T18:07:39.597 回答
0

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

C:

CD "C:\Users\Public\Documents\我的网站\AngelFire~Zoe\"

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

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

于 2013-06-06T18:13:13.737 回答
0

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

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

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

于 2015-06-08T17:38:12.370 回答
0

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

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

copy srcPath\srcFile existingDir\newFile

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

xcopy srcPath\srcFile newDirectoryPath\newFile

要抑制xcopy“文件或目录”提示,请在响应中回显。因此,对于f.

echo f | xcopy srcPath\srcFile newDirectoryPath\newFile

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


MS Docs:复制xcopy

于 2021-08-18T22:39:59.520 回答
-1

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

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

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

于 2011-09-05T08:23:39.960 回答
-1

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

(F = file, D = directory)? D

if a File : (echo F)
if a Directory (echo D)
于 2019-10-08T07:19:48.490 回答
-2

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

于 2010-06-10T20:45:09.037 回答