是否有自动运行cmd.exe的autoexit?


2

在Windows中,当您autorun在注册表项中创建一个值HKEY_CURRENT_USER\Software\Microsoft\Command Processor并将其设置为,例如echo Hello from autorun,调用cmd.exe将在调用时首先执行该行。

autoexit在关闭cmd.exe时是否有类似的值?

我曾尝试autoexit, autoclose, autoquit, exit, onexit, onquitquit没有运气。

我想要实现的是cmd.exe通过将(虚构的)autoexit注册表值设置为退出时保存当前目录setx _LAST_DIR "%cd%",以便我可以在下次调用时使用cd "%_LAST_DIR%"或在输入框设置为的Command prompt Last Dir.lnk文件中调用它。Start in%_LAST_DIR%

我目前的解决方案是在一个批处理文件PATHmyexit.cmd

@setx _LAST_DIR "%CD%"
@exit

如果我想保存目录,我必须记住调用而不是退出。

Answers:


0

你要做的事实上并不需要你所要求的东西,也不能解决所提供的解决方法,因此我将其分为两部分。

将上次使用的目录保存到环境变量中

使用以下内容创建批处理文件:

@CD /D %*
@>nul setx _LAST_DIR "%CD%"

将AutoRun设置为以下内容:

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命令的宏
    • $TDOSKEY等价的&,用于分隔多个命令。$*DOSKEY相当于%*和保存所有的传递给宏的参数。
    • 宏将关闭ECHO以减少混乱,更改目录,设置环境变量,然后ECHO重新打开。
    • 由于我们在DOSKEY宏中使用批处理文件,我们可以使用该%CD%变量为我们提供完整的目录路径和错误帐户。

进一步阅读:

AUTOEXIT

此部分不能满足您的需求,但使用类似搜索术语的其他部分可能会发现它很有用。

据我所知,此选项不存在,Microsoft的文档中未提及。这是一个潜在的工作。

警告:如果您不理解它,请不要使用此代码,因为最终会出现无限循环的命令提示启动。在用于任何生产环境之前,应对其进行全面测试。

使用以下代码创建批处理文件并将其设置为AutoRun:

@cls
@cmd /d
<exit commands here>
@exit

细分:

  • @如您所知,每行开头的字符将隐藏命令本身并仅显示任何输出。这是为了减少混乱。
  • cls将清除包含Windows版本和版权信息的标题。如果要从两个控制台中清除它,可以用以下命令替换下一个命令cmd /d /k
  • @cmd /d将在此内部启动一个新的(子)命令提示符并保持打开状态,以便您运行您选择的任何命令。该/D开关告诉命令提示符下使用自动运行。
  • 当子命令提示符退出时,它将继续运行此批处理文件。
  • <exit commands here>应该用你想要运行的任何命令替换。这将无法访问子命令提示符本地的任何环境变量或变量更改。甚至SETX只会应用于将来的命令提示,但不会传递回父命令提示符。

注意:如果命令提示符异常终止(通过单击窗口中的红色X或在任务管理器中结束它的任务),它将不会运行退出命令。

进一步阅读:


1
不要认为它有效。cmd /d启动一个新的子shell,并在返回时将父shell %CD%恢复到调用之前的状态cmd /d
亨利克詹森

1
不保存完整路径,只保存当前目录的名称。所以假设cd = C:\ USers \ Henrik \ cd test_lastdir&&exit工作,但cd test_lastdir\subdir&&exit失败了。
亨里克·延森

1
Rev.7现在似乎工作了,除了包含空格的目录。只需要在批处理文件中用%引号括起%CD%。伟大的工作Worthwelle。不允许自己这样做,因为系统需要至少6个字符的变化而且变化只有2.
Henrik Jensen

当然这仅在使用cd时有效。其他可能更改目录的工具,如pushd / popd或3rd。派对工具不起作用。
亨利克詹森

编辑我之前的评论。如果可以,我会投票给你答案。(不到15声望)。关于此解决方案的退回, - 这仅在使用cd时有效。其他可能更改目录的工具,如pushd / popd或3rd。派对工具不起作用。但是对于模仿bash来说.bash_logout这是一个很好的折衷方案,这实际上就是我正在寻找的东西。s/%CD%/"%CD%"/添加更改后,我会接受解决方案。努力工作和努力。PS。什么是愚蠢的规则,评论只能编辑5分钟。?
亨利克詹森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.