我有一个包含一堆子文件夹的目录,每个子文件夹都包含一个 cbz 文件。
- 提取每个 .cbz 文件。
- 如果提取创建了子文件夹,请将其内容移动到 .cbz 文件的文件夹中。
- 删除原始 .cbz 和提取的子文件夹。
我该如何在 Windows Server 2022 上执行此操作?chatgpt 给我一个损坏的 Powershell 脚本。我运行它时它立即关闭了。
$sevenZipPath = "C:\Program Files\7-Zip\7z.exe" # Change this if 7z.exe is not in your PATH
Get-ChildItem -Recurse -Filter *.cbz | ForEach-Object {
$cbzFile = $_.FullName
$baseFolder = $_.DirectoryName
$tempFolder = Join-Path $baseFolder ([System.IO.Path]::GetFileNameWithoutExtension($_.Name))
# Extract to a subfolder
& $sevenZipPath x $cbzFile "-o$tempFolder" -y
# Move everything up one level
Get-ChildItem -Path $tempFolder -Recurse | ForEach-Object {
$targetPath = Join-Path $baseFolder $_.Name
if (-not (Test-Path $targetPath)) {
Move-Item $_.FullName -Destination $targetPath
} else {
Write-Host "Skipping '$($_.Name)' — already exists in $baseFolder"
}
}
# Clean up
Remove-Item $cbzFile -Force
Remove-Item $tempFolder -Recurse -Force
}
所以,我记得从 7zip 中提取时,路径名存在空格问题
试试这个。你也可以使用 Write-Host 的“你想知道什么”来尝试找出问题所在。
最有可能的是第 19 行的 -。当我将其粘贴为 — 时它会显示出来并导致问题。
将第 19 行更改为:
一旦我用你的脚本执行了该操作,它就运行良好。
以下答案基于以下前提:这些文件是“标准”CBZ 文件。因此,所有图像(以及任何支持文件)都位于内部“顶级文件夹”级别,并且没有包含所需内容的嵌套子文件夹。如果它们是自定义格式,则需要真实的样本。
对于那些拥有微软在 Windows 10+ 及一些服务器版本/更新中添加的原生 TAR 命令的用户来说,最快的原生解压方法是使用单个命令行脚本。不过为了方便起见,我会将其拆分成几个部分。
首先在任何命令控制台提示符下检查:
回复如下:
bsdtar 3.5.2 - libarchive 3.5.2 zlib/1.2.5.f-ipp
如果是这样,那么写一个有针对性的 unCBZip.cmd,如下所示:注意,为了测试,有 dir 和 del /Prompt,
一旦你满意它的工作,删除它,
dir &
也删除/P
后面的del