标题: [其他] [已解决]批处理怎样命名文件名到相同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
酱油:- @echo off & cd /d "%~dp0"
- powershell "[ScriptBlock]::Create([regex]::Replace('77726974652d686f737420285b72656765785d3a3a5265706c6163652827363532663465643835623964303032653632366235393334353063663864356535326139272c272e7b347d272c7b5b636861725d5b696e745d28273078272b24617267732e76616c7565297d2929202d666f7265207265643b636d64202f632070617573653b24686173683d4765742d46696c654861736820272e5c315c2a2e6e647327202d416c676f726974686d20274d4435273b284765742d46696c654861736820272e5c325c2a2e6e647327202d416c676f726974686d20274d443527292e466f72656163687b24696e6465783d24686173682e686173682e696e6465786f6628245f2e68617368293b69662824696e646578202d67652030297b72656e20245f2e70617468202d4e65774e616d65202828676920245f2e70617468292e426173654e616d652b272d272b2867692024686173685b24696e6465785d2e50617468292e4e616d6529202d566572627d7d','.{2}',{[char][int]('0x'+$args.value)})).invoke()"
- set/p="全部完成 按任意键退出"<nul&pause>nul
复制代码
作者: xczxczxcz 时间: 2019-11-19 21:47
和 1 2 文件夹放在同层内
作者: WHY 时间: 2019-11-20 00:01
需下载第三方工具 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!"
- )
- )
- pause
复制代码
作者: WHY 时间: 2019-11-20 00:07
- 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;
- }
- }
复制代码
作者: 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......复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |