批量编辑 SFX 脚本

批量编辑 SFX 脚本

我使用 WinRAR 的 SFX 模块(除其他外,还有安装选项Run after extraction)创建应用程序的自定义便携版本。在有 32 位/x86 和 64 位/x64 版本可用的情况下,我init.bat根据执行环境动态选择要运行哪个版本。

在此处输入图片描述

出于 Cyber​​ Essentials Plus 合规性原因,组策略配置为将文件扩展名.bat与记事本关联,以便无法直接执行它们。这对安全性有好处,但破坏了我的便携式应用程序,所以我需要批量编辑 EXE 文件的注释/SFX 脚本,将其替换init.batcmd.exe /k init.bat

经过大量谷歌搜索后,我所找到的只有:

  1. Windows 文件“注释”属性没有答案。
  2. PowerShell 命令行似乎Get-ItemProperty没有得到评论。
  3. https://www.tenforums.com/general-support/66937-adding-comments-files-files-explorer-windows-10-a.html#post842655但文件元似乎不起作用——导出的 XML 文件始终只包含<Metadata/>
  4. 如何编辑文件夹的(元数据)“评论”字段?但那是针对文件夹,而不是文件。
  5. https://answers.microsoft.com/en-us/windows/forum/all/trying-to-add-comments-to-files-in-windows/8a4e2c4b-8712-47bb-8648-0a6dcddab864?page=3没有真正的答案。

在现代版本的 Windows 中似乎无法真正编辑文件注释。

答案1

我发现 WinRAR 本身能够编辑存档注释: 在此处输入图片描述

因此,我读了https://ss64.com/bash/rar.htmlhttp://acritum.com/winrar/console-rar-manual然后创建了以下 PowerShell 脚本,该脚本执行了我想要的操作:

$RARFile_Path = "C:\Program Files\WinRAR\Rar.exe";
$EXEFiles = Get-ChildItem -Path "<folder path>" -Filter *.exe -Recurse -File;
$SFXSetup_Original = "Setup=init.bat";
$SFXSetup_New = "Setup=cmd.exe /k init.bat";

ForEach ($EXEFile in $EXEFiles){
    $EXEFile_Path = $EXEFile.FullName;
    $EXEFile_Name = $EXEFile.Name;

    $EXEFile_Comment = & $RARFile_Path cw $EXEFile_Path -inul;

    If ($EXEFile_Comment -And $EXEFile_Comment -Like $SFXSetup_Original){
        <#
        Write-Output "Comment, before:";
        Write-Output $EXEFile_Comment;
        Write-Output "";
        #>

        $CommentFile_Original_Path = $Env:TMP + "\" + $EXEFile_Name + " comment (original).txt";
        If (Test-Path -Path $CommentFile_Original_Path){
            Remove-Item -Path $CommentFile_Original_Path -Force;
        }

        & $RARFile_Path cw $EXEFile_Path $CommentFile_Original_Path -inul;
        $CommentFile_Original_Content = Get-Content -Path $CommentFile_Original_Path -Raw;

        $CommentFile_New_Path = $Env:TMP + "\" + $EXEFile_Name + " comment (new).txt";
        $CommentFile_New_Content = $CommentFile_Original_Content -Replace $SFXSetup_Original, $SFXSetup_New;
        Set-Content -Path $CommentFile_New_Path -Value $CommentFile_New_Content;

        <#
        Write-Output "Comment, after:";
        Write-Output $CommentFile_New_Content;
        #>

        & $RARFile_Path c "-z$CommentFile_New_Path" $EXEFile_Path -inul;

        <#
        Write-Output "";
        Write-Output "";
        Write-Output "";
        #>
    }
}

相关内容