我正在尝试移动zip文件夹中的文件。 Zip文件夹的名称每个月都会更改。
zip文件夹包含名为 GM7_AAA_files 的子文件夹,这些子文件夹也会按月更改。
我想要做的是将子文件夹中的csv文件移动到目标文件夹。
所以在 OH_M7_AEE.zip 中有一个名为 GM7_AAA 的子文件夹,我想将 109EM_Main.csv 移到文件夹 Test2 和 109EM_Main.csv 到文件夹 Test2 。
到目前为止,我只是设法使用csv文件移动子文件夹而不是我想要的。
$path = "\\networkdrive\2. Digital\Test"
$destination = "\\networkdrive\2. Digital\Test2"
$shell_app= New-Object -com shell.application
$files = Get-ChildItem -Path $path -filter *.zip -recurse
foreach($file in $files) {
$zip_file = $shell_app.namespace($file.FullName)
$copyHere = $shell_app.namespace($destination)
$copyHere.Copyhere($zip_file.items())
}
如果我没有,希望我有道理并道歉。我感谢任何帮助。
答案 0 :(得分:1)
我相信我理解你的问题。您无法很好地操作或过滤Zip文件中的项目,因为您正在处理COM对象而不是直接处理文件。而不是试图找出一种方法来操纵COM对象直接过滤掉zip文件中的csv文件,而不是我说,将整个zip文件解压缩到临时位置(存在的文件夹),然后复制/移出到目的地的文件。
#Source (Where Zip files containing CSV files are)
$path = "\\networkdrive\2. Digital\Test"
#Temp Zip Destination (Folder where we can temporarily extract the zip file)
$TempZip = "\\networkdrive\2. Digital\ExtractedZip"
#Destination (Folder where CSV's go)
$destination = "\\networkdrive\2. Digital\Test2"
$shell_app= New-Object -com shell.application
#Get Zip files
$files = Get-ChildItem -Path $path -filter *.zip -recurse
#Loop through all zip files
foreach($file in $files) {
#Open Zip File
$zip_file = $shell_app.namespace($file.FullName)
#Loop through all subfolders inside Zip file
foreach($item in $zip_file.items())
{
#Extract files to Temporary destination
$shell_app.Namespace($TempZip).Copyhere($item)
}
#Get all the *.CSV files (not folders) from the temporary folder and move to destination
Get-ChildItem $TempZip -Filter *.CSV -Recurse -File | Move-Item -Destination $destination
#Clear out the files from the temp location
Remove-Item $TempZip\* -Recurse -Force
}