代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

xcopy file,rename,suppress“xxx是否指定文件名…”消息

  •  372
  • Sarah Vessels  · 技术社区  · 14 年前

    这看起来很简单,也许我只是忽略了 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=file,d=directory)?

    我想抑制这个提示;答案总是 F .

    19 回复  |  直到 7 年前
        1
  •  203
  •   Andreas buildpax    9 年前

    不要使用 xcopy 使用 copy 相反,它没有这个问题。

    复印件 通常在执行多个文件/文件夹的递归复制时使用,或者在需要它提供的验证/提示功能时使用。对于单个文件副本, 复制 命令工作得很好。

        2
  •  605
  •   Shea    14 年前

    我用

    echo f | xcopy /f /y srcfile destfile
    

    绕过它。

        3
  •  162
  •   Eric Lee zippycoder    7 年前

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

    例如:

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

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

    更新 :如@chapluk所述:

    你可以改变 "* " "[newFileName].*" . 它保持文件扩展名,但允许重命名。或更多哈奇: "[newFileName].[newExt]*" 更改扩展名

        4
  •  87
  •   ienaxxx    10 年前

    Xcopy中有一些未记录的特性。你可以使用:

    xcopy“bin\development\whee.config.example”“c:\mybackup\testconnectionexternal\bin\debug\whee.config*”

    我今天刚测试过。-)

        5
  •  65
  •   NG_    7 年前

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

    主要问题是“…如果目标不包含现有目录和 不以反斜杠结尾 (),出现以下消息:…

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

    您可以使用/i命令行选项来禁止显示此消息,这会导致xcopy在源文件或目录不止一个时,假定目标是一个目录。

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

        6
  •  27
  •   Steve Czetty Wilko van der Veen    12 年前

    所以,有一个简单的解决方法。这是公认的尴尬,但它起作用。 如果新文件(文件名)已经存在,xcopy将不提示查找目标是目录还是文件。如果在xcopy命令前面加上对新文件名的简单回显,它将覆盖空文件。例子

    echo.>newfile.txt
    xcopy oldfile.txt newfile.txt /Y
    
        7
  •  6
  •   adudley    11 年前

    这是比尔的答案。

    只是为了对别人说清楚。

    如果你在复印 从一个地方到另一个地方归档 要创建完整目录结构,请使用以下命令:

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

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

        8
  •  2
  •   jerryh91    11 年前

    xcopy src dest /I

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

        9
  •  2
  •   Ahmed Mansour grenix    8 年前

    回到原来的问题:

     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 麦克迪尔 不关心目录

    "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"
    

    确实存在。

        10
  •  2
  •   Colin Hay    7 年前

    Xcopy with*在目标的末尾复制文件,无论文件是否存在于目标中 xcopy with \在目标的末尾复制文件夹和内容,无论目标中是否存在

    替代地

    文件的roboform源dest文件 文件夹的roboform源dest

        11
  •  1
  •   Jens Erat    12 年前

    我建议 robocopy 而不是 copy xcopy . 在客户机或服务器上用作命令或在GUI中使用。允许网络暂停,您可以选择在按文件复制属性时忽略文件属性。哦,而且它支持多核机器,所以文件之间的“并行”复制速度要快得多,而不是按顺序。 机器人复制 可在MS TechNet上找到。

        12
  •  1
  •   user140185    9 年前

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

    type filename.txt > destfolder\destfilename.txt
    

    按我的要求工作。

        13
  •  1
  •   SandPiper    7 年前

    对于复制大型文件,Xopy和/j开关是一个不错的选择。在这种情况下,只需在文件中输入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
    

    感谢钱德的一点修改: https://stackoverflow.com/users/3705330/chand

        14
  •  0
  •   Peter    14 年前

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

    例如 复制“bin\development\whee.config.example” “testconnectionexternal\bin\debug\whee.config”

        15
  •  0
  •   Jirka Hanika    12 年前

    因为您实际上没有更改文件名,所以可以从目的地取出文件名,这样就不会有任何问题。

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

    当目标目录被保证存在,并且源目录可能是文件或目录时,这种方法工作得很好。

        16
  •  0
  •   JollyChollie    11 年前

    解决方法,使用重命名…把它命名为一个神秘的名字,然后把它重新命名为正确的名字。

    丙:

    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”中的

    ren“cop.htm”“基督我们的逾越节.htm”

        17
  •  0
  •   Chuck Emanuel    9 年前

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

    ren“bin\development\whee.config.example”whee.config

    xcopy/r/y“bin\development\whee.config” “testconnectionexternal\bin\debug\”

        18
  •  0
  •   Thanos    8 年前

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

    xcopy/f/y“bin\development\example.exe”软件 “testconnectionexternal\bin\debug\newname.exe*”

    会很好的

        19
  •  -2
  •   Gabe Timothy Khouri    14 年前

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