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&
。通过使用反斜杠转义包含文字引号。这些是您必须记录的唯一规则。