2017-11-10 33 views
0

사용자 디렉토리를 변경하고 명령으로 입력을 미리 채우는 스크립트가있어서 enter를 누르기 전에 값을보고 변경해야합니다. 쓰려는 명령은 큰 따옴표가 필요하므로 입력 내용을 인쇄 할 수 없습니다.^", \", "", "" "및 {"} 같은 다양한 이스케이프 문자를 시도했지만 그 중 아무 것도 작동하지 않습니다. 나는 이것을 위해 WshShell을 사용한다. 그러나 그것을 사용하는 것이 가능하지 않다면이 문제를 해결할 더 좋은 방법이있다. 그러면 나는 모든 귀이다.WshShell.Sendkeys 및 windows 배치로 큰 따옴표를 인쇄하십시오.

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

박쥐 파일 : 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

@ 스쿼시 만 답변 및 팁 주셔서 감사합니다! 나는 여기서 여러분이 제안한 것을 추구하고 새로운 변수를 만들고 char를 운행없이 인용 부호로 대체하려고 시도했습니다. var test = "com.exe parameter = qhelloq"replace (string, 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)));