PowerShell, как перебирать файлы и архивировать их - PullRequest
2 голосов
/ 11 ноября 2011

Первая разработка PowerShell - нужно сказать, что она не интуитивно понятна для сценариев Linux.

нужно перебирать файлы, чтобы архивировать их и получать ошибки - у кого-нибудь есть отзывы о хорошем лайнере?

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

Ответы [ 3 ]

4 голосов
/ 11 ноября 2011

Вам не хватает оператора вызова (&) для фактического выполнения команды в строке.Если вы этого не сделаете, строка будет напечатана в результате оценки выражения (а не в виде команды).

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
2 голосов
/ 11 ноября 2011

Приложения могут быть выполнены в Powershell, просто указав их имя / путь, вам не нужно заключать их в кавычки в виде строк, а затем использовать iex или &:

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

будет работать для почтовой части.

1 голос
/ 11 ноября 2011

Следующая версия вашего скрипта может пригодиться, если вы не можете полагаться на внешние инструменты:

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...