AutoHotKey的"%UserInput%"功能是否有严重错误?它没有逃脱,或者似乎允许我逃脱双引号



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

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

测试输入为:

test1 " test2

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

Run %ComSpec% /c "php "C:a pathto mytest.php" "--query=%UserInput%" "--skip-multiples""
Run %ComSpec% /c "php "C:a pathto mytest.php" --query="%UserInput%" "--skip-multiples""
Run %ComSpec% /c "php "C:a pathto mytest.php" "--query="%UserInput%"" "--skip-multiples""
Run %ComSpec% /c "php "C:a pathto mytest.php" --query=""%UserInput%"" "--skip-multiples""
Run %ComSpec% /c "php "C:a pathto mytest.php" "--query=""%UserInput%""" "--skip-multiples""
Run %ComSpec% /c php "C:a pathto mytest.php" --query=%UserInput% --skip-multiples
Run %ComSpec% /c php "C:a pathto mytest.php" "--query=%UserInput%" --skip-multiples

绝对没有任何效果。在cmd中运行它.exe(不以任何方式涉及AutoHotKey(有效,因此这对我来说不是问题:

%ComSpec% /c "php "C:a pathto mytest.php" "--query=test " test" "--skip-multiples""

请注意,我是如何在查询字符串中的" 之前手动添加 \ 的?是的。。。AutoHotKey不会这样做。我已经阅读了无数个小时的手册,它对此只字未提 - 只是"使用双双引号",这显然不起作用。

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

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

(如果用户输入碰巧不包含任何 " 字符,则它有效。

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

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

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

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

相关内容

最新更新