如何重新编码
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
)