代码之家  ›  专栏  ›  技术社区  ›  SecretDeveloper

在c:\驱动器上创建名为“program”的Nant cmd.exe重定向文件

  •  1
  • SecretDeveloper  · 技术社区  · 16 年前

    我有一个NAnt脚本,作为其项目的一部分,它使用以下任务调用批处理文件:

    <target name="makeplane">   
      <exec program="C:\WINDOWS\system32\CMD.EXE" 
          commandline="/C ${make.file} &gt; ${make.log}"          
          verbose="false" 
          workingdir="${make.dir}" 
          basedir="${make.dir}">         
          </exec>
        <delete>
          <fileset basedir="c:\">
            <include name="program" />
          </fileset>
        </delete>
    </target>
    

    不幸的是,我无法控制批处理文件上的内容,它会在屏幕上喷出大量垃圾,在日志中毫无用处。因此,为了解决这个问题,我使用以下命令将bat文件的输出重定向到文本文件

     &gt; ${make.log}
    

    相当于“>log.txt”的部分。

    问题是,我现在需要为另一个项目运行一个类似的任务,如果它们同时运行,那么第一个任务将锁定名为“程序”的文件,第二个任务将失败。对于持续集成来说,这并不是一个很好的情况。

    我在网上搜索,但由于文件名为程序,我得到了各种垃圾结果。任何人都有解决办法。我在exec任务上尝试了输出参数,但问题仍然存在。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Scott Saad    16 年前

    如果日志的文件路径包含空格,通常会希望用引号括住路径。为了在南特做到这一点,可以使用 &quot; 实体。

    这听起来像是在你的特定情况下发生的事情。因此,如果你将你的例子改为以下内容,我认为事情应该按预期进行。

    <target name="makeplane">   
        <exec program="C:\WINDOWS\system32\CMD.EXE" 
            commandline="/C ${make.file} &gt; &quot;${make.log}&quot;"          
            verbose="false" 
            workingdir="${make.dir}" 
            basedir="${make.dir}">         
        </exec>
    </target>
    
        2
  •  1
  •   Franci Penov    16 年前

    通常,这是因为脚本试图创建一个包含空格的长文件名的文件( c:\program files 在您的情况下),但它没有在长文件名周围使用引号。

        3
  •  0
  •   Chad Juliano    15 年前

    这是我所做的。我认为对于复杂的命令来说,它有点干净。

    <property name="cmd.label" value="\${ss.previous.label}@$Project.SSPath" />
    <echo message="Getting $Project.Name source code with label \${cmd.label}" />
    <property name="cmd" value="&quot;\${tfs.root}\tf.exe&quot; get $Project.SSPath &quot;/version:L\${cmd.label}&quot; /force /recursive /noprompt"/>
    <exec program="cmd.exe"
      workingdir="\${shadow.dir}"
      failonerror="true"
      verbose="true">
     <arg value="/c" />
     <arg value="&quot;\${cmd}&quot;" />
     <arg value="> nul" />
    </exec>
    
    推荐文章