首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将图像文件夹转换为CBZ (如漫画或电子书中的mangas )

如何将图像文件夹转换为CBZ (如漫画或电子书中的mangas )
EN

Stack Overflow用户
提问于 2021-09-28 20:04:45
回答 1查看 1.8K关注 0票数 0

我只想知道如何将图像文件夹转换为我的电子书可读的CBZ文件(我检查了电子书,她可以读取这种格式)。

最优情况下,我想转换它而不必安装所有的东西。只是个剧本。

对于那些速度快的人,我已经回答了我的问题.只是分享而已。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-28 20:41:27

查看UPDATE部件

假设您的操作系统是Windows,我们可以使用批处理或PowerShell进行操作。

对于这个过程来说,它的过程非常简单,我们只需要理解CBZ文件--一个包含图像的ZIP文件。所以我们会:

  1. 使用7zip压缩,因为出于某些原因,与WinRAR转换的文件在我的电子书中没有工作(甚至不在库中);
  2. 将扩展从.zip更改为.cbz。

我只打算展示PowerShell脚本,因为.bat脚本已经知道了问题。

架构

目录体系结构

该架构应是:

  1. 我的第一个文件夹
    • 第一图像
    • 第二图像

  2. 我的第二个文件夹
    • 第一图像
    • 第二图像

PowerShell

这是我的"#_ImagesFolderToCBZ.ps1“的代码

代码语言:javascript
运行
复制
Clear-Host

# INPUT - Script folder path
$i = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
# 7Zip path
$7zipPath = "$env:ProgramFiles\7-Zip\7z.exe"
# A list of the path of the zipped files
$listOfZippedFiles = New-Object Collections.Generic.List[String]
$listOfZippedNames = New-Object Collections.Generic.List[String]

# Ask the user if we delete the folders after their conversion
$isSdel = Read-Host -Prompt "Do you want to delete the folders after conversion [Y/N]: "

# Get the files inside the INPUT path and forEach children
Get-ChildItem "$i" | ForEach-Object {
    # Get the full path of the file
    $pathFolder = $_.FullName
    
    # If the path here is a folder
    if (Test-Path -Path "$pathFolder" -PathType Container) {
        # Set the alias
        Set-Alias 7z $7zipPath

        # If the user asked for deletion of folders
        if ("Y" -eq $isSdel.ToUpper()) {
            # Zip the content of the folder
            7z a "$pathFolder.zip" "$pathFolder\*" -sdel | FIND "ing archive"
        }
        else {
            # Zip the content of the folder
            7z a "$pathFolder.zip" "$pathFolder\*" | FIND "ing archive"
        }

        # Add the file name into the list
        $listOfZippedFiles.Add("$pathFolder.zip")
        $listOfZippedNames.Add("$_.zip")
    }

    # If the user asked for deletion of folders
    if ("Y" -eq $isSdel) {
        # Remove the now blank folders
        if( $_.psiscontainer -eq $true){
            if((gci $_.FullName) -eq $null){
                $_.FullName | Remove-Item -Force
            }
        }
    }
}

# For each zipped file
foreach ($file in $listOfZippedFiles) {
    # Change the extension to CBZ
    $dest = [System.IO.Path]::ChangeExtension("$file",".cbz")
    Move-Item -Path "$file" -Destination $dest -Force
}

# Write for the user
Write-Host "`r`n`r`nConverted:"

# Displaying the converted files by their names
foreach ($file in $listOfZippedNames) {
    $newName = [System.IO.Path]::ChangeExtension("$file",".cbz")
    Write-Host "-- $newName"
}

# Blank line
Write-Host ""
# Pause to let us see the result
Pause

输出

输出

正如我们所看到的,这个文件夹是成功创建的,没有循环,比如:我在脚本的根文件夹中有ZIP文件,它们也被重命名为CBZ (我的批处理脚本有这个循环)。

我还添加了自动删除转换后的文件夹 not的选项。

显然,还有改进的余地(特别是在如何删除文件夹方面)。我很乐意接受任何建议。

更新

我更新了我的脚本,好多了。减少指令,一个列表(在提示符中),在每个文件夹真正转换时更新自己。因此不再需要: 1) ZIP所有文件夹,2)重命名它们的扩展名。

因此,一个更有逻辑性的代码,对于实时显示一个漂亮的过程也是有用的。

以下是更新的代码:

代码语言:javascript
运行
复制
Clear-Host

# ROOT - Script folder path
$root = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
# 7Zip path
$7zipPath = "$env:ProgramFiles\7-Zip\7z.exe"

# Test if 7zip is installed
if (-not (Test-Path -Path $7zipPath -PathType Leaf)) {
    throw "7 zip file '$7zipPath' not found"
}

# Ask the user if we delete the folders after their conversion
$isSdel = Read-Host -Prompt "Do you want to delete the folders after conversion [Y/N]: "

# Write for the user
Write-Host "`r`nConverted:"

# Get the files inside the INPUT path and forEach children
Get-ChildItem "$root" | ForEach-Object {
    # Get the full path of the file
    $pathFolder = $_.FullName
    
    # If the path here is a folder
    if (Test-Path -Path "$pathFolder" -PathType Container) {
        # If the user asked for deletion of folders
        if ("Y" -eq $isSdel.ToUpper()) {
            # Zip the content of the folder while deleting the files zipped
            & $7zipPath a "$pathFolder.zip" "$pathFolder\*" -sdel > $null

            # Remove the now blank folder
            if( $_.psiscontainer -eq $true){
                if((gci $_.FullName) -eq $null){
                    $_.FullName | Remove-Item -Force
                }
            }
        }
        else {
            # Zip the content of the folder
            & $7zipPath a "$pathFolder.zip" "$pathFolder\*" > $null
        }

        # Change the extension to CBZ
        $newName = [System.IO.Path]::ChangeExtension("$pathFolder.zip",".cbz")
        Move-Item -Path "$pathFolder.zip" -Destination $newName -Force

        # Tells the user this one is finished converting
        Write-Host "--" -ForegroundColor DarkGray -NoNewline
        Write-Host " $_.cbz"
    }
}

# Tells the user it's finished
Write-Host "`r`nFinished`r`n" -ForegroundColor Green

# Pause to let us see the result
Pause

更新2

我为此做了一个GitHub项目。网址在这里:https://github.com/PonyLucky/CBZ-Manga-Creator

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69367889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档