[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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


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

酱油:
  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
复制代码
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

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

TOP

需下载第三方工具 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
复制代码
1

评分人数

TOP

  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. }
复制代码

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......
  1. Get-FileHash *.nds  
复制代码

TOP

返回列表