我想捕捉转义字符,如 ctrl + z ctrl + a 等等。
当我们按下这些转义组合时,提示会显示^Z
^A
,但当我尝试将它们用作变量的值时,代码无效。
set /p "input=> "
echo/%input%
当我输入转义字符时,上面的代码显示为%input%
输出,变量为空。
那么,有没有办法抓住它们?或者这是不可能的?
答案 0 :(得分:2)
可以使用^A
,^B
,^G
以及另外一组字母(^
通过ctrl+letter
实现)。请注意,^Z
和^C
无法使用,或者至少不能使用此方法。
当我需要在我的一个批处理程序中输出声音时,我的情况非常类似。您可以通过临时文本文件执行此操作:
C:\> Echo ^A > tmp.txt
C:\> set /p ctrl_A=<tmp.txt
C:\> Echo ^G > tmp.txt
C:\> set /p ctrl_G=<tmp.txt
C:\> del tmp.txt
C:\> Echo %ctrl_A%
☺
C:\> Echo %ctrl_G%
C:\> Rem In above double blank you should hear a beep from your computer.
这就是我在程序中使用声音的方式。请注意,每当您在代码中看到^
时,请记住ctrl+letter
。
现在要在批处理文件中使用它,您需要使用记事本。
Echo ^G > tmp.txt
Notepad tmp.txt
del tmp.txt
并退出cmd 瞧,你可以在CMD和BATCH中使用这些特殊功能!
希望这有帮助,莫娜。
答案 1 :(得分:1)
您的代码
set /p "input=> "
echo/%input%
如果代码后面至少有一个字符(也可能是空格),似乎有用(例如尝试输入Hello^G World
(使用Ctrl-G生成^G
)。它会产生“Hello World”加上一声哔哔声。
Hello World^G
不起作用,Hello World^G<space>
可以。
答案 2 :(得分:1)
如果你想要抓住这些按键,你需要一个外部程序,你可以编写自己的密钥输入而不用XCOPY
。
这可以捕获几乎所有字符,但不能捕捉光标键或F1..F12
@echo off
:loop
set "key="
for /F "usebackq delims=" %%L in (`xcopy /L /w "%~f0" "%~f0" 2^>NUL`) do (
if not defined key set "key=%%L"
)
setlocal EnableDelayedExpansion
set "key=!key:~-1!"
echo '!key!'
endlocal
goto :loop