找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22001|回复: 8

[文件操作] [已解决]如何用bat获取信息,在文件名后面添加?

[复制链接]
发表于 2022-3-17 20:46:21 | 显示全部楼层 |阅读模式
本帖最后由 czvde 于 2022-3-24 20:04 编辑

123.txt
bat效果:
123_【文件的CRC32值】.txt

已解决!!
发表于 2022-3-17 21:23:26 | 显示全部楼层
本帖最后由 523066680 于 2022-3-17 21:24 编辑

这个用批处理做可能代码并不复杂,不过我很久没写过批处理了。
以下Perl代码,写的有点繁杂了。
  1. use Modern::Perl;
  2. use Crypt::Checksum ':all';
  3. for my $f ( grep { -f } glob "*" )
  4. {
  5.         my $crc = crc32_file_hex( $f );
  6.         unless ( $f =~/$crc/ )
  7.         {
  8.                 my $newname = $f;
  9.                 $newname =~s/(\.\w+)$/_$crc$1/;
  10.                 rename $f, $newname;
  11.         }
  12. }
复制代码
话说,Strawberry perl 自带一个 crc32.bat 可以命令行调用
 楼主| 发表于 2022-3-17 21:40:09 | 显示全部楼层
本帖最后由 czvde 于 2022-3-18 13:47 编辑

回复 2# 523066680


    已解决
发表于 2022-3-17 22:34:17 | 显示全部楼层
本帖最后由 523066680 于 2022-3-17 22:35 编辑

这个需要安装Perl,保存为.pl格式运行
https://strawberryperl.com/  

应该等下也有其他答主给出更直接的方案。
 楼主| 发表于 2022-3-17 23:20:17 | 显示全部楼层
本帖最后由 czvde 于 2022-3-18 13:48 编辑

回复 4# 523066680


  很好用,谢谢
发表于 2022-3-18 08:53:47 | 显示全部楼层
  1. use Modern::Perl;
  2. use Crypt::Checksum ':all';

  3. for my $f ( grep { -f } glob "*" )
  4. {
  5.         # mp4 和 txt 以外的格式跳过
  6.         next unless $f =~/\.(mp4|txt)$/i;

  7.         # 获取校验码
  8.         my $crc = crc32_file_hex( $f );
  9.        
  10.         # 除非文件名中包含校验值,否则执行替换(避免重复追加)
  11.         unless ( $f =~/$crc/ )
  12.         {
  13.                 my $newname = $f;
  14.                 $newname =~s/(\.\w+)$/_$crc$1/;
  15.                 rename $f, $newname;
  16.         }
  17. }
复制代码
 楼主| 发表于 2022-3-18 11:14:56 | 显示全部楼层
本帖最后由 czvde 于 2022-3-18 13:51 编辑

回复 6# 523066680



实现效果:
123_【f87918ea】.txt
发表于 2022-3-18 12:06:02 | 显示全部楼层
回复 7# czvde

    你用系统默认的记事本编辑器,编辑另存为,看看下方显示的编码是不是 UTF8, 如果是,可以用以下代码
(现在Win10系统记事本好像默认是UTF8)
  1. use utf8;
  2. use Encode;
  3. use Modern::Perl;
  4. use Crypt::Checksum ':all';

  5. for my $f ( grep { -f } glob "*" )
  6. {
  7.     # mp4 和 txt 以外的格式跳过
  8.     next unless $f =~/\.(mp4|txt)$/i;

  9.     # 获取校验码
  10.     my $crc = crc32_file_hex( $f );
  11.    
  12.     # 除非文件名中包含校验值,否则执行替换(避免重复追加)
  13.     unless ( $f =~/$crc/ )
  14.     {
  15.         my $newname = $f;
  16.         $newname =~s/(\.\w+)$/encode('gbk', "_【$crc】").$1/e;
  17.         rename $f, $newname;
  18.     }
  19. }
复制代码

评分

参与人数 1技术 +1 收起 理由
czvde + 1 谢谢

查看全部评分

发表于 2022-3-18 12:32:04 | 显示全部楼层
test.bat
ansi编码,需要下载coder.exe
  1. @echo off & cd /d "%~dp0"
  2. for %%i in (*) do (
  3.         if not "%~0" == "%%~fi" (
  4.                 for /f "tokens=1* delims=: " %%a in ('coder -s -a gh -f "%%i" ^| findstr /b /C:"CRC32"') do (
  5.                         echo %%~ni_【%%b】%%~xi
  6.                         rename "%%~i" "%%~ni_【%%b】%%~xi"
  7.                 )
  8.         )
  9. )
  10. pause&exit
复制代码

评分

参与人数 1技术 +1 收起 理由
czvde + 1 谢谢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 05:50 , Processed in 0.029366 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表