2014-10-18 59 views
2

我一直在使用功能的PowerShell要解压的大量文件:解压在PowerShell中不清除临时文件

function Expand-ZIPFile($file, $destination) 
    { 
     $shell = new-object -com shell.application 
     $zip = $shell.NameSpace($file) 
     foreach($item in $zip.items()) 
     { 
     $shell.Namespace($destination).copyhere($item) 
     } 
    } 

我称之为使用类似:

Expand-ZIPFile -File "$dir\$zip_file" -Destination $work_dir 

我发现这个过程在创建一个临时文件 C:\ Documents and Settings \ ftpuser \ Local Settings \ Temp

对于这些文件中的每一个我都解压缩了,过去mont它已经生成了近800GB的临时文件。

问:是否有一种方法来

  1. 从摆在首位创建一个临时文件停止解压过程?
  2. 强制我的脚本在退出之前清理这些文件?
+0

我无法在Windows 7中复制这种行为,这也观察到这里(http://forums.anandtech.com/showthread.php?t=2217442)。不理想,但我想你可以从%temp%目录清空最近的文件。说..最后10分钟编辑? – Matt 2014-10-18 03:09:47

+0

我会注意到,创建或解压缩zip文件的Shell.Application破解不是自动化友好的(没有状态检查,它是异步的等)。看到这里:[http://social.msdn.microsoft.com/Forums/vstudio/en-US/760ea95b-4c3e-4f48-a0f6-9d728d5580da/](http://social.msdn.microsoft.com/Forums/ vstudio/EN-US/760ea95b-4c3e-4f48-a0f6-9d728d5580da /)。使用命令行解压缩工具(例如[7-Zip](http://www.7-zip.org))的99%时间更简单。 – 2014-10-18 16:08:45

回答

0

懒惰的解决方案:

$temp = "C:\Documents and Settings\ftpuser\Local Settings\Temp\" 
rm "$temp$($item.Title)" 
0

我懒惰的解决方案(自动):

$temp_dir = "C:\Documents and Settings\ftpuser\Local Settings\Temp" 
    $temp_listing = Get-ChildItem $temp_dir -include *zip -recurse -force | Select-Object Name 
    if ($temp_listing -ne $null) { 
     foreach ($item in $temp_listing) { 
     $item -match "Name=(.+)}" 
     $item = $Matches[1] 
     Write-Host "Removing $temp_dir\$item" 
     if (Test-Path -Path "$temp_dir\$item" -PathType Container) 
     { 
      Remove-Item "$temp_dir\$item" -recurse -force 
     } 
     } 
    } 

这工作,以便脚本:

  1. 找到隐藏的文件
  2. 不提示
  3. 仍然可以在计划任务内运行。

感谢