Board logo

标题: [其他] [已解决]批处理怎样命名文件名到相同CRC32值的文件上? [打印本页]

作者: a574045075    时间: 2019-11-19 15:54     标题: [已解决]批处理怎样命名文件名到相同CRC32值的文件上?

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


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

酱油:
  1. @echo off  & cd /d "%~dp0"
  2. powershell "[ScriptBlock]::Create([regex]::Replace('77726974652d686f737420285b72656765785d3a3a5265706c6163652827363532663465643835623964303032653632366235393334353063663864356535326139272c272e7b347d272c7b5b636861725d5b696e745d28273078272b24617267732e76616c7565297d2929202d666f7265207265643b636d64202f632070617573653b24686173683d4765742d46696c654861736820272e5c315c2a2e6e647327202d416c676f726974686d20274d4435273b284765742d46696c654861736820272e5c325c2a2e6e647327202d416c676f726974686d20274d443527292e466f72656163687b24696e6465783d24686173682e686173682e696e6465786f6628245f2e68617368293b69662824696e646578202d67652030297b72656e20245f2e70617468202d4e65774e616d65202828676920245f2e70617468292e426173654e616d652b272d272b2867692024686173685b24696e6465785d2e50617468292e4e616d6529202d566572627d7d','.{2}',{[char][int]('0x'+$args.value)})).invoke()"
  3. set/p="全部完成 按任意键退出"<nul&pause>nul
复制代码

作者: xczxczxcz    时间: 2019-11-19 21:47

和 1  2 文件夹放在同层内
作者: WHY    时间: 2019-11-20 00:01

需下载第三方工具 crc32sum
  1. @echo off & setlocal enabledelayedexpansion
  2. REM 源文件夹1
  3. set "fd1=E:\Test\1"
  4. REM 源文件夹2
  5. set "fd2=E:\Test\2"
  6. for /f "delims=" %%i in ('crc32sum "%fd1%\*.nds"') do (
  7.     set "s=%%i"
  8.     for %%j in ("!s:~0,-9!") do set "_!s:~-8!=%%~nxj"
  9. )
  10. for /f "delims=" %%i in ('crc32sum "%fd2%\*.nds"') do (
  11.     set "s=%%i"
  12.     for %%j in (!s:~-8!) do (
  13.         if defined _%%j ren "!s:~0,-9!" "!_%%j!"
  14.     )
  15. )
  16. pause
复制代码

作者: WHY    时间: 2019-11-20 00:07

  1. function Get-MD5($filePath){
  2.     $objMD5 = [System.Security.Cryptography.MD5]::Create('MD5');
  3.     $stream = [IO.File]::Open($filePath, [IO.FileMode]::Open, [IO.FileAccess]::Read);
  4.     [BitConverter]::ToString( $objMD5.ComputeHash($stream) );
  5.     $stream.Close();
  6. }
  7. $fd1 = 'E:\Test\1';    #源文件夹1
  8. $fd2 = 'E:\Test\2';    #源文件夹2
  9. $ext = '*.nds';        #文件类型
  10. $Hash = @{};
  11. dir -Literal $fd1 -filter $ext | forEach {
  12.     $md5 = Get-MD5 $_.FullName;
  13.     $Hash[$md5] = $_.Name;
  14. }
  15. dir -Literal $fd2 -filter $ext | forEach {
  16.     $md5 = Get-MD5 $_.FullName;
  17.     if( $Hash.ContainsKey($md5) ){
  18.         mv -Literal $_.FullName -Dest ($fd2 + '\' + $Hash[$md5]) -Force;
  19.     }
  20. }
复制代码

作者: a574045075    时间: 2019-11-20 10:36

回复 2# xczxczxcz


    这个代码有错误,用不了,不过谢谢了.
作者: Batcher    时间: 2019-11-20 12:34

回复 6# a574045075


    你的系统是Win7还是Win10,有可能是PowerShell版本跟2楼不一样。
作者: terse    时间: 2019-11-20 16:57

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





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2