win中exe程序

执行程序携带参数

在可执行程序(.exe)执行时携带多个参数,可通过以下多种方式实现,具体方法根据使用场景和参数特点选择:

命令行直接传递参数

基本格式

在命令提示符中通过 ‌空格分隔多个参数‌,格式为:

cmd
1
2
3

executable.exe param1 param2 param3

示例:ylf.exe -p 8080 -h USER1 -t 8,程序通过 argcargv 接收参数

处理含空格的参数

若参数值包含空格,需用 ‌双引号包裹‌:

cmd
1
2
3

executable.exe "param with space" "another param"

如传递路径 "C:\Program Files\data.txt"

快捷方式属性

右键创建.exe的快捷方式 → 右键快捷方式选择“属性” → 在“目标”字段末尾追加参数:

text
1
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;
}

编译后测试用例:

  1. 普通参数:program.exe -f test.txt -m hello
  2. 带空格参数:program.exe -f “C:\My Documents\file.txt” -m “Hello World”
  3. 混合参数:program.exe -v -m “Test Message” -f “D:\Data Files\config.ini”

提供程序:

bin程序转hex: