xcopy 不适用于相对路径和环境变量
xcopy doesn't work with relative path and environment variable
我正在执行以下命令:
xcopy /Y /R "%VS140COMNTOOLS%..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\
此命令产生以下结果:
File not found - dbghelp.dll
0 File(s) copied
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\Tools\..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll
1 File(s) copied
有什么问题?
xcopy /Y /R "%VS140COMNTOOLS%..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\
上述命令行在 4 种情况下失败并显示以下错误消息:
File not found - dbghelp.dll
0 File(s) copied
分配给环境变量VS140COMNTOOLS
的文件夹路径没有以反斜杠结尾。
这种可能的错误原因显然不是这里的情况,因为 echo %VS140COMNTOOLS%
打印文件夹路径末尾有反斜杠。
环境变量的字符串值为:
%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\Tools\
但这里不是这种情况,否则 echo %VS140COMNTOOLS%
将打印该字符串。
分配给环境变量 VS140COMNTOOLS
的文件夹路径有 1 个或多个尾随 spaces/tabs。
分配给环境变量VS140COMNTOOLS
的文件夹路径以1个或多个前导spaces/tabs.
开头
对于第二个和第三个错误原因,运行 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
可以很容易地导致获取分配给环境变量的尾随 spaces/tabs 的值,从而导致使用此类错误。解决方案是使用 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\"
在等号后加上第一个双引号而不是留给变量名并且没有尾随 spaces/tabs 将导致执行命令行:
xcopy /Y /R ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\"..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\
但是此命令行会导致错误消息:
Invalid number of parameters
因此也可以排除已经用双引号引起来的文件夹路径作为错误的可能原因。
BTW:运行ning 在命令提示符 window 中输出的 xcopy
的帮助 xcopy /?
列出了源参数和目标参数之后的可选参数。当然可以首先指定 /R /Y
,然后指定源文件和目标文件夹,但通常建议使用命令帮助中建议的语法。
我正在执行以下命令:
xcopy /Y /R "%VS140COMNTOOLS%..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\
此命令产生以下结果:
File not found - dbghelp.dll
0 File(s) copied
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\Tools\..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll
1 File(s) copied
有什么问题?
xcopy /Y /R "%VS140COMNTOOLS%..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\
上述命令行在 4 种情况下失败并显示以下错误消息:
File not found - dbghelp.dll
0 File(s) copied
分配给环境变量
VS140COMNTOOLS
的文件夹路径没有以反斜杠结尾。
这种可能的错误原因显然不是这里的情况,因为echo %VS140COMNTOOLS%
打印文件夹路径末尾有反斜杠。环境变量的字符串值为:
%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\Tools\
但这里不是这种情况,否则echo %VS140COMNTOOLS%
将打印该字符串。分配给环境变量
VS140COMNTOOLS
的文件夹路径有 1 个或多个尾随 spaces/tabs。分配给环境变量
VS140COMNTOOLS
的文件夹路径以1个或多个前导spaces/tabs. 开头
对于第二个和第三个错误原因,运行 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
可以很容易地导致获取分配给环境变量的尾随 spaces/tabs 的值,从而导致使用此类错误。解决方案是使用 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\"
在等号后加上第一个双引号而不是留给变量名并且没有尾随 spaces/tabs 将导致执行命令行:
xcopy /Y /R ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\"..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\
但是此命令行会导致错误消息:
Invalid number of parameters
因此也可以排除已经用双引号引起来的文件夹路径作为错误的可能原因。
BTW:运行ning 在命令提示符 window 中输出的 xcopy
的帮助 xcopy /?
列出了源参数和目标参数之后的可选参数。当然可以首先指定 /R /Y
,然后指定源文件和目标文件夹,但通常建议使用命令帮助中建议的语法。