此楼用于 上powershell脚本- <#
- 第九题
- 根据题意,a目录下有b目录,c文件,d文件。和a目录下有c文件,d文件。为相同目录。也就是说,忽略这个目录中的子目录。
-
- 本脚本在powershell命令行窗口运行时遇 $RECYCLE.BIN ,\System Volume Information, 之类的目录将显示错误,这是正常的,不用理会。
- 欢迎测试
- #>
-
-
-
- Write-Host "把F盘中存在重复情况的目录列举出来`r
- 注意:`r
- 只要文件夹中的文件列表相同,就认为是重复的文件夹,不需要判断大小、日期、md5等。"
-
- [system.reflection.assembly]::loadwithpartialname("System.text.encoding") | Out-Null
- function get-hash-md5($多行字符串)
- {
- $md5 = [System.Security.Cryptography.MD5]::Create()
- $字节数组 = [system.text.encoding]::Unicode.getbytes($多行字符串)
- $md5.ComputeHash($字节数组) | foreach -Begin{$filemd5hashcode=''} -Process{$filemd5hashcode += "{0:x2}" -f $_} -End{return $filemd5hashcode}
- }
-
- function pause2
- {
- Read-Host "已经暂停,请按回车继续 ..."
- }
-
- [system.reflection.assembly]::loadwithpartialname("System.Text") | Out-Null
- [int32]$long = 1024 * 1024 * 128 #128MB
- $大字符串 = New-Object System.Text.StringBuilder($long)
-
- $f盘所有目录 = Get-ChildItem f:\ -Recurse -Force | Where-Object {($_.PsIsContainer -eq $true) -and ( $_.GetFiles().Count -ne 0)}
- write-host "需要处理的目录数为:" $f盘所有目录.Length
-
- foreach ($aaa in $f盘所有目录)
- {
-
- $文件名列表哈希 = get-hash-md5 $aaa.GetFiles().name
- $字符串 = "" + $aaa.GetFiles().Count + "`t" + $aaa.FullName + "`t" + $文件名列表哈希
- $大字符串.AppendLine($字符串) | Out-Null
- # pause2
- }
-
- Add-Content "d:\f盘重复目录信息.txt" -value $大字符串
- #哈希值相同的,目录为重复目录,格式为:
- #47 F:\下载 1b7ae701a986cef7046ae48830315946
-
- write-host '------------------------脚本第二部分,对【d:\f盘重复目录信息.txt】进行数据处理-------------------------------'
- #
-
- $第一步 = Get-Content d:\f盘重复目录信息.txt | Select-Object @{N="目录路径";E={[string]$_.split("`t")[1]}},@{N="文件名列表哈希2";E={[string]$_.split("`t")[2]}} |Group-Object 文件名列表哈希2
- foreach ( $aaa in $第一步 )
- {
- if ($aaa.count -gt 1)
- {
- $aaa.group.目录路径 >> d:\f盘重复目录最终结果.txt
- "-----------------------------------------------" >> d:\f盘重复目录最终结果.txt
- }
-
- }
复制代码
|