Board logo

标题: [文本处理] 如何用certutil -hashfile生成的文档,不显示文件的全路径。 [打印本页]

作者: 2287089723    时间: 2023-4-27 14:39     标题: 如何用certutil -hashfile生成的文档,不显示文件的全路径。

本帖最后由 2287089723 于 2023-4-27 14:58 编辑

我在文件夹“待检测文档”里放了一个批处理程序,用来生成文件夹“待检测文档”及其子目录里所有文件的SHA256值,并将所有SHA256生成文件hash_data。


“待检测文档”目录结构如下
  1. 卷 Windows 的文件夹 PATH 列表
  2. 卷序列号为 XYZ9-ABC1
  3. C:.
  4. │  01Metadata.bat
  5. │  02Appraisal.bat
  6. │  
  7. ├─metadata
  8. │      meta_data
  9. │      
  10. └─测试用资料
  11.        《002》.pdf
  12.        《003A》.pdf
  13.        《003B》.pdf
  14.        202001ZXDS13.jpg
  15.        202001ZXDS14.jpg
复制代码
代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if not exist metadata md metadata
  4. %~d0
  5. cd %~dp0
  6. if exist metadata\hash_data del metadata\hash_data
  7. for /R %%s in (*) do (
  8. (certutil -hashfile "%%s" SHA256) >> metadata\hash_data
  9. )
复制代码
由于文件夹“待检测文档”在目录C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\中。
所有得到的hash_data文件内容如下。

hash_data文件内容
  1. SHA256 的 C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\01Metadata.bat 哈希:
  2. a16e1970a7418a38ce6de7d3af1246b1e388dd61c1ba0dd9aab5efa6fe4025b9
  3. CertUtil: -hashfile 命令成功完成。
  4. SHA256 的 C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\02Appraisal.bat 哈希:
  5. 4a06ed85d2e12f9804aaef3aa22418ecfd1a38daada6756f30136d8a48f7933a
  6. CertUtil: -hashfile 命令成功完成。
  7. SHA256 的 C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\metadata\meta_data 哈希:
  8. f864689c994b1e4f711295cf9d8d29f5a850dd0e62f94893b402f7f37974c28d
  9. CertUtil: -hashfile 命令成功完成。
  10. SHA256 的 C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\测试用资料\《002》.pdf 哈希:
  11. 6847b6ee3edf429c704bcc50c808248af15b8752ca32acb468dfb692a820f4fc
  12. CertUtil: -hashfile 命令成功完成。
  13. SHA256 的 C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\测试用资料\《003A》.pdf 哈希:
  14. 05d556634055c3439f50b66b9ef2298a627416d9993abbea49499ec03282caf6
  15. CertUtil: -hashfile 命令成功完成。
  16. SHA256 的 C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\测试用资料\《003B》.pdf 哈希:
  17. ef406eb8790d4447cccffed206f65233d1cc1aae1d369ebfc8f232ead57dee72
  18. CertUtil: -hashfile 命令成功完成。
  19. SHA256 的 C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\测试用资料\202001ZXDS13.jpg 哈希:
  20. 3843ed7c332da96c19cec954c0f555c1f21fcea72a1fd00b3200fb2ae4a00b89
  21. CertUtil: -hashfile 命令成功完成。
  22. SHA256 的 C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\测试用资料\202001ZXDS14.jpg 哈希:
  23. 55e2e66251971f3e8a22eb20ba3cabe2ad65f7a94400f341f0e161f9e48e7ec8
  24. CertUtil: -hashfile 命令成功完成。
  25. ...
复制代码
可以看到文件的路径是全路径:
  1. C:\Users\XYZ\Documents\Workspace\batch\data\0199\tool\待检测文档\测试用资料\202001ZXDS13.jpg
复制代码
这太长了,我希望hash_data中记录,以“待检测文档”为根目录的路径,如下:
  1. \测试用资料\202001ZXDS13.jpg
复制代码
希望的hash_data内容如下:
  1. SHA256 的 01Metadata.bat 哈希:
  2. a16e1970a7418a38ce6de7d3af1246b1e388dd61c1ba0dd9aab5efa6fe4025b9
  3. CertUtil: -hashfile 命令成功完成。
  4. SHA256 的 02Appraisal.bat 哈希:
  5. 4a06ed85d2e12f9804aaef3aa22418ecfd1a38daada6756f30136d8a48f7933a
  6. CertUtil: -hashfile 命令成功完成。
  7. SHA256 的 metadata\meta_data 哈希:
  8. f864689c994b1e4f711295cf9d8d29f5a850dd0e62f94893b402f7f37974c28d
  9. CertUtil: -hashfile 命令成功完成。
  10. SHA256 的 测试用资料\《002》.pdf 哈希:
  11. 6847b6ee3edf429c704bcc50c808248af15b8752ca32acb468dfb692a820f4fc
  12. CertUtil: -hashfile 命令成功完成。
  13. SHA256 的 测试用资料\《003A》.pdf 哈希:
  14. 05d556634055c3439f50b66b9ef2298a627416d9993abbea49499ec03282caf6
  15. CertUtil: -hashfile 命令成功完成。
  16. SHA256 的 测试用资料\《003B》.pdf 哈希:
  17. ef406eb8790d4447cccffed206f65233d1cc1aae1d369ebfc8f232ead57dee72
  18. CertUtil: -hashfile 命令成功完成。
  19. SHA256 的 测试用资料\202001ZXDS13.jpg 哈希:
  20. 3843ed7c332da96c19cec954c0f555c1f21fcea72a1fd00b3200fb2ae4a00b89
  21. CertUtil: -hashfile 命令成功完成。
  22. SHA256 的 测试用资料\202001ZXDS14.jpg 哈希:
  23. 55e2e66251971f3e8a22eb20ba3cabe2ad65f7a94400f341f0e161f9e48e7ec8
  24. CertUtil: -hashfile 命令成功完成。
  25. ...
复制代码
请问在不安装其他软件的情况下,用什么代码可以实现这个要求。
作者: buyiyang    时间: 2023-4-27 14:56

  1. setlocal enabledelayedexpansion
  2. for /R %%s in (*) do (
  3. set "f=%%s"
  4. set "f=!f:%~dp0=!"
  5. (certutil -hashfile "!f!" SHA256) >> metadata\hash_data
  6. )
复制代码

作者: 2287089723    时间: 2023-4-27 15:09

buyiyang 发表于 2023-4-27 14:56



    谢谢。问题完美解决。
  1. set "f=%%s"
  2. set "f=!f:%~dp0=!"
复制代码
刚学批处理,知道“%~dp0”是驱动器号和路径。但不理解,为什么加上“f:”后,就能去掉批处理所在目录之前的路径。

这块还望点拨一二。
作者: buyiyang    时间: 2023-4-27 15:24

回复 3# 2287089723


    set的变量替换,!f:%~dp0=!将f变量的值中的脚本路径%~dp0替换为空
作者: 2287089723    时间: 2023-4-27 15:30

回复 4# buyiyang


    明白了。谢谢。




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