当前位置: 首页 > 知识库问答 >
问题:

如何解压文件夹中的所有文件?(不是。zip扩展名)

路伟
2023-03-14

这是我的全部剧本。除了最后2行之外,所有的内容都用于查找压缩的PDF文件并移动它们。

在第一部分中,脚本检查文件夹中每个pdf文件的前几个字节。如果它们以“pk*”开头,它们是zip文件,并被移动到zipped文件夹中。对于每个PDF/ZIP文件,在它旁边的文件夹中有一个关联的HL7文件。

这些也需要移动到同一个文件夹。从那里,zip文件需要解压缩并重新定位到“unzipped”

$pdfDirectory = 'Z:\Documents\16_Med._App\Auftraege\PDFPrzemek\struktur_id_1225\ext_dok'
$newLocation = 'Z:\Documents\16_Med._App\Auftraege\PDFPrzemek\Zip'

Get-ChildItem "$pdfDirectory" -Filter "*.pdf" | foreach { 
    if ((Get-Content $_.FullName | select -First 1 ) -like "PK*") {
        $HL7 = $_.FullName.Replace("ext_dok","MDM")
        $HL7 = $HL7.Replace(".pdf",".hl7")
        move $_.FullName $newLocation;
        move $HL7 $newLocation
    }
}

Get-ChildItem 'Z:\Documents\16_Med._App\Auftraege\PDFPrzemek\Zip' |
Expand-Archive -DestinationPath 'Z:\Documents\16_Med._App\Auftraege\PDFPrzemek\Zip\unzipped' -Force

所以我需要找到一种方法来让这个函数解压缩文件,即使它们没有合适的扩展名...

共有1个答案

袁波
2023-03-14

就像@Ansgar说的那样:

Param (
    $SourcePath = 'C:\Users\xxx\Downloads\PDF',
    $ZipFilesPath = 'C:\Users\xxx\Downloads\ZIP',
    $UnzippedFilesPath = 'C:\Users\xxx\Downloads\Unzipped'
)

$VerbosePreference = 'Continue'

#region Test folders
@($SourcePath, $ZipFilesPath, $UnzippedFilesPath) | Where-Object {
    -not (Test-Path -LiteralPath $_)
} | ForEach-Object {
    throw "Path '$_' not found. Make sure that the folders exist before running the script."
}
#endregion

#region Get all files with extension .pdf
$Params = @{
    Path   = Join-Path -Path $SourcePath -ChildPath 'ext_dok'
    Filter = '*.pdf'
}
$PDFfiles = Get-ChildItem @Params

Write-Verbose "Got $($PDFfiles.count) files with extension '.pdf' from '$($Params.Path)'"
#endregion

#region Move PDF and HL7 files
$MDMpath = Join-Path -Path $SourcePath -ChildPath 'MDM'

foreach ($PDFfile in ($PDFfiles | Where-Object {
    (Get-Content $_.FullName | Select-Object -First 1) -like 'PK*'})
) {
    $MoveParams = @{
        Path        = $PDFfile.FullName
        Destination = Join-Path -Path $ZipFilesPath -ChildPath ($PDFfile.BaseName + '.zip')
    }
    Move-Item @MoveParams
    Write-Verbose "Moved file '$($MoveParams.Path)' to '$($MoveParams.Destination)'"

    $GetParams = @{
        Path        = Join-Path -Path $MDMpath -ChildPath ($PDFfile.BaseName + '.hl7')
        ErrorAction = 'Ignore'
    }
    if ($HL7file = Get-Item @GetParams) {
        $MoveParams = @{
            Path        = $HL7file
            Destination = $ZipFilesPath
        }
        Move-Item @MoveParams
        Write-Verbose "Moved file '$($MoveParams.Path)' to '$($MoveParams.Destination)$($HL7file.Name)'"
    }
}
#endregion

#region Unzip files
$ZipFiles = Get-ChildItem -Path $ZipFilesPath -Filter '*.zip' -File

foreach ($ZipFile in $ZipFiles) {
    $ZipFile | Expand-Archive -DestinationPath $UnzippedFilesPath -Force

    Write-Verbose "Unzipped file '$($ZipFile.Name)' in folder '$UnzippedFilesPath'"
}
#endregion

一些小贴士:

  • 在脚本开头添加param()子句,以包含所有可以更改的变量。
  • 尝试使用完整的参数名称来清楚地表明什么是什么。使用get-childitem-path xxx而不是get-childitem-xxx.
  • 对长参数使用哈希表。这使得代码的宽度更紧凑,更容易阅读。
  • 使用#region#endregion对代码进行分组。
 类似资料:
  • 问题内容: 我尝试解压缩150个zip文件。所有zip文件都使用不同的名称,它们都分散在一个大文件夹中,该文件夹分为许多子文件夹和子子文件夹。我想将每个存档提取到与原始zip文件名相同名称的单独文件夹中,与原始zip文件位于同一位置。我的代码是: 我运行代码后,什么都没有发生。在此先感谢您的任何帮助。 问题答案: 更新: 最后,这段代码对我有用:

  • 问题内容: 在Linux机器上,我想遍历文件夹层次结构并获取其中所有不同文件扩展名的列表。 从外壳实现这一目标的最佳方法是什么? 问题答案: 试试这个(不确定这是否是最好的方法,但是可以用): 它的工作方式如下: 查找当前文件夹中的所有文件 打印文件扩展名(如果有) 制作唯一的排序列表

  • 我是Bash新手,正在尝试压缩子文件夹,但它不起作用。 在命令之后 脚本: 我该怎么做?

  • 问题内容: 我想更改特定文件夹中文件的扩展名。我在论坛上阅读了有关此主题的信息。使用“确实”的想法,我编写了以下代码,我希望它可以工作,但不能。我很感谢您为我的失误提供任何指导。 问题答案: 在对源文件是不必要的,因为只需要在源和目标路径来完成这项工作。而且,始终返回,因此调用其返回值没有任何意义。 我简单地删除了两个。检查是否适合您。

  • 本文向大家介绍PHP解压ZIP文件到指定文件夹的方法,包括了PHP解压ZIP文件到指定文件夹的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP解压ZIP文件到指定文件夹的方法。分享给大家供大家参考,具体如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP操作zip文件及压缩技巧总结》、《php文件操作总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结

  • 当我在Mac OSX中使用内置的zip压缩程序压缩文件时,会在解压缩的zip中创建一个名为“_MACOSX”的额外文件夹。 我可以调整我的设置,以防止创建此文件夹,还是需要购买第三方压缩工具? 更新:我刚刚发现了一个OSX的免费应用,它解决了我的问题:“YemuZip” 更新2:YemuZip不再是免费软件。