【问题标题】:In .NET, how do you send multiple arguments into a DOS command prompt?在 .NET 中,如何将多个参数发送到 DOS 命令提示符?
【发布时间】:2011-02-26 10:18:17
【问题描述】:

我正在尝试在 ASP.NET 2.0 中执行 DOS 命令。我现在所拥有的称为 BAT 文件,而后者又称为 CMD 文件。它可以工作(最终结果是文件被 ftp'​​ed)。但是,我想转储 BAT 和 CMD 文件并在 .NET 中运行所有内容。将多个参数发送到命令窗口的格式是什么?这是我现在所拥有的。

.NET 代码:

    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.EnableRaisingEvents = false;
    proc.StartInfo.FileName = "C:\\MyBat.BAT";
    proc.Start();
    proc.WaitForExit();

Bat 文件看起来像这样(它所做的只是运行 cmd 文件):

ftp.exe -s:C:\MyCMD.cmd

这里是 Cmd 文件的内容:

open <my host>
<my user name>
<my pw>
quote site cyl pri=1 sec=1 lrecl=1786 blksize=0 recfm=fb retpd=30
put C:\MyDTLFile.dtl 'MyDTLFile.dtl'
quit

【问题讨论】:

    标签: ftp dos


    【解决方案1】:

    如果您要开始一个新进程,只需将 ProcessStartInfo.Arguments 属性设置为包含所有参数的字符串,就像您在命令行中键入它们一样。

    顺便说一句,由于您似乎正在尝试编写命令行 FTP 客户端脚本,因此您可能对 CodeProject 上的 C# FTP Client library 感兴趣,或者可能对 other StackOverflow question 的答案之一感兴趣。

    【讨论】:

    • 设置字符串。我把你带到了那里。但是他们是怎么分开的呢?是一串逗号分隔的命令吗?
    • @donde:您只能设置一个参数行。不同参数的分隔由您调用的程序给出。例如ftp.exe -v -n -i -s:mycmd.cmd -A(这里它们用空格分隔并以破折号开头)。但是不能超过一行
    【解决方案2】:

    使用Process.StartInfo.Arguments

    【讨论】:

      【解决方案3】:

      您使用ProcessStartInfo.Arguments 提交您的论点:

      proc.StartInfo.FileName = @"ftp.exe";
      proc.StartInfo.Arguments = @"-s:C:\MyCMD.cmd";
      

      但是 - 这不是你想要的,因为你也想替换 cmd 文件。但是,内容不是传递给 ftp.exe 的命令行参数。它是一个输入脚本。所以将内容作为参数传递是行不通的。

      要使 cmd 文件消失,您必须使用标准输入和输出。例如见Process.StandardInput

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-02
        • 1970-01-01
        • 1970-01-01
        • 2015-07-06
        • 2012-07-30
        • 2010-12-25
        相关资源
        最近更新 更多