执行程序携带参数
在可执行程序(.exe)执行时携带多个参数,可通过以下多种方式实现,具体方法根据使用场景和参数特点选择:
命令行直接传递参数
基本格式
在命令提示符中通过 空格分隔多个参数,格式为:
cmd1 2 3
| executable.exe param1 param2 param3
|
示例:ylf.exe -p 8080 -h USER1 -t 8,程序通过 argc 和 argv 接收参数
处理含空格的参数
若参数值包含空格,需用 双引号包裹:
cmd1 2 3
| executable.exe "param with space" "another param"
|
如传递路径 "C:\Program Files\data.txt"
快捷方式属性
右键创建.exe的快捷方式 → 右键快捷方式选择“属性” → 在“目标”字段末尾追加参数:
text1 2 3
| "C:\path\to\executable.exe" param1 param2
|
双击快捷方式即自动传递参数
编程调用时传递参数
C/C++ 中使用 ShellExecuteEx
通过设置 lpParameters 传递参数,多个参数以空格分隔:
1 2 3
| SHELLEXECUTEINFO ShellInfo; ShellInfo.lpFile = _T("D:\\test\\image.exe"); ShellInfo.lpParameters = _T("file1.txt file2.txt");
|
适用于Windows API调用
Java 使用 ProcessBuilder
通过 add 方法逐个添加参数:
1 2
| ProcessBuilder pb = new ProcessBuilder("executable.exe", "arg1", "arg2"); Process process = pb.start();
|
支持动态构建参数列表
Go 语言处理参数
使用 flag 包解析命令行参数:
1 2 3
| name := flag.String("name", "default", "Description") flag.Parse() fmt.Println("Hello,", *name)
|
运行示例:app.exe -name=Alice
注意事项
- 参数顺序和格式:程序需按预期顺序解析参数,如
-p 8080 表示端口号。
- 特殊字符处理:包含空格、引号等字符时需严格使用转义或包裹语法。
- 跨平台差异:Linux/macOS 参数规则类似,但路径和转义符可能不同
编写携带多个参数的exe程序
示例程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| #include <stdio.h> #include <string.h> #include <stdbool.h>
void print_help() { printf("Usage: program.exe [options] \"arguments with spaces\"\n"); printf("Options:\n"); printf(" -h, --help Show help\n"); printf(" -f <file> Specify file path (supports spaces)\n"); printf(" -m <message> Set message text\n"); }
int main(int argc, char *argv[]) { char *filepath = NULL; char *message = NULL; bool verbose = false;
for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { print_help(); return 0; } else if (strcmp(argv[i], "-f") == 0) { if (i + 1 < argc) { filepath = argv[++i]; printf("File path: %s\n", filepath); } } else if (strcmp(argv[i], "-m") == 0) { if (i + 1 < argc) { message = argv[++i]; printf("Message: %s\n", message); } } else if (strcmp(argv[i], "-v") == 0) { verbose = true; } else { printf("Raw argument[%d]: %s\n", i, argv[i]); } }
if (verbose) { printf("\nVerbose mode:\n"); printf("Total arguments: %d\n", argc); for (int i = 0; i < argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } }
return 0; }
|
编译后测试用例:
- 普通参数:program.exe -f test.txt -m hello
- 带空格参数:program.exe -f “C:\My Documents\file.txt” -m “Hello World”
- 混合参数:program.exe -v -m “Test Message” -f “D:\Data Files\config.ini”
提供程序:
bin程序转hex: