设置SUBST时避免不必要的SUBST /D

设置SUBST时避免不必要的SUBST /D

如何重新编码

subst P: /D
subst P: D:\mydir

这样第二次运行就不会不必要地删除驱动器,即如果驱动器已经替换到该路径?

暂时移除驱动器会干扰我监视该驱动器的资源管理器视图。

答案1

好的,所以你肯定需要全面检查 P: 是否重定向到 D:\mydir

您可以这样做(保存为批处理文件):

@echo off
subst | findstr /C:"P:\\: => D:\\MYDIR" 1> nul
if errorlevel 1 (
  echo. P-drive not mapped to D:\mydir
  echo. remapping P:\
  subst P: /D 1> nul
  subst P: D:\mydir
) else (
  echo. P-drive already mapped to D:\mydir
)

它使用命令subst和检查findstr是否P:已经映射到D:\mydir
(请注意双倍的\ 在检查中用findstr)
(另请注意,subst始终返回路径全部大写

  • 如果P:\: => D:\MYDIR不存在subst那么我们需要重新映射。
  • 删除subst P: /D 1> nul当前P:
    (并且如果P:未映射则隐藏任何错误消息)
  • 然后subst P: D:\mydir我们映射驱动器
    (不会出现错误消息,因为我们刚刚删除了任何 P 映射)
  • 如果你不想要回显线,你可以删除它们

请检查您的输出,subst看它是否与我在此处使用的格式相对应。因此:(
P:\: => D:\MYDIR
如果不是,请相应地调整批处理文件)

编辑:
这是一个修订版(并已参数化)。您可以这样调用它remap P: D:\mydir。新版本不区分大小写。它在参数中添加了双 \ findstr。它会预先检查目录是否存在(可能不包含尾部斜杠)。

@echo off
if "%2"=="" (
  echo. Call with: %0 drive: destination-direcory
  exit/b
)
if not exist "%2\." (
  echo. The destination directory does not exist
  exit/b
)
SET drive=%1\\
SET dest=%2
SET dest=%dest:\=\\%
subst | findstr /I /R /C:"^%drive%: => %dest%$" 1> nul
if errorlevel 1 (
  echo. %1-drive not mapped to %2
  echo. remapping %1
  subst %1 /D 1> nul
  subst %1 %2
) ELSE (
  echo. %1-drive already mapped to %2
)

相关内容