2016-02-09 2 views
0

Я запускаю Windows 10 Home Edition, и я использую AutoHotkey v1.1.23.01 в течение последних нескольких дней. У меня есть следующий сценарий:AutoHotkey: Прямые косые черты как «q» и обратная скобка в CMD

:*:dmenv:: 
Input, machine,,{Enter} 
Send, FOR /f "tokens=*" `%i IN ('docker-machine env --shell=cmd %machine%') DO `%i 
return 

Каждый раз, когда я запускаю этот скрипт из контекста ЦМД, я получаю следующий результат:

FOR qf "tokens=*" %i IN)wdocker-machine env --shell=cmd asdw(DO %i 

Как вы можете видеть, слэш (/) был заменен на q, скобки были отменены, а одинарные кавычки (') были заменены на w.

Может ли кто-нибудь сказать, что мне здесь не хватает? Я уже пробовал проверять другие программы (например, Notepad ++, Explorer и т. Д.), И этот скрипт работает везде, кроме CMD.

Я попытался ускользнуть от символов, используя обратную схему, как это предлагает документация AHK, и преобразование файла в UTF-8 через Notepad ++. Кроме того, я пробовал использовать обходы, такие как chr(47) и Clipboard = code без всякой удачи.

Final Примечание:

Я просто понял, что, когда я изменить свой язык к СЭП, и писать dmenv, чтобы запустить сценарий, он работает: FOR /f "tokens=*" %i IN ('docker-machine env --shell=cmd asdf') DO %i

Почему это происходит?

ответ

2

Ваша раскладка клавиатуры не английская, а cmd.exe.

При переключении языка окна на английском языке перед запуском send, она будет работать (обратите внимание, что переключение языков может быть сделано AHK/DLL вызовов)

Вы можете, однако, использовать следующий метод обхода вместо: (проверено на Win10)

:*:dmenv:: 
Input, machine,,{Enter} 
text = FOR /f "tokens=*" `%i IN ('docker-machine env --shell=cmd %machine%') DO `%i 
clp_bck := clipboardAll 
clipboard := text 
send ^v ; use ctrl v to send the text 
clipboard := clp_bck 
return 
+0

Благодарим за быстрый ответ, но CMD не вставляет содержимое буфера обмена. Написание 'dmenv' в CMD после обновления моего скрипта с вашим предложением просто выводит:'^v' – spongeworthy

+0

@GSWV Затем вместо '^ v' используйте send' {ctrl v} 'или любую команду, которая запускает команду вставки. – 2501

+1

После небольшого поиска, основанного на ответе @ 2501, я нашел следующий формат, который работал для меня в cmd: 'send^{vk56}; ключевой идентификатор, используемый для решения проблемы с выпуском cmd. – spongeworthy

 Смежные вопросы

  • Нет связанных вопросов^_^