【问题标题】:remove extension from a filename variable从文件名变量中删除扩展名
【发布时间】:2014-10-21 18:21:08
【问题描述】:

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

这是我的脚本:

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

也许有一些字符可以返回 4 个字符(.msi 是 4 个字符长) 问候,狙击

【问题讨论】:

  • 使用... targetdir=\"%1D\"" 可能是一种解决方法...添加一些内容而不是删除后缀...
  • 嗨,这在扩展的末尾添加了一个 d,所以现在文件夹的名称是 foldername.msiD。

标签: windows registry right-click windows-installer


【解决方案1】:

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

例如

@="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

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2013-03-14
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    相关资源
    最近更新 更多