惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
Arctic Wolf
T
Tenable Blog
T
Troy Hunt's Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy & Cybersecurity Law Blog
NISL@THU
NISL@THU
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Hacker News: Front Page
S
Secure Thoughts
AWS News Blog
AWS News Blog
L
LINUX DO - 最新话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
MIT News - Artificial intelligence
T
Tor Project blog
S
Schneier on Security
PCI Perspectives
PCI Perspectives
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
美团技术团队
Google DeepMind News
Google DeepMind News
V
Visual Studio Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
T
The Exploit Database - CXSecurity.com
罗磊的独立博客
T
Threat Research - Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
V
V2EX
C
CXSECURITY Database RSS Feed - CXSecurity.com
Stack Overflow Blog
Stack Overflow Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
GRAHAM CLULEY
L
LINUX DO - 热门话题
D
Docker
J
Java Code Geeks
GbyAI
GbyAI
H
Heimdal Security Blog
The Hacker News
The Hacker News
MongoDB | Blog
MongoDB | Blog
V
Vulnerabilities – Threatpost
T
Tailwind CSS Blog
Cloudbric
Cloudbric
TaoSecurity Blog
TaoSecurity Blog
C
CERT Recently Published Vulnerability Notes
Y
Y Combinator Blog
Recorded Future
Recorded Future
Cisco Talos Blog
Cisco Talos Blog
T
Threatpost
The Register - Security
The Register - Security
Hacker News - Newest:
Hacker News - Newest: "LLM"

博客园 - Icebird

谈谈批处理文件里的注释 在.NET中使用PhysFS来挂载压缩包(zip) 用户中心 - 博客园 Password for ReportBuilder Enterprise v10.08 Retail For Delphi 7-Lz0 [Delphi] DUnitID 0.17.4725 RSSReader JavaScript Edition [Delphi] GetClass与RegisterClass的应用一例 DelForEx v2.5 for Delphi 2007 我的Delphi开发经验谈 JBookManager v1.00.2008314 (编辑管理您的Jar电子书) Windows优化大师的一点研究 [Delphi] 发布QuickenPanel Component LINQ to JavaScript [PowerShell] 将rar文件转换为zip格式 [PowerShell] GBK简繁转换 [PowerShell] PowerShell学习脚印 JavaScript测试页面 DevExpress ExpressScheduler 快速编译批处理文件 备份工具 SmartBackup的源代码
[PowerShell] SFV生成与校验
Icebird · 2008-02-14 · via 博客园 - Icebird

# Author: Icebird@cnblogs
#
 Purpose: Check-SFV (csfv) and Make-SFV (msfv)

function Global:Check-SFV([string]$filename = "")
{
trap
{
  
$_.InvocationInfo
  write
-host ("{0,-17:S}{1} {2}" -f "Exception"":"$_.Exception.Message)
  
break
}

    
if (($filename.Length -eq 0-or !($filename -match ".sfv$"))
    {
        
return "Usage: Check-SFV filename.sfv"
    }
    dir 
$filename > $null
    
$sfv = type $filename | ? {$a = $_.Trim(); ($a.Length -gt 0-and !($a -match "^[#;]")}
    [hashtable] 
$table = @{}
    [regex] 
$regex = "^(.+)`\s+([0-9a-zA-Z]+)$"
    
$sfv | % {
        
$m = $regex.matches($_)
        
if (($m.Count -gt 0-and $m[0].Success)
        {
            
$table.Add($m[0].Groups[1].Value, $m[0].Groups[2].Value)
        }
    }
    
$path = split-path($filename)
    
if ($path.Length -gt 0)
    {
        
$path += "\"
    }
    
$table.Keys | sort | % {
        
$file = "$path$_"
        
$crc = $table[$_].ToUpper()
        
$regex = "bytes[)] is 0x(.{8,8})"
        
$r = CRC "$file"
        
$m = $regex.matches($r)
        
if (($m.Count -gt 0-and $m[0].Success)
        {
            
if ($m[0].Groups[1].Value -eq $crc)
            {
                echo 
"$file is OK"
            }
            
else
            {
                echo 
"$file is damaged"
            }
        }
        
else
        {
            echo 
"$file is missing"
        }
    }
}

function Global:Make-SFV([string]$path = "",[string]$filename = "")
{
trap
{
  
$_.InvocationInfo
  write
-host ("{0,-17:S}{1} {2}" -f "Exception"":"$_.Exception.Message)
  
break
}
    
if ($path.Length -eq 0)
    {
        
return "Usage: Make-SFV path [filename.sfv]"
    }
    
$files = (dir $path -exclude *.sfv | ? { $_ -is [System.IO.FileInfo] } | sort { $_.Name })
    
if (($files -eq $null-or ($files.Count -eq 0))
    {
        
return
    }
    
if ($filename.Length -eq 0)
    {
        
if ($files -is [System.IO.FileInfo])
        {
            [regex] 
$regex = $files.Extension + "$"
            
$filename = $files.FullName -replace $regex,""
        }
        
else
        {
            
$filename = $files[0].Directory.FullName + "\" + $files[0].Directory.Name
        }
    }
    
if (!($filename -match "[.]sfv$"))
    {
        
$filename += ".sfv"
    }
    
$temp = "${env:Temp}\makesfv.tmp"
    echo 
"; 由 PowerShell.MakeSFV 生成" > $temp
    [string] 
$now = get-date
    echo (
"; 使用 CRC Verification Utility v3.05 于 " + $now>> $temp
    echo 
";" >> $temp
    
$files | % {
        
$r = CRC "$_"
        [regex] 
$regex = "bytes[)] is 0x(.{8,8})"
        
$m = $regex.matches($r)
        
if (($m.Count -gt 0-and $m[0].Success)
        {
            echo (
$_.Name + " " + $m[0].Groups[1].Value) >> $temp
        }
    }
    type 
"$temp" | out-file $filename -encoding default #转为ansi格式
    type "$filename"
    del 
"$temp"
}

if ((dir alias: | ? { $_.Name -eq "csfv"  }) -eq $null)
{
new
-alias csfv Check-SFV -scope global
}
if ((dir alias: | ? { $_.Name -eq "msfv"  }) -eq $null)
{
new
-alias msfv Make-SFV -scope global
}

这段脚本将增加两个全局函数Check-SFV (csfv) 和 Make-SFV (msfv),用途是生成SFV与校验SFV

注意:
1. CRC.EXE在搜索路径里的任意目录内

Usage Example:

msfv C:\book\*.rar
msfv C:\book\*.rar D:\book.sfv
csfv test.sfv
csfv d:\cd\cd.sfv

crc.exe下载:
https://files.cnblogs.com/Icebird/crc.rar