运行bat文件代码时的奇怪行为

时间:2015-01-13 14:22:05

标签: c# windows visual-studio batch-file cmd

从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.batfile_copy_2.bat都是相同的(我已经检查了属性以防万一,也是一样的)。 Visual Studio创建的文件无法执行第一个命令,但我自己创建的那个命令成功了。为什么呢?

FYI, 从命令chcp返回的代码页代码是866.我尝试过65001,这是utf-8,但是我得到了类似的结果,不同的字符写在命令的开头而不是я╗┐

如果您不清楚问题详情,请在下方发表评论,因为我可以解释错误

提前致谢

1 个答案:

答案 0 :(得分:0)

问题显然在你的file_copy.bat中 您可以通过从命令行运行file_copy.bat(使用适当的参数)来证明它。

创建file_copy ,还是从项目中的某个位置复制粘贴?

<强>更新 从评论中我明白了。问题是file_copy.bat的编码 将bat文件转换为没有BOM的UTF-8时,问题就解决了。