第一次使用PowerShell开发 - 不得不说Linux脚本编写器不直观。
需要循环遍历文件以压缩文件并获取错误 - 任何人都对一个好的内衬有一些反馈意见吗?
gci C:\temp -r *.csv |
Where-Object { $_.lastwritetime -lt (Get-date).AddDays(-10)} |
ForEach-Object {'c:\temp\bin\gzip.exe' $_.FullName}
答案 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)
}