0

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

$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。

有人可以帮我吗?提前致谢 :)

4

2 回答 2

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

注意@之前的反引号

于 2013-10-08T11:09:05.157 回答
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
}

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

于 2013-10-07T16:53:57.487 回答