从c#代码运行bat文件时我遇到了一个奇怪的问题(同样来自cmd.exe和Run窗口)。 首先,我的bat文件看起来像这样
file_copy.bat
NET USE %1 /USER:%2 %3
COPY /Y %4 %5
NET USE %1 /DELETE
PAUSE
我已将此bat文件包含在visual studio 2013中,并将Copy To Output Directory
设置为Always Copy
。我运行此bat文件的代码如下所示
string args = "\"\\\\192.168.54.196\\c$\" \"user\" \"123456\" \"\\\\192.168.54.196\\c$\\paykiosk\\logs\\pgw_150113.log\" \"C:\\Users\\IlhamIs\\AppData\\Local\\Temp\\pgw_150113.log\""
var processInfo = new ProcessStartInfo
{
UseShellExecute = false,
FileName = "file_copy.bat",
Arguments = args
};
var process = new Process { StartInfo = processInfo };
process.Start();
我构建我的项目,显然file_copy.bat被复制到bin\debug
目录(在我的例子中)。然后我运行应用程序,bat文件执行,但第一个命令以某种方式在runtume修改,因此出现错误'я╗┐NET' is not recognized as an internal or external command, operable program or batch file.
。这很奇怪,я╗┐
被写入第一个命令的开头。这是我得到的完整输出:
C:\Users\IlhamIs\Desktop\test\bin\debug>я╗┐NET USE "\\192.168.54.196\c$" /USER:"user" "123456"
'я╗┐NET' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\IlhamIs\Desktop\test\bin\debug>COPY /Y "\\192.168.54.196\c$\paykiosk\logs\pgw_150113.l
og" "C:\Users\IlhamIs\AppData\Local\Temp\pgw_150113.log"
Logon failure: unknown user name or bad password.
C:\Users\IlhamIs\Desktop\test\bin\debug>NET USE "\\192.168.54.196\c$" /DELETE
The network connection could not be found.
More help is available by typing NET HELPMSG 2250.
C:\Users\IlhamIs\Desktop\test\bin\debug>PAUSE
Press any key to continue . . .
然后使用相同的脚本(file_copy_2.bat)在bin\debug
目录中创建一个bat文件,请注意,这不是由visual studio创建的。这次我将FileName = "file_copy.bat"
更改为FileName = "file_copy_2.bat"
以使我的应用程序运行我创建的文件,然后运行我的应用程序。它看起来很荒谬,但它奏效了,所有3个命令都成功执行了。
这真的很奇怪。 我错过了什么? Visual Studio在编译和将文件复制到输出目录时是否对bat文件做了一些特殊的事情? file_copy.bat
和file_copy_2.bat
都是相同的(我已经检查了属性以防万一,也是一样的)。 Visual Studio创建的文件无法执行第一个命令,但我自己创建的那个命令成功了。为什么呢?
FYI,
从命令chcp返回的代码页代码是866.我尝试过65001,这是utf-8,但是我得到了类似的结果,不同的字符写在命令的开头而不是я╗┐
如果您不清楚问题详情,请在下方发表评论,因为我可以解释错误
提前致谢
答案 0 :(得分:0)
问题显然在你的file_copy.bat中 您可以通过从命令行运行file_copy.bat(使用适当的参数)来证明它。
您创建file_copy ,还是从项目中的某个位置复制粘贴?
<强>更新强> 从评论中我明白了。问题是file_copy.bat的编码 将bat文件转换为没有BOM的UTF-8时,问题就解决了。