是的,现在是 2021 年,我仍在使用 CMD shell 和批处理脚本来完成简单的任务。我最近刚刚尝试通过为(每个)CMD 提示会话自动运行我自己的初始化脚本来增强我的工作流程,其中还包括设置一堆 DOSKEY 宏。
所以这是与其他人所做的类似的设置。[1]
在新脚本出现奇怪问题后,我意识到,当从具有活动宏的修改后的 shell 执行时,DOSKEY 宏可以使用“SET /P”命令破坏批处理脚本中的交互式提示。
尝试这样的事情(在提示符下输入显示在 [] 之间的文本 + 按 <enter>):
@ECHO OFF
DOSKEY print=ECHO $*
SET /P var=Enter [print Hallo]:
ECHO var: %var%
EXIT /B 0
您将看到,prompt 变量包含由 DOSKEY 宏 ('ECHO Hallo') 创建的命令提示符。
通常 DOSKEY 不应该在批处理文件 [2][3] 中工作/可用,因为它仅适用于交互式提示 [4]。但是“SET /P”似乎算作一个交互式shell,所以DOSKEY替换了所有输入的内容,以定义的宏关键字开头。
好吧,这对我来说似乎是一个错误(DOSKEY 现在已经 30 岁了,顺便说一句 [6]),但我在网上找不到任何关于这个问题的信息。所以,我在想如何解决这个问题。由于宏不能轻易停用/删除 [5],因此从任何会提示的批处理文件中修复此问题会很麻烦。
我的 init-script 也只为交互式会话运行,所以当您直接(单独)运行批处理脚本时,这不是问题。
在装有“Windows 7 Home Premium SP1”的机器上测试。