从C#运行一个FTP命令batch file

我在C#中写了一个winform应用程序,它修改脚本文件(服务器地址等)中的FTP命令,然后执行一个batch file,该文件应该从命令提示符下启动FTP并根据脚本下载文件。

当我运行应用程序外部的batch file(从命令提示符或双击),文件正在下载正常,但从应用程序执行批处理时没有任何反应…

我还注意到以下差异:当从外部运行批处理时,我会在cmd窗口中看到“ ftp> open 10.1.1.1”。 当从应用程序运行批处理时,我在cmd窗口中看到“打开10.1.1.1”(缺less“ftp>”)。

我的猜测是,我没有正确使用System.Diagnostics.Process()…

C#相关部分:

private void button1_Click(object sender, EventArgs e) { var cmd = new System.Diagnostics.Process(); cmd.StartInfo.FileName = "runFTP.bat"; cmd.StartInfo.UseShellExecute = false; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.WorkingDirectory = path; cmd.Start(); cmd.WaitForExit(); cmd.Close(); } } 

batch file(runFTP.bat):

 echo off @echo Downloading files... REM ==Start FTP with script== ftp -i -s:ftpCmd.txt del ftpCmd.txt @echo Done! @echo Exiting... 

FTP脚本文件(ftpCmd.txt):

 open 10.1.1.1 user password bin cd /rootFolder/new lcd C:\Downloads mget *.* bye 

我找到了解决我的问题..现在工作正常:)

通过在C#中将以下System.Diagnostics.Process()StartInfo参数添加并更改为false,我可以在命令提示符处下载这些文件并获取缺少的“ftp>”。

修改的C#代码看起来像这样

  var cmd = new System.Diagnostics.Process(); cmd.StartInfo.FileName = "runFTP.bat"; cmd.StartInfo.UseShellExecute = false; cmd.StartInfo.RedirectStandardInput = false; cmd.StartInfo.RedirectStandardOutput = false; cmd.StartInfo.WorkingDirectory = path; cmd.Start(); cmd.WaitForExit(); cmd.Close(); 

感谢任何花时间在这个..希望这将有助于其他人。