如何处理命令行参数

qq_30335331 2018-02-18 09:29:01
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Test
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (args.Length > 0)
{
MessageBox.Show(args[0]);
}

Application.Run(new Form2());
}
}
}

上面的args 如何处理可选参数 类似

E:\MySoft\vs\Test\Test\bin\Debug>shutdown /?
用法: shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f]
[/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]

没有参数 显示帮助。这与键入 /? 是一样的。
/? 显示帮助。这与不键入任何选项是一样的。
/i 显示图形用户界面(GUI)。
这必须是第一个选项。
/l 注销。这不能与 /m 或 /d 选项一起使用。
/s 关闭计算机。
/sg 关闭计算机。在下一次启动时,
重启任何注册的应用程序。
/r 完全关闭并重启计算机。
/g 完全关闭并重新启动计算机。在重新启动系统后,
重启任何注册的应用程序。
/a 中止系统关闭。
这只能在超时期间使用。
与 /fw 结合使用,以清除任何未完成的至固件的

其中 输入 shutdown /s /t 500 或者 shutdown /t 500 /s 均可实现500秒之后关机
...全文
1053 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2018-02-20
  • 打赏
  • 举报
回复
引用 5 楼 qq_30335331 的回复:
谢谢各位的回答,但都没有回答到点上 首先 shutdown.exe 是windows自带的命令行程序,我这里只是拿他举个例子,我要实现这样的效果 这个程序接受到的参数是一个数组 其中有/代表命令 /后面代表具体的值 比如/t 500 就是时间是500秒 /s表示关机 而且 /s /t 500 和 /t 500 /s 等效 我想知道除了使用大量的分支语句之后,有没有更好的处理方式?? 请大神赐教
首先说清楚,你要做什么? 既然参数是一个数组,那么就无需用if分支处理,只要是合法的命令,整体提交给程序执行就行

string[] args = { "/s /t 500", "ping www.xxx.com", "netstat -a", "ipconfig" };
foreach(string s in args)
{
    //*.exe s
}

  • 打赏
  • 举报
回复
引用 10 楼 qq_30335331 的回复:
没有描述清楚我的问题 深感抱歉 其实我想问除了用分支语句判断 还有没有更好的实现
谁知道你的所谓“分支语句判断”是什么逻辑呢?贴出你的代码来看看能不能灵活解决问题?!
Dogfish 2018-02-20
  • 打赏
  • 举报
回复
我自己一般生成一个shortcut,然后运行这个shortcut
秋的红果实 2018-02-19
  • 打赏
  • 举报
回复
生成exe后,在cmd下类似这样:Test.exe arg1 arg2
threenewbee 2018-02-19
  • 打赏
  • 举报
回复
args这个具体怎么解释,要你自己处理,放在dictionary比较好
xuzuning 2018-02-19
  • 打赏
  • 举报
回复
传入的参数都在 args 数组中 村还判断处理即可 只在 /i 是执行 Application.Run(new Form2()); 其他参数具体的实现你会的
super_admi 2018-02-19
  • 打赏
  • 举报
回复
不论是C#还是JAVA,或者C++,都有专门的命令行参数处理模块。
引用 10 楼 qq_30335331 的回复:
没有描述清楚我的问题 深感抱歉 其实我想问除了用分支语句判断 还有没有更好的实现
qq_30335331 2018-02-19
  • 打赏
  • 举报
回复
没有描述清楚我的问题 深感抱歉 其实我想问除了用分支语句判断 还有没有更好的实现
xuzuning 2018-02-19
  • 打赏
  • 举报
回复
/t 和 /s 有关联,但可能只出现一个,也可能出现的次序不同 输入是可选的,处理是按规则的,未出现就取缺省值,其余的对号入座 我是不知道你在说什么,因为你自己都不知道你要做什么
qq_30335331 2018-02-19
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
不就一个循环吗?
namespace 命令行参数
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (var s in args)
            {
                Console.WriteLine(s);
            }
        }
    }
}
谁在前,谁在后,只是一念之差
很感激你的回答 但是 你根本不知道我在说什么??
xuzuning 2018-02-19
  • 打赏
  • 举报
回复
不就一个循环吗?
namespace 命令行参数
{
class Program
{
static void Main(string[] args)
{
foreach (var s in args)
{
Console.WriteLine(s);
}
}
}
}

谁在前,谁在后,只是一念之差
qq_30335331 2018-02-19
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
举一个 /s /t 的例子,可以这样
    static class Program
    {
        static System.Threading.Timer tmr;

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var f = new Form2();
            if (args.Contains("/s") && args.Contains("/t"))
            {
                var index = Array.IndexOf(args, "/t");
                tmr = new System.Threading.Timer(x =>
                {
                    f.ShutDown();
                    tmr.Dispose();
                    tmr = null;
                }, null, int.Parse(args[index + 1]), 0);
            }
            Application.Run(f);
        }
    }
谢谢你的回答,这样确实实现了/s/t的效果 但程序不只有这两个参数 如果使用args.Contains("/s") && args.Contains("/t")判断 排列组合会非常多 我认为不现实 但我不知道原来程序是不是基于此逻辑实现,我想问下有没有更好的办法
qq_30335331 2018-02-19
  • 打赏
  • 举报
回复
谢谢各位的回答,但都没有回答到点上 首先 shutdown.exe 是windows自带的命令行程序,我这里只是拿他举个例子,我要实现这样的效果 这个程序接受到的参数是一个数组 其中有/代表命令 /后面代表具体的值 比如/t 500 就是时间是500秒 /s表示关机 而且 /s /t 500 和 /t 500 /s 等效 我想知道除了使用大量的分支语句之后,有没有更好的处理方式?? 请大神赐教
  • 打赏
  • 举报
回复
这里假设 Form2 定义了一个 ShutDown 方法。你的问题主要是要理解处理参数的方式,至于说是 Form2 定义 ShutDown 还是别的代码来实现,你自己考虑。
  • 打赏
  • 举报
回复
举一个 /s /t 的例子,可以这样
    static class Program
    {
        static System.Threading.Timer tmr;

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var f = new Form2();
            if (args.Contains("/s") && args.Contains("/t"))
            {
                var index = Array.IndexOf(args, "/t");
                tmr = new System.Threading.Timer(x =>
                {
                    f.ShutDown();
                    tmr.Dispose();
                    tmr = null;
                }, null, int.Parse(args[index + 1]), 0);
            }
            Application.Run(f);
        }
    }

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧