返回列表 发帖

【完结】60元求批量查找并添加

本帖最后由 lxh623 于 2023-5-3 17:39 编辑

主文件夹包含许多文件夹,每一个文件夹都有子文件夹OEBPS,其中有juans和Fonts文件夹,以及文件content.opf。
如果Fonts文件夹有Cbeta.ttf,就打开content.opf,在  </manifest>前面写入一行:
    <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>COPY
这个批处理的验证需要另一个帖子提取字体子集的脚本完成。谢谢!

谢谢!

回复 3# zaqmlp
请查收。
谢谢!

TOP

避免重复插入。前提是 原文件没有那行,不论在什么位置
$root = "."
$str1 = '</manifest>'
$str2 = '    <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>'
$fld = Get-ChildItem -Directory -Path $root
$fld | ForEach-Object {
    if ( Test-Path (Join-Path $_.FullName "\Fonts\Cbeta.ttf") ) {
        $file = Get-Content -Encoding UTF8 (Join-Path $_.FullName "content.opf")
        if ( -not ($file -match $str2) ) {
            $file = $file -replace "(?=$str1)",($str2 + "`r`n")
            $file | Out-File -Encoding UTF8 (Join-Path $_.FullName "content.opf")
        }
    }
}COPY
1

评分人数

TOP

<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
set "current=%cd%"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
pause
exit
#>
$insertstr='    <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>';
$current=($env:current).trimend('\');
$enc=New-Object System.Text.UTF8Encoding $False;
$folders=@(dir -literal $current -recurse|?{$_ -is [System.IO.DirectoryInfo]});
for($i=0;$i -lt $folders.length;$i++){
    if($folders[$i].Name -eq 'OEBPS'){
        $ttffile=$folders[$i].FullName+'\Fonts\Cbeta.ttf';
        $opffile=$folders[$i].FullName+'\content.opf';
        if((test-path -literal $ttffile) -and (test-path -literal $opffile)){
            write-host $ttffile;
            write-host $opffile;
            $text=[IO.File]::ReadAllText($opffile, $enc);
            $text=[regex]::replace($text, '([^\r\n]+([\r\n]+))([\t ]*?</manifest>)', {
                param($m);
                if($m.groups[0].value.Contains($insertstr)){
                    return $m.groups[0].value;
                }else{
                    return $m.groups[1].value+$insertstr+$m.groups[2].value+$m.groups[3].value;
                }
            });
            [IO.File]::WriteAllText($opffile, $text, $enc);
            write-host '';
        }
    }
}COPY
1

评分人数

提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 newswan 于 2023-5-3 14:05 编辑

假设 content.opf 编码是 UTF8
如果显示正确,去掉第十行的 #
$root = "."
$insert = '    <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>'
$fld = Get-ChildItem -Directory -Path $root
$fld | ForEach-Object {
    if ( Test-Path (Join-Path $_.FullName "\Fonts\Cbeta.ttf") ) {
        $file = Get-Content -Encoding UTF8 (Join-Path $_.FullName "content.opf")
        $file = $file -replace '(?=</manifest>)',($insert + "`r`n")
        $file
#       $file | Out-File -Encoding UTF8 (Join-Path $_.FullName "content.opf")
    }
}COPY
如果想要用批处理,把这行添加到上面第一行
@cd /d %~dp0 & powershell -command "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause & exit/bCOPY
1

评分人数

TOP

返回列表