[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

谢谢!

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

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

评分人数

TOP

  1. <# :
  2. cls&echo off&cd /d "%~dp0"&mode con lines=5000
  3. path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
  4. set "current=%cd%"
  5. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
  6. pause
  7. exit
  8. #>
  9. $insertstr='    <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>';
  10. $current=($env:current).trimend('\');
  11. $enc=New-Object System.Text.UTF8Encoding $False;
  12. $folders=@(dir -literal $current -recurse|?{$_ -is [System.IO.DirectoryInfo]});
  13. for($i=0;$i -lt $folders.length;$i++){
  14.     if($folders[$i].Name -eq 'OEBPS'){
  15.         $ttffile=$folders[$i].FullName+'\Fonts\Cbeta.ttf';
  16.         $opffile=$folders[$i].FullName+'\content.opf';
  17.         if((test-path -literal $ttffile) -and (test-path -literal $opffile)){
  18.             write-host $ttffile;
  19.             write-host $opffile;
  20.             $text=[IO.File]::ReadAllText($opffile, $enc);
  21.             $text=[regex]::replace($text, '([^\r\n]+([\r\n]+))([\t ]*?</manifest>)', {
  22.                 param($m);
  23.                 if($m.groups[0].value.Contains($insertstr)){
  24.                     return $m.groups[0].value;
  25.                 }else{
  26.                     return $m.groups[1].value+$insertstr+$m.groups[2].value+$m.groups[3].value;
  27.                 }
  28.             });
  29.             [IO.File]::WriteAllText($opffile, $text, $enc);
  30.             write-host '';
  31.         }
  32.     }
  33. }
复制代码
1

评分人数

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

TOP

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

评分人数

TOP

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

TOP

返回列表