这个批处理文件有什么问题?

时间:2014-04-09 18:45:16

标签: batch-file wix

我需要在我的Wix项目中包含所有文件依赖项,手动执行它是一件痛苦的事。所以我搜索了网站并找到了这个批处理文件。我按照步骤但得到了错误。批处理文件的作用是扫描所有项目并生成wxs文件。

  @echo off
  set SOLUTIONDIR=%1
  set OUTPUTFILE=%2
  echo Starting Dependency check...
  echo ^<?xml version="1.0" encoding="UTF-8"?^> > %OUTPUTFILE%
  echo ^<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"^> >> %OUTPUTFILE%
  echo   ^<Fragment^> >> %OUTPUTFILE%
  echo     ^<ComponentGroup Id="MesDependance" Directory="INSTALLFOLDER"^> >> %OUTPUTFILE%

  for %%F in (%SOLUTIONDIR%ClientSetup\bin\Debug\*.dll) do (
  echo "-- Adding %%~nxF" 
  echo       ^<Component Id="%%~nF"^> >> %OUTPUTFILE%
  echo     ^<File  Id="%%~nF" Name="%%~nxF" Source="%%~dpnxF" Vital="yes"          KeyPath="yes" DiskId="1"/^> >> %OUTPUTFILE%
  echo       ^</Component^> >> %OUTPUTFILE%
   )
  echo     ^</ComponentGroup^> >> %OUTPUTFILE%
  echo   ^</Fragment^> >> %OUTPUTFILE%
  echo ^</Wix^> >> %OUTPUTFILE%
  echo Dependency check done.

1 个答案:

答案 0 :(得分:0)

你的问题是空间。作为一般规则,应引用所有路径(以防它有空格),变量中的内容不应该有引号(删除它们比在需要时添加更难)以及从变量构造路径时内容,引用结果路径

 @echo off
    set "SOLUTIONDIR=%~1"
    set "OUTPUTFILE=%~2"

在没有引号的情况下检索的值,存储在没有引号的变量中。 set命令中的引号可确保正确存储内容而不添加附加空格

    echo Starting Dependency check...
    (   echo ^<?xml version="1.0" encoding="UTF-8"?^> 
        echo ^<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"^>
        echo   ^<Fragment^>
        echo     ^<ComponentGroup Id="MesDependance" Directory="INSTALLFOLDER"^>
    )> "%OUTPUTFILE%"

    for %%F in ("%SOLUTIONDIR%ClientSetup\bin\Debug\*.dll") do (
        echo -- Adding %%~nxF
        (   echo        ^<Component Id="%%~nF"^> 
            echo            ^<File  Id="%%~nF" Name="%%~nxF" Source="%%~dpnxF" Vital="yes" KeyPath="yes" DiskId="1"/^> 
            echo        ^</Component^> 
        ) >> "%OUTPUTFILE%"
    )

    (   echo     ^</ComponentGroup^> 
        echo   ^</Fragment^> 
        echo ^</Wix^> 
    ) >> "%OUTPUTFILE%"

    echo Dependency check done.

正确引用所有对文件的引用,包括重定向和内部for in(,以确保空格没有问题。