powershell脚本用于存档许多子文件夹中的文件

时间:2013-10-07 16:11:13

标签: powershell

我正在尝试写下一个脚本,它可以帮助我存档多个子目录中的多个文件。我还需要排除特定文件。  到目前为止,我得到了几行脚本

$files = Get-ChildItem -Recurse -path "D:\path\to\folder" -Exclude *i.jpeg |
  Where-Object { $_.FullName -notmatch '\\excludedir($|\\)' }
foreach ($file in $files)
{
  C:\Program Files\7-zip\7z.exe" a -t7z -mx=9 -ms=on $file
}

基本上,它以递归方式搜索.jpeg文件的所有子文件夹,并给出我们的列表,不包括那些以'i'.jpeg结尾的文件,让我们说'photoi.jpeg'。 这是有效的,但我无法进入下一步,因为我需要为所有列出的文件运行7zip。

有人可以帮助我吗? 在此先感谢:)

2 个答案:

答案 0 :(得分:0)

不确定你是否正在尝试保存一个大的单个拉链,但是我做了类似的事情:

Set-Alias sz "C:\Program Files\7-zip\7z.exe"

$files = Get-ChildItem -Recurse -path "D:\path\to\folder" -Exclude *i.jpeg |
  Where-Object { $_.FullName -notmatch '\\excludedir($|\\)' }
foreach ($file in $files)
{
  $output = sz a -t7z  -mx=9 -ms=on "$File" 2>&1
}

如果我使用命令行选项对其进行了测试,则可能必须修改压缩线。另一个不错的选择是我已经捕获了命令的输出以用于报告目的。

答案 1 :(得分:0)

您需要将文件名对象传递给7z命令 @listfile 语法可以提供帮助:

Get-ChildItem ...| Where-Object ...| select -expand fullname| out-file alist.txt -encoding utf8
'C:\Program Files\7-zip\7z.exe' a archive.7z -mx=9 -ms=on `@alist.txt
Remove-item .\alist.txt

注意@

之前的反引号