我是新手,问一个简单的问题:
我正在寻找最简单的方法来提取文件夹及其子文件夹中的所有 zip 文件。
并将它们全部放在一个特定的文件夹中。
e.g.:
folder-A
file1.zip
folder-B
folder-B file2.zip
folder-B file3.zip
folder-C
folder-D
folder-D file4.zip
我发现了很多关于这个的主题,但我无法使用所提出的解决方案
我知道我可能应该使用
Get-ChildItem
将值传递给 Expand-Archive,但我没有得到我期望的结果。
我试过:
Get-ChildItem C:\Toolbase\zip_test\*zip | Expand-Archive -DestinationPath C:\Toolbase\zip_test\unzipped
但是解压后的文件夹是空的,除非
C:\Toolbase\zip_test\test2\
里面有zip文件夹。
谢谢你的回复。
你很接近......你需要使用
recurse
选项来遍历子文件夹
Get-ChildItem C:\Toolbase\zip_test\*zip -force -recurse | Expand-Archive -DestinationPath C:\Toolbase\zip_test\unzipped -force
默认情况下,
get-childitem
只会检查父目录
Expand-Archive
命令需要一个-Path
参数。目前你没有提供。
如果我错了请纠正我,但您想要的结果是将所有内容解压缩到不同的
-DestinationPath
C:.
└───zip_test
├───folder-A
│ │ file1.zip
│ │
│ ├───folder-B
│ │ file2.zip
│ │ file3.zip
│ │
│ └───folder-C
│ └───folder-D
│ file4.zip
│
└───unziped
由于我们将多个
System.IO.FileInfo
传递到管道中,我们将不得不遍历每个对象,并拉出 $_ (Current Object)
完整文件路径。然后我们必须提供目标路径。
打开 PowerShell 控制台并尝试:
Get-ChildItem -Path C:\Toolbase\zip_test\*zip -Recurse |
ForEach-Object { Expand-Archive -Path $_.FullName -DestinationPath C:\Toolbase\zip_test\unziped }
这将提供以下结果:
C:.
└───zip_test
├───folder-A
│ │ file1.zip
│ │
│ ├───folder-B
│ │ file2.zip
│ │ file3.zip
│ │
│ └───folder-C
│ └───folder-D
│ file4.zip
│
└───unziped
file1.txt
file2.txt
file3.txt
file4.txt
如果你想解压同目录下的文件,你可以试试:
Get-ChildItem -Path C:\Toolbase\zip_test\*zip -Recurse |
ForEach-Object { Expand-Archive -Path $_.FullName -DestinationPath $_.Directory }
结果会是。
C:.
└───zip_test
├───folder-A
│ │ file1.txt
│ │ file1.zip
│ │
│ ├───folder-B
│ │ file2.txt
│ │ file2.zip
│ │ file3.txt
│ │ file3.zip
│ │
│ └───folder-C
│ └───folder-D
│ file4.txt
│ file4.zip
│
└───unziped
如果这回答了您的问题,请更新主题,如果没有,请提供详细信息。