Windows 删除subst命令中的尾随\项
我已通过HKCR\Drive\shell\MapLocalDriveHere\command中的注册表将命令添加到上下文菜单中,以便在右键单击驱动器时。我希望它将我右键单击的驱动器的名称命名为“C:”而不是“C:\”,因为这会导致我尝试运行的命令出现问题Windows 删除subst命令中的尾随\项,windows,batch-file,variable-expansion,Windows,Batch File,Variable Expansion,我已通过HKCR\Drive\shell\MapLocalDriveHere\command中的注册表将命令添加到上下文菜单中,以便在右键单击驱动器时。我希望它将我右键单击的驱动器的名称命名为“C:”而不是“C:\”,因为这会导致我尝试运行的命令出现问题 cmd /c subst %1 /D 这扩展到: cmd /c subst C:\ /D 命令失败(它需要subst C:/D)。如何在没有尾随\的情况下获取参数,或将其删除%d1和%1不要从注册表项展开,键入REG\u expand\u
cmd /c subst %1 /D
这扩展到:
cmd /c subst C:\ /D
命令失败(它需要subst C:/D
)。如何在没有尾随\的情况下获取参数,或将其删除%d1
和%1
不要从注册表项展开,键入REG\u expand\u SZ
您可以通过查看项目源代码(尤其是此文件:)更好地理解我试图做的事情。您将使用
%%~d
参数进入for/f
循环,驱动器号带有冒号:
FOR /f "delims=" %%a IN ("%~1") DO cmd /c subst %%~da /D
嗯。。。让我们结合captcha和npocmaka答案的最佳功能。不需要中间变量,也不需要for语句:
cmd /c subst %~d1 /D
出于某种原因,我必须切换到
%V
,而不是%1
,才能在注册表中解决此问题:
cmd /c mapdrive.bat ""%V"" /D
HKCR,Drive\Shell\MapLocalDriveHere\command,,0x00020000,"cmd /c mapdrive.bat ""%V"" /D"
为了安全起见,如果“%param:~-1%”==“\”,我会添加一个检查
。我认为我不能在注册表项中执行多行操作。也许我需要调用一个执行此操作的.bat文件,而不是尝试使用一行代码执行此操作?您可以向注册表项添加新行。您需要以二进制模式编辑它并为新行设置十六进制值-0d 0a
,或者您只需在行之间设置&
,%~1
不展开,我不知道我是否可以像你在.bat文件中那样在注册表项中进行参数操作(它似乎不起作用),即使使用纯for也可以做到:for%%d in(“%1”)do cmd/c subst%%~da/d
%~1
不会从注册表项展开。这是HKCR\Drive\shell\MapLocalDriveHere\command中的注册表项,键入:REG\u EXPAND\u sz如果您提出问题,请提供所有相关数据。在Regkey中,您可以使用%1
而不使用双引号。%d1
不会展开,也不会展开%1
。到目前为止,只有%1
变成了{Drive}:`。这位于HKCR\Drive\shell\MapLocalDriveHere\command中的注册表项中,键入:REG\u EXPAND\u SZ
cmd /c mapdrive.bat ""%V"" /D
HKCR,Drive\Shell\MapLocalDriveHere\command,,0x00020000,"cmd /c mapdrive.bat ""%V"" /D"