将最后使用的目录保存到环境变量

将最后使用的目录保存到环境变量

在 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 或在任务管理器中结束其任务),它将不会运行您的退出命令。

进一步阅读:

相关内容