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