标题: 【完结】60元求批量查找并添加 [打印本页]
作者: lxh623 时间: 2023-5-3 11:58 标题: 【完结】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"/>
复制代码
这个批处理的验证需要另一个帖子提取字体子集的脚本完成。谢谢!
谢谢!
作者: newswan 时间: 2023-5-3 13:59
本帖最后由 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")
- }
- }
复制代码
如果想要用批处理,把这行添加到上面第一行- @cd /d %~dp0 & powershell -command "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause & exit/b
复制代码
作者: zaqmlp 时间: 2023-5-3 15:14
- <# :
- 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 '';
- }
- }
- }
复制代码
作者: newswan 时间: 2023-5-3 17:22
避免重复插入。前提是 原文件没有那行,不论在什么位置- $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")
- }
- }
- }
复制代码
作者: lxh623 时间: 2023-5-3 17:38
回复 3# zaqmlp
请查收。
谢谢!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |