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

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

本帖最后由 czvde 于 2022-3-24 20:04 编辑

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

已解决!!

本帖最后由 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 可以命令行调用

TOP

本帖最后由 czvde 于 2022-3-18 13:47 编辑

回复 2# 523066680


    已解决

TOP

本帖最后由 523066680 于 2022-3-17 22:35 编辑

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

应该等下也有其他答主给出更直接的方案。

TOP

本帖最后由 czvde 于 2022-3-18 13:48 编辑

回复 4# 523066680


  很好用,谢谢

TOP

  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. unless ( $f =~/$crc/ )
  11. {
  12. my $newname = $f;
  13. $newname =~s/(\.\w+)$/_$crc$1/;
  14. rename $f, $newname;
  15. }
  16. }
复制代码

TOP

本帖最后由 czvde 于 2022-3-18 13:51 编辑

回复 6# 523066680



实现效果:
123_【f87918ea】.txt

TOP

回复 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

评分人数

TOP

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

评分人数

TOP

返回列表