powershell如何循环文件并压缩它们

时间:2011-11-10 21:31:28

标签: powershell

第一次使用PowerShell开发 - 不得不说Linux脚本编写器不直观。

需要循环遍历文件以压缩文件并获取错误 - 任何人都对一个好的内衬有一些反馈意见吗?

gci C:\temp -r *.csv | 
Where-Object { $_.lastwritetime -lt (Get-date).AddDays(-10)} | 
ForEach-Object {'c:\temp\bin\gzip.exe' $_.FullName}

3 个答案:

答案 0 :(得分:4)

你错过了调用(&)运算符来实际执行字符串中的命令。如果不这样做,则字符串将作为表达式评估的结果打印出来(而不是作为命令。)

gci C:\temp -r *.csv `
    | Where-Object { ... } `
    | ForEach-Object { & 'c:\temp\bin\gzip.exe' $_.FullName}

顺便提一下,如果您安装PowerShell社区扩展(http://pscx.codeplex.com),那么这会变得更加简单:

   ls c:\temp -r *.csv `
       | where { ... }
       | write-gzip

答案 1 :(得分:2)

只需提供名称/路径,就可以在Powershell中执行应用程序,您不必将它们作为字符串括在引号中,然后使用iex&

c:\temp\bin\gzip.exe $_.FullName

适用于拉链部分。

答案 2 :(得分:1)

如果您不依赖外部工具,以下版本的脚本可以派上用场:

gci C:\temp -recurse *.csv | 
Where-Object { $_.lastwritetime -lt (Get-date).AddDays(-10)} | 
ForEach-Object {
  $zip =  $_.fullname -replace "\.csv",".zip"; 
  new-item -type File $zip -force;
  ((new-object -com shell.application).namespace($zip)).copyhere($_.fullname)
}