Batch file 如何正确地转义命令行参数?

Batch file 如何正确地转义命令行参数?,batch-file,arguments,Batch File,Arguments,我正在开发一个简单的应用程序,它应该加密命令行给出的字符串,然后将其写入注册表。不幸的是,如果密码包含特殊字符,如“&|,我会遇到问题。例如: Encrypt.exe /Password:Password /reg --> works fine Encrypt.exe /Password:Password"&<>| /reg --> the password variable contains: Password&<>| /reg

我正在开发一个简单的应用程序,它应该加密命令行给出的字符串,然后将其写入注册表。不幸的是,如果密码包含特殊字符,如
“&<>|
,我会遇到问题。例如:

Encrypt.exe /Password:Password /reg       --> works fine
Encrypt.exe /Password:Password"&<>| /reg  --> the password variable contains: Password&<>| /reg which is wrong
Encrypt.exe /Password:Password&<>|        --> this outputs: "> was unexpected at this time." but no idea where this text is coming from
Encrypt.exe /Password:"Password&<>|"      --> this works, but note that the password can't contains a " char and the encrypted/decrypted string will contain a " at the beginning and at the end
Encrypt.exe/Password:Password/reg-->工作正常
Encrypt.exe/Password:Password“&|/reg-->密码变量包含:Password&|/reg,这是错误的
Encrypt.exe/Password:Password&|-->此输出:“>此时意外。”但不知道此文本来自何处
Encrypt.exe/Password:“Password&|”-->这是可行的,但请注意,密码不能包含“char”,加密/解密字符串的开头和结尾都将包含“char”

因此,我的问题是,如何将字符串
密码&
正确传递给我的应用程序?

以转义.bat文件中的某些字符:

&   use  ^&
<   use  ^<
>   use  ^>
|   use  ^|
"   use  ""
&使用^&
<使用^<
>使用^>
|使用^|
“使用”
供参考:
要转义.bat文件中的某些字符,请执行以下操作:

&   use  ^&
<   use  ^<
>   use  ^>
|   use  ^|
"   use  ""
&使用^&
<使用^<
>使用^>
|使用^|
“使用”
供参考:

不是真正的C++问题。而是一个Powershell或CMD.exe问题。在参数周围使用双引号,并将密码中的双引号反斜杠:
“password\”和“
->
password”&
@Tezirg:是的,这会起作用,但问题是,我不知道密码。用户必须输入它。注意,对于CMD,在命令行中键入的命令的转义规则与在
*.BAT
*.CMD
脚本中执行的命令的转义规则略有不同。(不确定这是否与此场景相关。)假设这是VC++,则在将命令行解析为
argv
数组时,使用双引号忽略空白。在这种情况下,双引号将不会出现在相应的
argv
元素中,即
argv[1]
将是
/Password:Password&
。通过使用反斜杠转义包含文字引号。这些是你必须记录的唯一规则,而不是真正的C++问题。而是一个Powershell或CMD.exe问题。在参数周围使用双引号,并将密码中的双引号反斜杠:
“password\”和“
->
password”&
@Tezirg:是的,这会起作用,但问题是,我不知道密码。用户必须输入它。注意,对于CMD,在命令行中键入的命令的转义规则与在
*.BAT
*.CMD
脚本中执行的命令的转义规则略有不同。(不确定这是否与此场景相关。)假设这是VC++,则在将命令行解析为
argv
数组时,使用双引号忽略空白。在这种情况下,双引号将不会出现在相应的
argv
元素中,即
argv[1]
将是
/Password:Password&
。通过使用反斜杠转义包含文字引号。这些是您必须记录的唯一规则。