一进“dos”就自动进入上次的目录

这个原来在别的地方发过,但是后来发现有bug,处理windows下带有空格的长文件夹会出错。因为原来那个帖子已经不能编辑了,所以修改后写在这里。

这里的“dos”,就是windows下的命令行窗口,所以加上引号。缺省是一打开就自动进入C:\Users\foo的目录,但是我常用的目录往往是别的。所以想,最好每次打开时都自动进入上次退出时所在的目录。

这个程序的另外一个功能就是实现键入cd - 时,进入上次的目录。(实际上我是先在网上找到这个cd - 的代码,在此基础上修改的。)

花了不少时间做这个程序,主要是dos批处理的功力太浅,不过dos批处理感觉也确实太坑爹。这个需求似乎是用dos批处理来做最合适,所以不得不硬着头皮做了出来,以后dos批处理能不碰就不碰。

程序包括3个文件。一个是注册表文件autorun.reg,内容是:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"AutoRun"="C:\\code\\autoCmd\\autocmd.cmd"

一个是命令文件autocmd.cmd,代码是:

@echo off
if exist C:\code\autoCmd\oldFolder.txt (
  for /f "delims=" %%i in (C:\code\autoCmd\oldFolder.txt) do (
    set OLDPWD=%%i
    goto BREAK1
  ) 
  :BREAK1
  if exist "%OLDPWD%" (
     cd /d "%OLDPWD%"
     set OLDPWD="%CD%"
  )
)
doskey cd=C:\code\autoCmd\cd2 $*

最后一个是dos批处理文件cd2.bat,代码是:

@echo off
if "%*"=="" cd & exit /b
if "%*"=="-" (
       cd /d "%OLDPWD%"
       echo %OLDPWD% >C:\code\autoCmd\oldFolder.txt
       set OLDPWD="%cd%"
) else (
    cd /d %*
    if not errorlevel 1 (
       set OLDPWD="%cd%"
       for %%I in (.) do (
           echo %%~fxI>C:\code\autoCmd\oldFolder.txt
       )
       doskey /history >C:\code\autoCmd\oldCmd.txt
    )
)

其中最后一句doskey /history >C:\code\autoCmd\oldCmd.txt不是必须的,这里只是为了保存历史,以便以后分析整理。

使用时,先插入windows注册表,然后将所有文件放在一个目录下(如上面的c:\code\autoCmd),就可以了。oldFolder.txt保存退出命令行窗口时所在的目录,供下次打开时使用。

猜你喜欢

转载自www.cnblogs.com/badnumber/p/11198598.html