有没有办法使用set / p将变量设置为转义字符?

时间:2014-02-23 06:03:55

标签: batch-file

我想捕捉转义字符,如 ctrl + z ctrl + a 等等。 当我们按下这些转义组合时,提示会显示^Z ^A,但当我尝试将它们用作变量的值时,代码无效。

set /p "input=> "
echo/%input%

当我输入转义字符时,上面的代码显示为%input%输出,变量为空。 那么,有没有办法抓住它们?或者这是不可能的?

3 个答案:

答案 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

现在要在批处理文件中使用它,您需要使用记事本。

  1. 在cmd类型Echo ^G > tmp.txt
  2. 然后输入Notepad tmp.txt
  3. 在记事本窗口中选择第一行中的所有内容,有时它将是一个大点,其他则只是四个连续的空格。无论如何复制它(确保不留任何东西)
  4. 关闭记事本,输入del tmp.txt并退出cmd
  5. 在批处理文件开始时将变量设置为剪贴板上的内容
  6. 瞧,你可以在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