2017-11-10 8 views
0

私は、ユーザーのディレクトリを変更し、コマンドで入力を事前移入するスクリプトを持っているので、彼が唯一の上にそれを見て、入る押す前に値を変更する必要があります。書かれようとしているコマンドは二重引用符を必要とするので、これを入力に印刷することはできません。私は、 『『』』、「\、」^のようなエスケープ文字の様々な試みた「と{」}が、私はそれらのどれもが動作しないことを得ます。私はこのためにWshShellを使用しますが、それはそれを使用しては不可能だと、これを解決する良い方法があるのならば、私はすべての耳です。印刷二重引用符

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

の.batファイル:batscriptため

@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)); 

出典:https://stackoverflow.com/a/22772040/1350598

+0

これはsendkeysの問題ではありません。引数がjscriptに渡されたときの引数の解析方法です。だから私はあなたがCHR(34)にその文字を置き換えるために渡す他のいくつかの文字は、引数に置き換えられない引用符を作ることをお勧め。次に、その値をsendkeysに使用します。 – Squashman

+0

@Squashman返事とチップありがとう!私はあなたがここに示唆していることを追求し、新しい変数を作成してcharを運のない引用で置き換えようとしました。 var test = "com.exe parameter = qhelloq" replace(文字列、chr(34)、 "q")%SendKeys%test –

+0

通常、置き換えたい文字が来ます最初。私はそれが私がプログラムされている任意の言語で逆転見たことがありません。私が間違っている可能性がので、私はJScriptのと過度に慣れていませんよ。 – Squashman

答えて

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)));