首页 > 解决方案 > AutoHotKey 的“%UserInput%”功能是否存在严重错误?它没有逃脱,或者似乎允许我逃脱,双引号

问题描述

%UserInput% 似乎只在不包含双引号 (") 时才有效。

每当 %UserInput% 包含双引号 (") 时,我通过 AutoHotKey Run 命令调用的 PHP CLI 脚本最终会将测试输入视为单独的参数,因为 AutoHotKey 只是不会转义它。

测试输入为:

test1 " test2

我已经尝试过这些以及 5 万亿个其他版本:

Run %ComSpec% /c "php "C:\a path\to my\test.php" "--query=%UserInput%" "--skip-multiples""
Run %ComSpec% /c "php "C:\a path\to my\test.php" --query="%UserInput%" "--skip-multiples""
Run %ComSpec% /c "php "C:\a path\to my\test.php" "--query="%UserInput%"" "--skip-multiples""
Run %ComSpec% /c "php "C:\a path\to my\test.php" --query=""%UserInput%"" "--skip-multiples""
Run %ComSpec% /c "php "C:\a path\to my\test.php" "--query=""%UserInput%""" "--skip-multiples""
Run %ComSpec% /c php "C:\a path\to my\test.php" --query=%UserInput% --skip-multiples
Run %ComSpec% /c php "C:\a path\to my\test.php" "--query=%UserInput%" --skip-multiples

绝对没有任何作用。在 cmd.exe 中运行它(不以任何方式涉及 AutoHotKey)可以工作,所以这对我来说不是问题:

%ComSpec% /c "php "C:\a path\to my\test.php" "--query=test \" test" "--skip-multiples""

请注意我是如何在查询字符串中的 " 之前手动添加一个 \ 的?是的...... AutoHotKey 不会那样做。我已经阅读了无数小时的手册,但它没有说明这个 - 只是“使用双双引号”,这显然是行不通的。

由于中间的双引号字符,上述所有 AutoHotKey Run 命令都会导致 PHP CLI 脚本将“test1”和“test2”视为单独的参数。它应该将其作为单个字符串接收。

同样,我可以运行上面的 cmd.exe 命令并且它可以工作,但是当我通过 AutoHotKey 运行完全相同(或无数种变体)时,它会中断。因为 AHK 不进行转义。我该如何做到这一点?

(如果用户输入碰巧不包含任何 " 字符,它可以工作。)

(如果有人对 %ComSpec% 感到困惑,那就意味着 cmd.exe。)

标签: windowswindows-10autohotkey

解决方案


在经历了地狱和回来之后,我终于想通了。您必须在运行命令之前执行此操作:

UserInput := StrReplace(UserInput, """", "\""")

是的......这是通过纯粹的猜测完成的,因为手册没有提到如何在任何地方做到这一点,而且网上的问题都没有任何理智的答案。


推荐阅读