返回列表 发帖

[其他] [已解决]批处理怎样命名文件名到相同CRC32值的文件上?

本帖最后由 a574045075 于 2019-11-20 10:36 编辑


这里有1和2文件夹,1和2文件夹里面的nds格式文件除了文件名不同之外。它们的crc32值是一样的,请问可不可以利用批处理查找1和2文件夹里面相同crc32值的文件并把1文件夹里的文件名命名到2文件夹相同crc32值的文件上?

酱油:
@echo off  & cd /d "%~dp0"
powershell "[ScriptBlock]::Create([regex]::Replace('77726974652d686f737420285b72656765785d3a3a5265706c6163652827363532663465643835623964303032653632366235393334353063663864356535326139272c272e7b347d272c7b5b636861725d5b696e745d28273078272b24617267732e76616c7565297d2929202d666f7265207265643b636d64202f632070617573653b24686173683d4765742d46696c654861736820272e5c315c2a2e6e647327202d416c676f726974686d20274d4435273b284765742d46696c654861736820272e5c325c2a2e6e647327202d416c676f726974686d20274d443527292e466f72656163687b24696e6465783d24686173682e686173682e696e6465786f6628245f2e68617368293b69662824696e646578202d67652030297b72656e20245f2e70617468202d4e65774e616d65202828676920245f2e70617468292e426173654e616d652b272d272b2867692024686173685b24696e6465785d2e50617468292e4e616d6529202d566572627d7d','.{2}',{[char][int]('0x'+$args.value)})).invoke()"
set/p="全部完成 按任意键退出"<nul&pause>nulCOPY
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

和 1  2 文件夹放在同层内
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

需下载第三方工具 crc32sum
@echo off & setlocal enabledelayedexpansion
REM 源文件夹1
set "fd1=E:\Test\1"
REM 源文件夹2
set "fd2=E:\Test\2"
for /f "delims=" %%i in ('crc32sum "%fd1%\*.nds"') do (
    set "s=%%i"
    for %%j in ("!s:~0,-9!") do set "_!s:~-8!=%%~nxj"
)
for /f "delims=" %%i in ('crc32sum "%fd2%\*.nds"') do (
    set "s=%%i"
    for %%j in (!s:~-8!) do (
        if defined _%%j ren "!s:~0,-9!" "!_%%j!"
    )
)
pauseCOPY
1

评分人数

TOP

function Get-MD5($filePath){
    $objMD5 = [System.Security.Cryptography.MD5]::Create('MD5');
    $stream = [IO.File]::Open($filePath, [IO.FileMode]::Open, [IO.FileAccess]::Read);
    [BitConverter]::ToString( $objMD5.ComputeHash($stream) );
    $stream.Close();
}
$fd1 = 'E:\Test\1';    #源文件夹1
$fd2 = 'E:\Test\2';    #源文件夹2
$ext = '*.nds';        #文件类型
$Hash = @{};
dir -Literal $fd1 -filter $ext | forEach {
    $md5 = Get-MD5 $_.FullName;
    $Hash[$md5] = $_.Name;
}
dir -Literal $fd2 -filter $ext | forEach {
    $md5 = Get-MD5 $_.FullName;
    if( $Hash.ContainsKey($md5) ){
        mv -Literal $_.FullName -Dest ($fd2 + '\' + $Hash[$md5]) -Force;
    }
}COPY

TOP

回复 2# xczxczxcz


    这个代码有错误,用不了,不过谢谢了.

TOP

回复 6# a574045075


    你的系统是Win7还是Win10,有可能是PowerShell版本跟2楼不一样。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

如果仅校验值的话 powershell 的 Get-FileHash 也可以一试 目前不支持校验crc32值
算法支持 MD5 SHA1、SHA256、SHA384、SHA512......
Get-FileHash *.nds  COPY

TOP

返回列表