我将在 CMD 中使用什么命令来获取程序的所有可用开关/参数?例如,程序abc.exe
可能有一个开关,/o
用于以离线模式启动程序。假设我不知道该/o
开关,我需要在命令提示符获取此信息?
编辑:
我还想补充一点,我知道如何找到正在运行的程序中已经使用的开关和参数 - 这不是我想要的。我想获取程序的所有可用命令行参数,无论它是否正在运行。
答案1
除了已经提到的/?
、--help
阅读文档和谷歌搜索之外,没有标准的方法可以做到这一点。不幸的是,一些程序没有很好地记录它们的开关 - 几乎无法对这些开关做任何事情。
原因如下:每个程序都以完全不同的方式分析其命令行,甚至拥有开关也只是一种协议,即最多作者倾向于遵循:有些有 /dos 样式开关,有些是 -uNIX 样式,有些使用 --gnu-long-style=switches,有些则根本不理解,将他们看到的第一件事作为文件名。
因此,参数分析是程序代码的一部分,因此要知道程序实际接受哪些参数,您需要阅读其源代码,而通常您甚至没有。
唯一的其他选择是反汇编相关程序。反汇编基本上就是逐条指令地拆开程序,试图弄清楚它试图做什么以及如何做。这需要花费大量时间,而且很难学。
有时,您可以使用十六进制编辑器打开程序并搜索您知道的命令(通常在接近末尾的某个地方),然后尝试附近任何看起来像开关的东西。
答案2
大多数程序都会接受/?
或-?
开关,以便您查看命令将接受哪些参数。一些基于 GNU 或 *nix 的实用程序(通俗地说,该程序主要面向 Linux 用户,但也可用于其他平台)需要您添加,--help
以便它为您提供简要的文档。
当然,当一切都失败时,您只需使用文档即可。
要查找正在运行的程序所使用的开关,您可以使用 Process Explorer 或 Process Hacker,甚至可以使用命令行,如相关问题。
答案3
微软实际上已经制作了一个非常有用的工具,它涵盖了一些 shell 中的内置命令(bash、zsh、fish、pwsh、powershell - 但不包括“cmd”或令人困惑的、几乎相同但肯定不同的“Windows 终端”)。
它不适用于一般程序,因为程序可以自由地为命令行参数发明任何他们喜欢的语法(微软在给我们 %0、%1 等时显然忘记了这一点,但没有办法获取未解析的完整字符串,这使得在脚本中正确传递参数几乎不可能;这实际上是我目前遇到的问题,也是我偶然发现这个页面的原因)。
MS 在设计这个东西时显然考虑到了开发人员(而且只是我们中的一小部分),因为他们将它做成了一个节点包。如果您想尝试它,可以从 nodejs.org 获取节点,安装它,然后运行“npm install -g @microsoft/inshellisense”,然后运行“inshellisense bind”。然后您就设置好了,但您仍然需要在下次进入 shell 时按 CTRL+a 来激活它(上面的 bind 命令设置了这个键盘快捷键)。
它对于它支持的 shell 非常有用(以及一些不属于标准安装但开发人员非常常用的程序,例如 git),请参阅上面 github 页面上的动画/演示,但我希望他们支持“cmd”,因为我发现 PowerShell 在审美上令人不悦,我拒绝将它用于任何没有它就可以完成的事情... 它那极其笨重、冗长的语法和为最微小的事情无休止地输入内容并不适合我。