为什么我的 Windows 7 上的 .BAT 文件不能正确暂停?

为什么我的 Windows 7 上的 .BAT 文件不能正确暂停?

我已经在计算机上尝试编写批处理文件一段时间了,我很困惑为什么 PAUSE 不像我想象的那样工作(也许我只是做错了,只是真的很困惑)。

基本上我有:

@echo off
echo Hello!
pause
echo Hi again!
pause
echo HEY HEY!!
pause

当它运行时我得到:

Hello!
Press any key to continue...

然后我只要按一个键就会发生这种情况:

Hi again!
Press any key to continue...
HEY HEY!!
Press any key to continue...

我不明白为什么它会跳过第二次暂停......我注意到如果我这样做:

@echo off
echo Hello!
pause
echo Hi again!
pause
pause
echo HEY HEY!!
pause

然后它会在“Hi again!”处暂停,而不是不暂停地执行它(但是它会连续两次打印“按任意键继续...”)

我真的很迷失,无法继续我的生活,直到我知道为什么会这样:

答案1

可能的简单解释:

如果您按下“特殊”键¹,那么发送到所选窗口中运行的软件²的“stdin”文件中的实际字符将不仅仅是一个字符,而是多个字符。

对于初学者来说,实际发送的字符取决于软件设置,也可能取决于“终端仿真”³

¹)例如 f1,...,f12,光标移动以及可能还有一些类似的功能(home,end,...?)
²)即 cmd.exe 或类似程序
³)例如古老的 ansi.sys 是否已加载


证明、创建、编译一个简单的 C 程序(Bash、gcc、Linux):

$ cat showhex.c
#包括 <stdio.h>

int main(void){

  int c=0;
  字符十六进制[] = “0123456789abcdef”;
  当(!feof(stdin)){
    c=fgetc(标准输入);
    fputc(十六进制[ (c >> 4) & 0x0f], stdout);
    fputc(十六进制[ c & 0x0f],stdout);
    fputc(' ', stdout);

  }
}

$ gcc -o showhex showhex.c

$ chmod 755./showhex

$ ls -hl 显示十六进制
-rwxr-xr-x 1 hannu hannu 8,7K 十二月 5 23:01 显示十六进制

$./showhex
^[[
1b 5b 41 0a ^[[C
1b 5b 43 0a ^[[B
1b 5b 42 0a ^[[D
1b 5b 44 0a ff
$

按下一个键首先会显示实际的字符,然后当您按下 ENTER 时,会打印相应的十六进制代码。

按住 CTRL 并按 D(CTRL+D,bash)或 CTRL+Z,然后按 ENTER(cmd.exe)停止

上面的例子是按
光标向上,输入
光标向右,输入
光标向下,输入
光标向左,输入
CTRL+D

答案2

它按预期工作。该pause语句只是等待输入。唯一的开关是隐藏它正在等待按键的事实。

当我运行您显示的最后一个批处理文件时,我看到了以下内容:

C:\Users\asdf\Desktop>more test.bat
@echo off
echo Hello!
pause
echo Hi again!
pause
pause
echo HEY HEY!!
pause

C:\Users\asdf\Desktop>test
Hello!
Press any key to continue . . .
Hi again!
Press any key to continue . . .
Press any key to continue . . .
HEY HEY!!
Press any key to continue . . .

所以我发现很难理解你在要求什么......

相关内容