从文件名变量中删除扩展名

时间:2014-10-21 18:21:09

标签: windows registry right-click msiexec

我有一个脚本,当我右键单击Windows安装程序包时,右键单击菜单中会添加一个“提取”选项。我使用一个变量来获取文件的名称然而当它提取它时它仍然将扩展添加到文件夹并给出一个错误,即具有该名称的文件已经存在,所以,我如何拥有它所以它不使用提取的文件夹名称中的文件扩展名。

这是我的剧本:

REG ADD HKCU\software\classes\msi.package\shell\extract\command
@="msiexec.exe /a \"%1\" /qb targetdir=\"%1\""

也许有一些字符可以追回4个字符(.msi是4个字符长) 此致,Snipe

1 个答案:

答案 0 :(得分:0)

不要直接在注册表中编写“msiexec.exe”命令,只需使用批处理文件:

e.g。

@="D:\stickybatches\msiextract.cmd \"%1\"

(IMO不是必需的,但可以在其前面添加“cmd.exe / c ..”)

在批处理文件中,可以获取没有扩展名的文件名。对于这里需要的第一个参数,它是“%~n1”。

@echo off
@msiexec /a "%1" /a /qb TARGETDIR="%~n1"

评论:

  • TARGETDIR 与MSI的targetdir相同!区分大小写!!

  • 正如您在参考文献中看到的那样,“〜”字母从参数中删除外部调用的引号,您可以进行实验,如果可以删除它。但我会这样推荐它。

  • 如果感兴趣:使用“& ~0”并且它是亲戚,您将获得批处理文件本身的路径/文件名。有时非常有用,特别是对于使用管理员权限调用批处理文件。 (尽管你在这个用例中没有直接关系)。

有关批处理中路径/文件名的特殊语法的参考,请参阅示例:

https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true