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

[文件操作] 批处理如何校验文件的crc32追加到文件名后面?

  1. D:\>crc32.exe xixi_0001.mp4
  2. CRC Verification Utility, Version 3.05
  3. Copyright (C) Microsoft, 1992-1997
  4. 100% complete
  5. CRC of file xixi_0001.mp4 (99738814 bytes) is 0xC27F18EA
复制代码
在网上找到一个crc32 如何写一个批处理集成到文件右键菜单里,并显示Hash && rename
点击后就把文件名修改成xixi_0001 0xC27F18EA.mp4

刚才用AI帮忙写了一个例子,修改了下基本可以用了
  1. @echo off
  2. set "file=%1"
  3. for /f "tokens=8" %%i in ('crc32 "%file%"') do (
  4.     echo file  : %file%
  5.     echo crc32 : %%i
  6.     set "newFileName=%~n1 %%i%~x1"
  7. )
  8. echo rename: %newFileName%
  9. ren "%file%" "%newFileName%"
复制代码
这样写有什么隐患吗? 还有更好的写法吗?

输出结果就这样:
  1. D:\>"hash & rename.bat" D:\pm860.mp4
  2. 100% complete
  3. file  : D:\pm860.mp4
  4. crc32 : 0x4E5DA11A
  5. rename: pm860 0x4E5DA11A.mp4
复制代码

TOP

回复 3# Batcher
是的,你一眼看出空格问题了,厉害!

请问该怎么修改?

TOP

回复 4# 77七
你这个更简洁

还不知道论坛上有crc32呢 找了一大圈,你提供的crc32 输出结果只有单纯的crc32值,
那么 “delims=” 不用要就可以了吧。

TOP

回复  wqte45


2楼第2行改成这样试试:
set "file=%~1"
Batcher 发表于 2024-2-19 13:52


改完之后,获取的crc32又错了。
  1. D:\>crc32.exe xixi_0001.mp4
  2. CRC Verification Utility, Version 3.05
  3. Copyright (C) Microsoft, 1992-1997
  4. 100% complete
  5. CRC of file xixi_0001.mp4 (99738814 bytes) is 0xC27F18EA
复制代码
这一行会变化,怎么样准确的获取最后一行的 is后面的 0x内容?

TOP

回复 3# Batcher
  1. @echo off
  2. for /f "skip=3 tokens=*" %%i in ('crc32 "%~1"') do (
  3.     set str=%%i
  4.     echo file  : %~1
  5.     echo crc32 : %str:~-8%
  6.     echo rename: %~n1 %str:~-8%%~x1"
  7. )
复制代码
我这个怎么不稳定呢? 有时候显示的crc32时错的(是上一次其他文件的crc32)
保留的有缓冲吗?
  1. file  : D:\Everything 0xCEA21FF1 CEA21FF1.ini
  2. crc32 : CEA21FF1
  3. rename: Everything 0xCEA21FF1 CEA21FF1 CEA21FF1.ini"
  4. D:\>"hash & rename.bat" "D:\Run History 2DED4E27 2DED4E27.csv"
  5. 100% complete
  6. file  : D:\Run History 2DED4E27 2DED4E27.csv
  7. crc32 : CEA21FF1
  8. rename: Run History 2DED4E27 2DED4E27 CEA21FF1.csv"
  9. D:\>"hash & rename.bat" "D:\Run History 2DED4E27 2DED4E27.csv"
  10. 100% complete
  11. file  : D:\Run History 2DED4E27 2DED4E27.csv
  12. crc32 : 2DED4E27
  13. rename: Run History 2DED4E27 2DED4E27 2DED4E27.csv"
复制代码

TOP

回复 10# aloha20200628


    最后还是借鉴了你的代码 你看看怎么样?
  1. @echo off
  2. for /f "skip=3 delims=" %%i in ('crc32 "%~1"') do set str=%%i
  3. echo file  : %~1
  4. echo crc32 : %str:~-8%
  5. echo rename: %~n1 %str:~-8%%~x1
  6. ren "%~1" "%~n1 %str:~-8%%~x1"
复制代码
我之前写的发现有问题,有时候成功 有时候下一次获取的crc32 时上一次运行的别的文件的crc
感觉像是缓存到下一次了
我之前的问题代码你也看看,我感觉是不是 写到循环体里面的原因,借鉴你的代码,我写到循环体外面就没问题,真奇怪
  1. @echo off
  2. for /f "skip=3 tokens=*" %%i in ('crc32 "%~1"') do (
  3.     set str=%%i
  4.     echo file  : %~1
  5.     echo crc32 : %str:~-8%
  6.     echo rename: %~n1 %str:~-8%%~x1
  7. )
复制代码
空文件都输出crc,在测试别的还是 多测试几次就更新了
  1. D:\>"hash & rename.bat"
  2. file  :
  3. crc32 : 2DED4E27
  4. rename:  2DED4E27
  5. file  :
  6. crc32 : 2DED4E27
  7. rename:  2DED4E27
  8. D:\>"hash & rename.bat" "a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE.mp4"
  9. 100% complete
  10. file  : a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE.mp4
  11. crc32 : cified.
  12. rename: a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE cified..mp4
  13. D:\>"hash & rename.bat" "a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE.mp4"
  14. 100% complete
  15. file  : a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE.mp4
  16. crc32 : 756ED4BE
  17. rename: a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE 756ED4BE.mp4
  18. D:\>"hash & rename.bat" "a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE.mp4"
  19. 100% complete
  20. file  : a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE.mp4
  21. crc32 : 756ED4BE
  22. rename: a.txt 756ED4BE 756ED4BE 756ED4BE 756ED4BE 756ED4BE.mp4
  23. D:\>
复制代码

TOP

回复 13# aloha20200628
代码里for里面的明明对参数加双引号了 crc32 "%~1"  但是在cmd里拖进去文件的时候 特别文件名里有&符号的话。
理解成两条命令了  bat里参数都加双引号了   总不能用的时候还要手动再加一次吧?有啥好方法吗?
  1. D:\Hash & Rename\2>crc32 C:\Users\MEN\Desktop\1&2.c
  2. CRC Verification Utility, Version 3.05
  3. Copyright (C) Microsoft, 1992-1997
  4. ERROR: Failed to open file C:\Users\MEN\Desktop\1
  5. (2) The system cannot find the file specified.
  6. '2.c' 不是内部或外部命令,也不是可运行的程序
  7. 或批处理文件。
复制代码

TOP

回复 15# aloha20200628


    好的 谢谢回复,我新手刚遇到这个问题

TOP

返回列表