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

推荐订阅源

雷峰网
雷峰网
Recorded Future
Recorded Future
B
Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
GbyAI
GbyAI
IT之家
IT之家
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
S
SegmentFault 最新的问题
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
The Cloudflare Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
腾讯CDC
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
aimingoo的专栏
aimingoo的专栏
博客园 - Franky
Martin Fowler
Martin Fowler
P
Proofpoint News Feed
月光博客
月光博客
博客园_首页
C
Check Point Blog
宝玉的分享
宝玉的分享
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Tenable Blog
Vercel News
Vercel News
SecWiki News
SecWiki News
Security Latest
Security Latest
Microsoft Security Blog
Microsoft Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
阮一峰的网络日志
阮一峰的网络日志
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google Online Security Blog
Google Online Security Blog
N
News and Events Feed by Topic
Y
Y Combinator Blog
U
Unit 42
The Register - Security
The Register - Security
云风的 BLOG
云风的 BLOG
K
Kaspersky official blog
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
Jina AI
Jina AI

博客园 - 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