日期:2014-05-20  浏览次数:20639 次

ant的一个小技术问题(带双引号导致失败,求大虾指点)
1.自己根据端口,查找PID进行,然后关闭程序。脚本内容如下stop.bat

netstat -aon| findstr 8088 > output.txt
for /f "tokens=5 delims= " %%a in (output.txt) do (
echo %%a
taskkill /pid %%a /t /f 
)
del /f /q output.txt

执行脚本为
  <target name="init" >
<exec executable= "cmd"> 
  <arg value="/c stop.bat"/>
</exec> 
  </target>
则会成功,但是现在想直接拆分成命令,拆分语句如下

2.拆分成单条执行语句执行
  <target name="init" >
<exec executable= "cmd"> 
<arg line= "/c"/>
<arg line="for /f “tokens=5 delims= ”, %%a in (output.txt) do(taskkill /PID %%a /F)" />
<arg line="netstat -aon| findstr 8088 > output.txt" />
</exec> 
  </target>

失败问题原因:
由于 <arg line="for /f “tokens=5 delims= ”, %%a in (output.txt) do(taskkill /PID %%a /F)" />里面有双引号,导致执行失败。
求解决办法。

 

------解决方案--------------------
你这个双引号一看就知道是有输入法时的大双引号,这个双引号系统会把它当做一个字符来解析,不会当做双引号来用。
改成如下
<arg line="for /f \"tokens=5 delims= \", %%a in (output.txt) do(taskkill /PID %%a /F)" />
或者
<arg line="for /f 'tokens=5 delims= ', %%a in (output.txt) do(taskkill /PID %%a /F)" />
------解决方案--------------------
用bat脚本处理