2015-02-11 87 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問題比批處理腳本更多,但我希望有人可能會覺得這很有用。