我有一个批处理文件foo1.bat
,其中包含:
@echo off
echo.>"\\xxx\xxx$\xxx\xxxx\xxxx\BATScipt Files\dblank.txt"
如果我双击该文件,则会按预期创建dblank.txt
。
在我的Console App
中,我尝试了两种不同的方法:
1
System.Diagnostics.Process.Start(@"\\xxx\xxx$\xxx\xxxx\xxxx\BATScipt Files\foo1.bat");
2
ProcessStartInfo ProcessInfo;
Process process;
ProcessInfo = new ProcessStartInfo("cmd.exe","/c \\xxx\xxx$\xxx\xxxx\xxxx\BATScipt Files\foo1.bat");
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
ProcessInfo.WorkingDirectory = aPath;
process = Process.Start(ProcessInfo);
process.WaitForExit();
process.Close();
以上两种情况都不会引发异常,但都不会创建预期的输出文件:
如果我将foo1.bat
内的代码更改为以下内容并创建相应的空文件bar.txt
,则可以通过控制台运行,并按预期将文本写入bar.txt
:
@echo off
setlocal enableextensions
(
systeminfo | findstr ....
echo %a%
echo %b%
echo %c%
) > "%~dp0\bar.txt"
答案 0 :(得分:2)
此代码适用于我:
Process p = new Process();
p.StartInfo.FileName = "C:\\execute.bat";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
检查共享文件夹权限
这也有效p.StartInfo.FileName = "\\\\xxxx\\xxx\\execute.bat"
;
答案 1 :(得分:2)
在我看来,你需要更多的双引号:
ProcessInfo = new ProcessStartInfo("cmd.exe","/c \\xxx\xxx$\xxx\xxxx\xxxx\BATScipt Files\foo1.bat");
引用了您的第二个参数,这是有意义的,但是您使用cmd /c
开始一个新流程,然后将其包含空格\\xxx\xxx$\xxx\xxxx\xxxx\BATScipt Files\foo1.bat
。
这意味着您确实告诉cmd
使用\\xxx\xxx$\xxx\xxxx\xxxx\BATScipt
参数执行Files\foo1.bat
。
所以你也必须在论证的那一部分附加引号。您可以构建字符串或只是添加双引号对,或者如您在第一个选项中所做的那样,使用@
符号。我可能会这样做:
ProcessInfo = new ProcessStartInfo("cmd.exe","/c ""\\xxx\xxx$\xxx\xxxx\xxxx\BATScipt Files\foo1.bat""");
其中""
是双引号字符串中嵌入的"
。