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

【完成】文件复制与修改(80元)

本帖最后由 lxh623 于 2024-11-6 20:29 编辑

1、J:\大藏经修改\modepub\epub解包后
2、J:\大藏经修改\epub解包后
路径1的每一个下面有许多子文件夹。比如,T01n0092--十支居士八城人经--後汉 安世高译\OEBPS下面有Fonts文件夹以及文件toc.ncx,复制到2的对应位置。后者是替换。
content.opf里面  </manifest>前面添加一行。
  1.     <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>
复制代码
谢谢!

bat存为ANSI/GB2312编码
  1. <# :
  2. cls&echo off&cd /d "%~dp0"&mode con lines=5000
  3. path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
  4. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
  5. pause
  6. exit
  7. #>
  8. $oldfolder="J:\大藏经修改\modepub\epub解包后";
  9. $newfolder="J:\大藏经修改\epub解包后";
  10. $addline='    <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>';
  11. if(-not (test-path -literal $oldfolder)){write-host ('"'+$oldfolder+'" path error or not exist');exit;}
  12. if(-not (test-path -literal $newfolder)){write-host ('"'+$newfolder+'" path error or not exist');exit;}
  13. $enc=New-Object System.Text.UTF8Encoding $False;
  14. $folders=@(dir -literal $oldfolder|?{$_ -is [System.IO.DirectoryInfo]});
  15. for($i=0;$i -lt $folders.length;$i++){
  16.     write-host $folders[$i].Name;
  17.     $newpath=$newfolder+"\"+$folders[$i].Name;
  18.     $fd1=$folders[$i].FullName+"\OEBPS\Fonts";
  19.     $fd2=$newpath+"\OEBPS\Fonts";
  20.     if(test-path -literal $fd1){
  21.         remove-item -literal $fd2 -recurse -force -ErrorAction SilentlyContinue;
  22.         copy-item -literal $fd1 $fd2 -recurse -force -ErrorAction SilentlyContinue;
  23.     }
  24.     $f1=$folders[$i].FullName+"\OEBPS\toc.ncx";
  25.     $f2=$newpath+"\OEBPS\toc.ncx";
  26.     if(test-path -literal $f1){
  27.         copy-item -literal $f1 $f2 -force -ErrorAction SilentlyContinue;
  28.     }
  29.     $files=@(dir -literal $newpath -recurse|?{('content.opf' -eq $_.Name) -and ($_ -is [System.IO.FileInfo])});
  30.     for($j=0;$j -lt $files.length;$j++){
  31.         $text=[IO.File]::ReadAllText($files[$j].FullName, $enc);
  32.         $text=$text -replace '(?=<\/manifest>)',$addline;
  33.         [IO.File]::WriteAllText($files[$j].FullName, $text, $enc);
  34.     }
  35. }
复制代码
1

评分人数

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

TOP

  1. <#*,:
  2. @echo off
  3. cd /d "%~dp0"
  4. set "batchfile=%~f0"
  5. Powershell -ExecutionPolicy Bypass -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create([IO.File]::ReadAllText($env:batchfile,[Text.Encoding]::GetEncoding(0) )) )"
  6. pause
  7. exit /b
  8. #>
  9. # 复制文件
  10. # 1、J:\大藏经修改\modepub\epub解包后
  11. # 2、J:\大藏经修改\epub解包后
  12. $dir1 = "J:\大藏经修改\modepub\epub解包后"
  13. $dir2 = "J:\大藏经修改\epub解包后"
  14. Robocopy.exe $dir1 $dir2 *.ttf *.ttc toc.ncx /S /MT
  15. Get-ChildItem -Path "$dir2\*" -Filter content.opf -Recurse | Where-Object { $_ -is [IO.FileInfo] } | ForEach-Object {
  16.   try {
  17.     $_ | Resolve-Path -Relative
  18.     $text = [IO.File]::ReadAllText($_.FullName)
  19.     $text = $text.Replace('</manifest>', @'
  20. <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>
  21. </manifest>
  22. '@)
  23.     [IO.File]::WriteAllText($_.FullName, $text)
  24.   } finally {
  25.    
  26.   }
  27.   trap {}
  28. }
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

谢谢!请查收!

TOP

有两个问题,主要是我这边才发现的。
第一、文件经过别的软件转换,解包后,文件夹结构不一样。能不能在下面搜索toc.ncx,然后替换。
第二、content.opf位置也不一样。但是,修改了。<item id前面有四个空格,</manifest>转行后前面有两个空格。
麻烦一下!

TOP

回复 5# lxh623
  1. <#*,:
  2. @echo off
  3. cd /d "%~dp0"
  4. set "batchfile=%~f0"
  5. Powershell -ExecutionPolicy Bypass -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create([IO.File]::ReadAllText($env:batchfile,[Text.Encoding]::GetEncoding(0) )) )"
  6. pause
  7. exit /b
  8. #>
  9. # 复制文件
  10. # 1、J:\大藏经修改\modepub\epub解包后
  11. # 2、J:\大藏经修改\epub解包后
  12. $dir1 = "J:\大藏经修改\modepub\epub解包后"
  13. $dir2 = "J:\大藏经修改\epub解包后"
  14. # Robocopy.exe $dir1 $dir2 *.ttf *.ttc /S /MT
  15. Get-ChildItem -LiteralPath $dir1 | Where-Object { $_ -is [IO.DirectoryInfo] } | ForEach-Object {
  16.   try {
  17.     $_.Name
  18.     $root1 = $_.FullName
  19.     $root2 = [IO.Path]::Combine($dir2, $_.Name)
  20.     if ([IO.Directory]::Exists($root2)) {
  21.       $toc1 = Get-ChildItem -LiteralPath $root1 -Filter toc.ncx -Recurse | Where-Object { $_ -is [IO.FileInfo] } | Select-Object -First 1
  22.       $toc2 = Get-ChildItem -LiteralPath $root2 -Filter toc.ncx -Recurse | Where-Object { $_ -is [IO.FileInfo] } | Select-Object -First 1
  23.       if ($toc1 -and $toc2) {
  24.         $toc1 | Copy-Item -Destination $toc2.FullName -Force
  25.       }
  26.       $opf2 = Get-ChildItem -LiteralPath $root2 -Filter content.opf -Recurse | Where-Object { $_ -is [IO.FileInfo] } | Select-Object -First 1
  27.       if ($opf2) {
  28.         $text = [IO.File]::ReadAllText($opf2.FullName)
  29.         $text = $text.Replace('</manifest>', @'
  30.   <item id="Cbeta.ttf" href="Fonts/Cbeta.ttf" media-type="application/x-font-ttf"/>
  31.   </manifest>
  32. '@)
  33.         [IO.File]::WriteAllText($opf2.FullName, $text)
  34.         $fonts1 = Get-ChildItem -LiteralPath $root1 -Filter Fonts -Recurse | Where-Object { $_ -is [IO.DirectoryInfo] } | Select-Object -First 1
  35.         if ($fonts1) {
  36.           $fonts2 = [IO.Path]::Combine([IO.Path]::GetDirectoryName($opf2.FullName), 'Fonts')
  37.           Robocopy.exe ($fonts1.FullName) $fonts2 * /S /MT
  38.         }
  39.       }
  40.     }
  41.   } finally {
  42.    
  43.   }
  44.   trap {}
  45. }
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

返回列表