使用Windows本机工具分别压缩子目录的批处理文件

使用Windows本机工具分别压缩子目录的批处理文件,windows,powershell,batch-file,command-prompt,Windows,Powershell,Batch File,Command Prompt,我已经看到这个问题的各种回答,但通常使用7zip之类的东西。我正试图找到一个解决方案,该解决方案将与windows附带的功能一起工作,而不需要任何其他工具 我有一个包含几百个子目录的目录。我需要单独压缩每个子目录…所以我将得到几百个zip文件,每个子目录一个。这是在一台工作的机器上,我没有安装新软件的管理权限…因此希望远离7zip、winRar等 如果这已经在其他地方得到了回答,我很抱歉……我本人从未尝试过,但有: Compress Archive cmdlet从一个或多个指定的文件或文件夹创建

我已经看到这个问题的各种回答,但通常使用7zip之类的东西。我正试图找到一个解决方案,该解决方案将与windows附带的功能一起工作,而不需要任何其他工具

我有一个包含几百个子目录的目录。我需要单独压缩每个子目录…所以我将得到几百个zip文件,每个子目录一个。这是在一台工作的机器上,我没有安装新软件的管理权限…因此希望远离7zip、winRar等


如果这已经在其他地方得到了回答,我很抱歉……

我本人从未尝试过,但有:

Compress Archive cmdlet从一个或多个指定的文件或文件夹创建压缩(或压缩)存档文件。存档文件允许将多个文件打包(可选地压缩)到单个压缩文件中,以便于分发和存储。存档文件可以使用CompressionLevel参数指定的压缩算法进行压缩

由于压缩存档依赖于Microsoft.NET Framework API System.IO.Compression.ZipArchive来压缩文件,因此使用压缩存档可以压缩的最大文件大小当前为2 GB。这是底层API的一个限制

下面是我刚刚拼凑的一个示例脚本:

# configure as needed
$source = "c:\temp"
$target = "d:\temp\test"

# grab source file names and list them
$files = gci $source -recurse
$files

# target exists?
if( -not (test-path $target)) {
    new-item  $target  -type directory  
}

# compress, I am using -force here to overwrite existing files
$files | foreach{
    $dest = "$target\" + $_.name + ".zip"
    compress-archive  $_  $dest  -CompressionLevel Optimal  -force
}

# list target dir contents
gci $target -recurse

对于子文件夹,您可能需要对其进行一些改进。在上述版本中,子文件夹作为一个整体压缩到单个文件中。这可能不是你想要的。

我自己从未尝试过,但有:

Get-ChildItem c:\path\of\your\folder | ForEach-Object {
    $path = $_.FullName
    Compress-Archive -Path $path -DestinationPath "$path.zip"
}
Compress Archive cmdlet从一个或多个指定的文件或文件夹创建压缩(或压缩)存档文件。存档文件允许将多个文件打包(可选地压缩)到单个压缩文件中,以便于分发和存储。存档文件可以使用CompressionLevel参数指定的压缩算法进行压缩

由于压缩存档依赖于Microsoft.NET Framework API System.IO.Compression.ZipArchive来压缩文件,因此使用压缩存档可以压缩的最大文件大小当前为2 GB。这是底层API的一个限制

下面是我刚刚拼凑的一个示例脚本:

# configure as needed
$source = "c:\temp"
$target = "d:\temp\test"

# grab source file names and list them
$files = gci $source -recurse
$files

# target exists?
if( -not (test-path $target)) {
    new-item  $target  -type directory  
}

# compress, I am using -force here to overwrite existing files
$files | foreach{
    $dest = "$target\" + $_.name + ".zip"
    compress-archive  $_  $dest  -CompressionLevel Optimal  -force
}

# list target dir contents
gci $target -recurse
对于子文件夹,您可能需要对其进行一些改进。在上述版本中,子文件夹作为一个整体压缩到单个文件中。这可能不是你想要的

Get-ChildItem c:\path\of\your\folder | ForEach-Object {
    $path = $_.FullName
    Compress-Archive -Path $path -DestinationPath "$path.zip"
}
我把它作为一个简短的片段。如果这不符合您的要求,请随时发表评论。 在文件夹X中,有子文件夹Y1、Y2

Y1.zip,Y2.zip。。。将创建

我把它作为一个简短的片段。如果这不符合您的要求,请随时发表评论。 在文件夹X中,有子文件夹Y1、Y2


Y1.zip,Y2.zip。。。将被创建。

因此,作为一个几乎没有windows脚本编写经验的人,如何将其嵌入到列出父目录内容并遍历所有子目录的脚本中?您提供的链接指的是powershell 6.0,在左侧的页面上,您可以选择PSversion并查看cmdlet是否受支持-Compress Archive需要PSv5.0+我想我可能已经找到了循环部分-将建议…因此,对于没有或几乎没有windows脚本编写经验的人,如何将其嵌入到列出父目录内容并遍历所有子目录的脚本中?您提供的链接指的是powershell 6.0,在左侧的页面上,您可以选择PSversion并查看cmdlet是否受支持-Compress Archive需要PSv5.0+我想我可能找到了循环部分-将建议。。。。