2015-02-11 51 views
0

注:此问题与我在4个月前询问的问题类似,但不是相同的问题。
我有以下批处理脚本:不正确的批处理脚本执行

@echo off 
set DIR=U:\sendToJeff 
echo Starting list filter... 
%DIR%\OFCNSFilter.exe %DIR%\filter.ini %DIR%\OFCNS_FINAL_mod.xml %DIR%\outfile.xml 
echo errorlevel = %errorlevel% 

当在cmd中运行,我得到下面的输出:

U:\sendToJeff>testscript.bat 
Starting list filter... 

U:\sendToJeff> 

OFCNSFilter.exe是一个.NET 3.5的程序(C#编写)运行在Windows Server 2003 R2 Standard x64 Edition SP2上。请注意,第二个ECHO命令未执行。但是,如果我ECHO%ERRORLEVEL%,它是0(0 =成功,1 =失败)。程序实际运行也很明显,因为outfile.xml已经创建。

这里是我变得更加困惑的地方。如果我运行一次,我会得到上面的输出结果。但是,如果我尝试运行它不止一次在同一个cmd窗口,我得到下面的输出:

U:\sendToJeff>testscript.bat 
Starting list filter... 

U:\sendToJeff>testscript.bat 

U:\sendToJeff> 

有没有人见过这种行为在一个批处理脚本?我将不胜感激任何有关如何解决这个问题的见解。如果有帮助,我也使用System.Xml.Linq库。

+0

我记得像从另一个.cmd调用.cmd时发生的情况您是否尝试在第四行开头添加“call”? – 2015-02-11 20:07:03

+0

显然有'STDIN'和/或'STDOUT'和/或'STDERR'句柄出了问题。接下来可以帮助:'开始'“/ D%DIR%\/WAIT%DIR%\ OFCNSFilter.exe ...' – JosefZ 2015-02-11 20:30:22

回答

0

我终于明白了。在过去的程序迭代中,我将数据输出到控制台。这些数据是UTF8编码的,所以我必须做Console.OutputEncoding = System.Text.Encoding.UTF8;才能正确打印数据。虽然这可以在我的机器和运行Windows Server 2012 R2的服务器上运行,但我猜在Windows Server 2003上有这样一个问题。只需删除该行代码即可解决所有问题。所以,这最终是一个C#/ VB.NET问题比批处理脚本更多,但我希望有人可能会觉得这很有用。