【问题标题】:Print double quotations with WshShell.Sendkeys and windows batch使用 WshShell.Sendkeys 和 windows 批处理打印双引号
【发布时间】:2018-04-23 18:37:19
【问题描述】:

我有一个脚本可以更改用户目录并使用命令预填充输入,因此他只需在按 Enter 之前查看并更改值。将要写入的命令需要双引号,我无法让它在输入中打印出来。我尝试了各种转义字符,如 ^"、\"、""、""" 和 {"},但我没有让它们工作。我为此使用了 WshShell,但如果无法使用它并且有更好的方法可以解决这个问题,那么我会全力以赴。

目标是用户将在命令窗口中看到:

command.exe parameter="hello" parameter2="world"

.bat 文件:

@if (@CodeSection == @Batch) @then
@echo off
rem Use %SendKeys% to send keys to the keyboard buffer
set SendKeys=CScript //nologo //E:JScript "%~F0"
rem Start cmd.exe program 
start "" cmd
rem Send whatever you want to previous cmd.exe
%SendKeys% "echo Hello World!{ENTER}"
%SendKeys% "cd C:\temp{ENTER}"
%SendKeys% "command.exe parameter="hello" parameter2="world""
set /P "="
ECHO TERMINATE ORIGINAL BATCH
goto :EOF
@end
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));

batscript 来源:https://stackoverflow.com/a/22772040/1350598

【问题讨论】:

  • 这不是 sendkeys 的问题。这就是参数在传递给 jscript 时的解析方式。因此,我建议您将引号添加到其他字符,然后对您传递的参数进行替换以将该字符替换为 chr(34)。然后将该值用于发送键。
  • @Squashman 感谢您的回复和提示!我已经按照您在这里的建议进行了尝试,并尝试创建一个新变量并将 char 替换为引号而没有运气。我尝试了一些变体,但举个例子: var test = "com.exe parameter=qhelloq" replace(string, chr(34), "q") %SendKeys% test
  • 通常要替换的字符排在第一位。我从未见过它在我编程的任何语言中反转。我对 Jscript 不太熟悉,所以我可能是错的。
  • 使用%SendKeys% "'command.exe parameter=\u0022hello\u0022 parameter2=\u0022world\u0022'"并将最后一行更改为WshShell.SendKeys(eval(WScript.Arguments(0)));。请注意,您需要在所有字符串的开头添加撇号 '
  • @Aacini 谢谢Aacini!这似乎行得通!它不包括其他 sendkey 命令,例如更改文件夹,但我可以编写命令的完整路径。建议将其作为答案,我会将其标记为已解决:)

标签: windows batch-file parameters escaping wsh


【解决方案1】:

使用%SendKeys% "'command.exe parameter=\u0022hello\u0022 parameter2=\u0022world\u0022'" 并将最后一行更改为WshShell.SendKeys(eval(WScript.Arguments(0)));。请注意,您需要在所有字符串的开头添加撇号';那就是:

@if (@CodeSection == @Batch) @then
@echo off
rem Use %SendKeys% to send keys to the keyboard buffer
set SendKeys=CScript //nologo //E:JScript "%~F0"
rem Start cmd.exe program 
start "" cmd
rem Send whatever you want to previous cmd.exe
%SendKeys% "'echo Hello World!{ENTER}'"
%SendKeys% "'cd C:\temp{ENTER}'"
%SendKeys% "'command.exe parameter=\u0022hello\u0022 parameter2=\u0022world\u0022'"
set /P "="
ECHO TERMINATE ORIGINAL BATCH
goto :EOF
@end
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(eval(WScript.Arguments(0)));

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多