我有以下脚本在目录中的.zip文件上运行,该目录具有包含许多文件的整个目录结构。然后这些文件运行7zip以提取它们,然后将.eml添加到提取的文件中。
& "c:\program files\7-zip\7z.exe" x c:\TestZip -r -oC:\TestRestore 2> c:\TestLog\ziplog.txt
& "c:\program files\7-zip\7z.exe" x c:\TestRestore -r -aos -oc:\TestExtract 2> c:\TestLog\sevenzip.txt
gci -path "c:\TestExtract" -file | rename-item -newname {$PSItem.name + ".eml"}
我的问题是,在这些文件中,有时7zip无法完成最终提取,因为它不会将其视为存档。我发现这些特殊的文件,如果我只是把.eml放在他们身上,他们可以作为电子邮件访问。因此,当存档无法解压缩时,我将输出写入sevenzip.txt文件。 我需要帮助的是如何读取此文件以获取文件名并将它们放在目录中,以便我可以添加.eml扩展名。 sevenzip.txt文件中的输出示例如下
ERROR: c:\TestRestore\0\0\54\3925ccb78f80d28b7569b6759554d.0_4011
Can not open the file as archive
ERROR: c:\TestRestore\0\0\5b\6fa7acb219dec5d9e55d4eadd6eb1.0_3958
Can not open the file as archive
对于如何做到这一点,我们将非常感谢。
很抱歉所有的评论,但我正在努力
$SourceFile = 'c:\testlog\sevenzip.txt'
$DestinationFile = 'c:\testlog\testlogextractnew.txt'
$Pattern = 'c:\\TestRestore\\' (Get-Content $SourceFile) |
% {if ($_ -match $Pattern){$_}} |
Set-Content $DestinationFile (Get-Content $DestinationFile).replace('ERROR: ', '') |
Set-Content $DestinationFile (Get-Content$DestinationFile).replace('7z.exe : ', '') |
Set-Content $DestinationFile
答案 0 :(得分:0)
如果没有其他错误,那么您可以使用正则表达式模式匹配从文件中选择这些文件名:
if($(window).scrollTop() + $(window).height() == $(document).height()-200) {
alert("bottom!");
//$('.Go').toggleClass("GoToBottom GoToTop");
}
可能用
重命名$filesToFix = Select-String -Pattern "ERROR: (.*)" -LiteralPath 'c:\testlog\sevenzip.txt' |
ForEach-Object {$_.Matches.Groups[1].Value}
如果可能存在其他错误并且您只需要这些错误,则需要在匹配方面做更多工作:
$filesToFix | ForEach-Object {
Rename-Item -LiteralPath $_ -NewName {"$_.eml"}
}
答案 1 :(得分:0)
这是我在评论中结束的内容,因为我不知道如何格式化,但现在已经解决了这个问题,所以希望这样可以让它更容易理解,以防它有用。
此部分创建无法使用其目录位置提取的所有文件的列表。用于下一节。
$SourceFile = 'c:\testlog\sevenzip.txt' $DestinationFile = c:\testlog\testlogextractnew.txt'
$Pattern = 'c:\\TestRestore\\'
(Get-Content $SourceFile) | % {if ($_ -match $Pattern){$_}} | Set-Content $DestinationFile
(Get-Content $DestinationFile).replace('ERROR: ', '') | Set-Content $DestinationFile
(Get-Content $DestinationFile).replace('7z.exe : ', '') | Set-Content $DestinationFile
这只是一些结果检查
Get-Content C:\testlog\testlogextractnew.txt | Measure-Object –Line > c:\testlog\numberoffilesthatfailed.txt
这会将txt文件中列出的所有文件复制到另一个目录
c:\testlog\testlogextractnew.txt | copy-item -destination "c:\TestCopy"
这会将当前扩展名重命名为.eml
gci -path "C:\TestCopy" -file | rename-item -newname { [io.path]::changeextension($_.name, "eml")}