发布后设置命令和%变量%错误

8

我是一名批处理新手,可能犯了错。但我有以下的后构建事件:

IF $(ConfigurationName) == Release (
    SET RELEASEPATH = "C:\Users\Synercoder\Documents\Visual Studio 2010\Releases\$(ProjectName)"
    IF NOT EXIST  %RELEASEPATH% (
        GOTO MAKEDIR
    ) ELSE (
        GOTO DIREXISTS
    )
    :MAKEDIR
    MKDIR %RELEASEPATH%
    :DIREXISTS
    COPY /Y "$(TargetDir)$(ProjectName).dll" "%RELEASEPATH%\$(ProjectName).dll"
    COPY /Y "$(TargetDir)$(ProjectName).pdb" "%RELEASEPATH%\$(ProjectName).pdb"
)

但是在使用代码255时失败了。如果我用实际路径替换所有的%RELEASEPATH%,那么它就可以工作了。我查阅了SET命令,并且认为我使用得正确...但像我说的,我是一个批处理新手。你有任何线索吗?为什么在我的情况下会失败?
如果我使用以下代码,这就是我的输出:
SET RELEASEPATH = test
ECHO "%RELEASEPATH%"
SET RELEASEPATH = "test"
ECHO "%RELEASEPATH%"

输出:

""
""
2个回答

13

首先,空格是很重要的!如果我是您,我会将 " 删除,并且只在使用变量时添加它们。

SET RELEASEPATH=C:\Users\Synercoder\Documents\Visual Studio 2010\Releases\$(ProjectName)

IF NOT EXIST  "%RELEASEPATH%" MKDIR "%RELEASEPATH%"

如果我使用SET RELEASEPATH=C:\Users\Synerc...,带引号或不带引号("C:...")都无所谓。结果是一样的(参见额外示例)。 - SynerCoder
该死!我正在研究“忘了空格”。谢谢你救了我的一天。 - SynerCoder
只有当我将 IF NOT EXIST "%RELEASEPATH%" MKDIR "%RELEASEPATH%" 放在一行中时,它才对我起作用。 - Mykhailo Seniutovych

4

我的解决方案如下:

SET RELEASEPATH=%USERPROFILE%\Documents\Visual Studio 2010\Releases\$(ProjectName)
IF $(ConfigurationName) == Release (
    IF NOT EXIST %RELEASEPATH% (
        MKDIR "%RELEASEPATH%"
    ) 
    COPY /Y "$(TargetDir)$(ProjectName).dll" "%RELEASEPATH%\$(ProjectName).dll"
    COPY /Y "$(TargetDir)$(ProjectName).pdb" "%RELEASEPATH%\$(ProjectName).pdb"
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接