![](/img/trans.png)
[英]How to pass special character ('-' for example) as an argument in command line in windows?
[英]Pass a string containing the * (asterisk) character as a command line argument in Windows Shell
我正在寻找一种通过命令行将包含“ *”字符的字符串传递给可执行文件的方法。
command.exe 3*2
我想传递字符串3 * 2。 Windows要做的是在当前目录中搜索与文件掩码“ 3 * 2”匹配的文件,并将找到的所有文件传递给command.exe。
在双引号之间放置“ 3 * 2”没有帮助,仍然是同样的问题。
我还尝试了“ 3 * 2”(在单引号之间),但是随后传递了整个字符串(包括单引号),这不是我所需要的。
是否可以将字符串3 * 2(不带引号)传递给命令?
在Windows命令外壳程序中,您执行的命令负责扩展参数中存在的所有通配符。 这种行为不同于Unix和朋友,后者通配符扩展通常由Shell完成。
一个简单的例子说明了这一点。
Windows(Windows 7):
C:\Users\Frank>echo *
*
如您所见,该命令输出的参数与命令行所传递的完全相同。
Linux(在CentOS Linux 5上为bash):
> echo *
centos-release-5-0.0.el5.centos.2.i386.rpm centos-release-notes-5.0.0-2.i386.rpm glibc-2.5-12.i386.rpm glibc-common-2.5-12.i386.rpm virtualmin-install.log
此处,外壳程序将通配符参数替换为当前目录中的文件/目录列表。
因此,如果您的可执行文件通过扩展通配符来处理通配符,那么您将无能为力。 具体行为取决于您的命令。
如果您提供有关命令以及要实现的目标的更多详细信息,我们可能会提供更多帮助。
Windows实际上将整个原始命令行作为单个字符串传递给程序。 参见GetCommandLine 。 当您编写main(int argc, char **argv)
时,程序链接到的C运行时库负责将命令行拆分为argv
单词。
因此, 我们需要更多信息 :您的shell是什么,如何调用命令,以及正在使用的C运行时库? 您所看到的问题绝对不是Windows本身,在这里我无法使用cmd.exe和MSVC的CRT复制它。
C:>type CON > test.c #include <stdio.h> int main(int argc, char **argv) { int i; printf("%d\n", argc); for (i = 0; i < argc; i++) printf("[%d] <%s>\n", i, argv[i]); return 0; } ^Z C:\>cl test.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. test.c Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:test.exe test.obj C:\>test.exe * 2 [0] <test.exe> [1] <*> C:\>
如果我使用Cygwin的CRT,并从Cygwin的Bash shell运行,那么我也看不到任何问题。
C:\>C:\cygwin\bin\bash -l $ cd /cygdrive/c $ cc test.c $ ./a.exe '*' 2 [0] <./a> [1] <*> $
只有当我尝试将它们混合在一起时-使用来自cmd.exe的Cygwin的CRT运行程序-可能会看到您的问题
$ exit C:\>a.exe * 19 [0] <a> [1] <AUTOEXEC.BAT> [2] <BOOT.INI> [3] <CONFIG.SYS> [4] <Documents and Settings> [5] <IO.SYS> [6] <MSDOS.SYS> [7] <NTDETECT.COM> [8] <NTLDR> [9] <Program Files> [10] <RECYCLER> [11] <Recycled> [12] <System Volume Information> [13] <WINDOWS> [14] <cygwin> [15] <hiberfil.sys> [16] <pagefile.sys> [17] <temp> [18] <a.exe> C:\>
但我看不到双引号有问题。
C:\>a.exe "*" 2 [0] <test.exe> [1] <*> C:\>
你可以尝试转义
command.exe 3^*2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.