xcopy不适用于相对路径和环境变量

时间:2017-01-23 11:42:32

标签: batch-file xcopy

我正在执行以下命令:

xcopy /Y /R "%VS140COMNTOOLS%..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\

此命令将产生以下结果:

  

找不到文件 - dbghelp.dll
  0文件已复制

echo %VS140COMNTOOLS%产生以下结果 - 我只是扩展了环境变量:

  

C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ Tools \

同时,以下命令有效:

 xcopy /R /Y "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\
  

C:\ Program Files(x86)\ Microsoft Visual Studio   14.0 \ Common7 \工具\ .. \ IDE \ CommonExtensions \平台\ DiagnosticsHub \ 86 \ dbghelp.dll
  1个文件被复制

有什么问题?

1 个答案:

答案 0 :(得分:1)

xcopy /Y /R "%VS140COMNTOOLS%..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\

上面的命令行在4种情况下失败并显示以下错误消息:

  

找不到文件 - dbghelp.dll
  0文件已复制

  1. 分配给环境变量VS140COMNTOOLS的文件夹路径不以反斜杠结尾 这种可能的错误原因显然不是这种情况,因为echo %VS140COMNTOOLS%打印了带有反斜杠的文件夹路径。

  2. 环境变量具有字符串值:
    %ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\Tools\
    但这不是这种情况,否则echo %VS140COMNTOOLS%将打印该字符串。

  3. 分配给环境变量VS140COMNTOOLS的文件夹路径有1个或多个尾随空格/标签。

  4. 分配给环境变量VS140COMNTOOLS的文件夹路径以1个或多个前导空格/标签开头。

  5. 对于第二个和第三个错误原因,有助于运行echo "%VS140COMNTOOLS%"并查看输出是否为:

      

    " C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ Tools \"

      

    " C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ Tools \"

    使用语法set variable=value很容易导致获取带有分配给环境变量的尾随空格/制表符的值,从而导致在此类错误中使用。解决方案正在使用set "variable=value",详见Why is no string output with 'echo %var%' after using 'set var = text' on command line?

    的回答

    为了完整性,使用命令行

    定义环境变量VS140COMNTOOLS
    set VS140COMNTOOLS="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\"
    

    使用等号后面的第一个双引号而不是左边的变量名,并且没有尾随空格/制表符会导致执行命令行:

    xcopy /Y /R ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\"..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\
    

    但是这个命令行会导致错误消息:

      

    参数数量无效

    因此,也可以排除双引号文件夹路径作为可能的错误原因。

    BTW:在命令提示符窗口xcopy中运行xcopy /?输出的帮助列出了源和目标参数之后的可选参数。当然可以指定第一个/R /Y然后指定源文件和目标文件夹,但通常建议使用命令帮助建议的语法。