【问题标题】:Incorrect batch script execution批处理脚本执行不正确
【发布时间】:2015-04-12 02:09:13
【问题描述】:

注意:这个问题与我 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 是一个在 Windows Server 2003 R2 Standard x64 Edition SP2 上运行的 .NET 3.5 程序(用 C# 编写)。注意第二个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 库。

【问题讨论】:

  • 我记得在从另一个 .cmd 调用 .cmd 时发生了类似的情况您是否尝试在第四行的开头添加 'call '?
  • 显然STDIN 和/或STDOUT 和/或STDERR 句柄有问题。接下来可能会有所帮助:start "" /D%DIR%\ /WAIT %DIR%\OFCNSFilter.exe ...

标签: c# .net batch-file cmd windows-server-2003


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-02-15
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多