在 Windows 中,当您autorun
在注册表项中创建一个值HKEY_CURRENT_USER\Software\Microsoft\Command Processor
并将其设置为时,echo Hello from autorun
调用 cmd.exe 将在调用时首先执行该行。
关闭 cmd.exe 时是否有等效autoexit
的值可以运行?
我已尝试过autoexit, autoclose, autoquit, exit, onexit, onquit
,但quit
没有成功。
我想要实现的是cmd.exe
通过将(假想的)autoexit
注册表值设置为来在退出时保存当前目录setx _LAST_DIR "%cd%"
,以便我可以在下次调用时cd "%_LAST_DIR%"
或在输入框设置为的Command prompt Last Dir.lnk
文件中调用它。Start in
%_LAST_DIR%
PATH
我当前的解决方案是在,中有一个批处理文件myexit.cmd
:
@setx _LAST_DIR "%CD%"
@exit
如果我想保存目录,我必须记住调用而不是退出。
答案1
您尝试做的事情实际上并不需要您所要求的内容,并且不适用于提供的解决方法,因此我将其分为两部分。
将最后使用的目录保存到环境变量
使用以下内容创建批处理文件:
@CD /D %*
@>nul setx _LAST_DIR "%CD%"
将自动运行设置为以下内容:
CD /D %_LAST_DIR%&doskey cd=@ECHO off$T<FILENAME> $*$T@ECHO on
哪儿<FILENAME>
是完整路径到您刚刚创建的批处理文件。或者,在变量中列出的目录中创建批处理文件,PATH
这样您就可以使用文件名。
细分:
- 这是多个命令,以字符分隔
&
,允许命令按顺序运行。 CD /D %_LAST_DIR%
将目录更改为环境变量的内容_LAST_DIR
。该/D
开关用于允许更改为不同驱动器上的目录。doskey cd=@ECHO off$T<FILENAME> $*$T@ECHO on
创建一个DOSKEY
可执行多项操作的宏。doskey cd=
将创建一个宏来替换默认的 CD 命令$T
相当于DOSKEY
并&
用于分隔多个命令。$*
相当于DOSKEY
并%*
保存传递给宏的所有参数。- 为了减少混乱,宏将关闭
ECHO
,更改目录,设置环境变量,然后ECHO
重新打开。 - 由于我们在宏中使用批处理文件
DOSKEY
,因此我们可以使用该%CD%
变量来提供完整的目录路径并解释错误。
进一步阅读:
自动退出
这部分并不能满足您的要求,但其他使用类似搜索词的人可能会发现它很有用。
据我所知,此选项不存在,也没有在微软的文档。这是一个潜在的解决方法。
警告:如果您不理解此代码,请不要使用它,因为您最终可能会陷入无限循环的命令提示符启动。这应该是彻底在用于任何生产环境之前都经过测试。
使用以下代码创建一个批处理文件并将其设置为自动运行:
@cls
@cmd /d
<exit commands here>
@exit
细分:
@
正如您所知,每行开头的字符将隐藏命令本身并仅显示任何输出。这是为了减少混乱。cls
将清除包含 Windows 版本和版权信息的标题。如果您想从两个都控制台,您可以用 替换下一个命令cmd /d /k
。@cmd /d
将在此命令提示符内启动一个新的(子)命令提示符,并保持打开状态,以便您运行您选择的任何命令。开关/D
告诉命令提示符不是使用自动运行。- 当子命令提示符退出时,它将继续运行该批处理文件。
<exit commands here>
应替换为您想要运行的任何命令。这将无法访问子命令提示符本地的任何环境变量或变量更改。甚至SETX
仅适用于未来的命令提示符,但不会传递回父命令提示符。
笔记:如果命令提示符异常终止(通过单击窗口中的红色 X 或在任务管理器中结束其任务),它将不会运行您的退出命令。
进一步阅读: