你要做的事实上并不需要你所要求的东西,也不能解决所提供的解决方法,因此我将其分为两部分。
将上次使用的目录保存到环境变量中
使用以下内容创建批处理文件:
@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命令的宏
$T
是DOSKEY
等价的&
,用于分隔多个命令。$*
是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或在任务管理器中结束它的任务),它将不会运行退出命令。
进一步阅读:
cmd /d
启动一个新的子shell,并在返回时将父shell%CD%
恢复到调用之前的状态cmd /d
。