在VB.NET中从命令行获取参数

5
在这个例子中,是否可能从processPath返回参数?
把这个问题说清楚一点,对不起。
Dim processName As String

Dim processPath As String

If processName = "cmd" Then
    Dim arguments As String() = Environment.GetCommandLineArgs()
    Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments))
End If

1
你是在询问如何获取某个已运行进程的命令行参数吗?(参考链接:http://blogs.msdn.com/b/oldnewthing/archive/2009/11/25/9928372.aspx) - GSerg
是的,没错!我尝试阅读了你提供的链接,但是我并没有完全理解。我会再仔细阅读一下的。谢谢。 - Polite Stranger
该链接解释了为什么你一开始就不应该这样做。但是,如果你必须这样做,你可以使用 .NET WMI 工具 中提供的 WMI 查询来运行。 - GSerg
我明白了,我会再读一遍。实际上,这不是一个不同的过程,而是相同的过程。这有什么区别吗?基本上,如果检测到cmd,我想获取路径和参数,而不是像c:\windows\system32\cmd.exe这样的东西。 - Polite Stranger
3个回答

7

实现这个的一个简单(而且干净)的方法是只需修改您的Sub Main如下:

Sub Main(args As String())
   ' CMD Arguments are contained in the args variable
   Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", args))
End Sub

谢谢。但是这对(ByRef currentProcessList() As Process)有效吗? - Polite Stranger

3
你的问题的VB.Net解决方案是使用Command() VB.Net函数来搜索并显示当前执行进程的命令行。
Sub Main(args As String())
     Dim sCmdLine As String = Environment.CommandLine()
     Console.WriteLine("CommandLine: " & sCmdLine)
     Dim iPos = sCmdLine.IndexOf("""", 2)
     Dim sCmdLineArgs = sCmdLine.Substring(iPos + 1).Trim()
     Console.WriteLine("CommandLine.Arguments: " & sCmdLineArgs)
End Sub

第一个输出将显示完整命令行及程序名称。

第二个输出将仅显示命令行,不包括程序名称。

使用args是C/C++/C#/Java技术。

使用CommandLine()函数是纯VB,并且更加直观,因为它返回用户输入的命令行,而不假定参数没有空格。

例如:

LIST-LINE 1-12, WHERE=(20-24='TYPES'),to-area=4
LIST-LINE 1 - 12, WHERE = ( 20-24 = 'TYPES' ) , to-area = 4

在这个命令的语法中,参数是用逗号而不是空格分隔的。
在这种情况下,最好不要使用与C和Unix更相关的args技术,因为命令语法接受由空格分隔的参数!

1
另一个选择。
Sub WhatEver()
    Dim strArg() as string
    strArg = Command().Split(" ")
    ' strArg(0) is first argument and so on
    '
    '
End Sub

没有很好的选项来在“ ”处分割。 如果您像这样调用一个exe: xxx.exe /Folder:“My New Folder” 在“ ”处分割会破坏一切。您还必须使用“ char”将参数保持在一起! - Mickey Mouse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接