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

[文本处理] 【已解决】求助批处理base64合成文件

[复制链接]
发表于 2025-3-28 00:32:00 | 显示全部楼层
回复 14# 304802301


    将7楼代码第22行换成下面的 ,因为使用的是字符串 ,base64解码后涉及字符串编码问题 ,简单的判断了下编码

  1. $pw="";if($str -match '(?<=uniquecode=")[^"]*(?=")'){
  2. if($Matches[0]){$pw=$matches[0];$o=$pw.Length%4
  3. if($o){$pw=$pw+'===='.Substring(0,4-$o)}
  4. $pwdc=[text.encoding]::utf8.getstring([convert]::FromBase64String($pw))
  5. if($pwdc -match '\?'){
  6. write-host "密码的编码可能不是utf8 ,将使用默认编码" -ForegroundColor yellow
  7. $pwdc=[text.encoding]::default.getstring([convert]::FromBase64String($pw))}
  8. $pw='-p"'+$pwdc+'"'
  9. }}
复制代码
发表于 2025-3-28 00:46:14 | 显示全部楼层
啊 ,代码没有排除bat本身 ,bat的名字最好取个唯一的名字 ,也就是说不要有跟bat对应的文件夹
发表于 2025-3-28 04:13:53 | 显示全部楼层
  1. #ANSI编码&cls&powershell -Version 5.1 -NoLogo -NoProfile -Command "gc -Encoding Oem -ReadCount 0 -LiteralPath '%~f0'|out-string|iex"&pause&exit/b
  2. dir -Directory | %{
  3.     $n = (dir -File ($_.Name + '.*'))[0]
  4.     $f = gc -Encoding UTF8 -Raw $n
  5.     cd $_
  6.     if ($f -match 'UniqueCode="(.*?)"') {
  7.         $p = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($Matches[1]))
  8.         & "D:\7za.exe" a ..\tmp.zip ('-p' + $p) * | Out-Null
  9.     } else {
  10.         & "D:\7za.exe" a ..\tmp.zip * | Out-Null
  11.     }
  12.     cd ..
  13.     $b = [System.Convert]::ToBase64String((gc .\tmp.zip -Encoding Byte -Raw))
  14.     $utf8NoBom = New-Object System.Text.UTF8Encoding($false)
  15.     [System.IO.File]::WriteAllText($n, ($f -replace 'Value=""', ('Value="{0}"' -f $b)), $utf8NoBom)
  16.     rm .\tmp.zip
  17. }
复制代码
楼上大佬写的更好,我抄了一点 ,密码改用了解码后的
发表于 2025-3-28 06:45:50 | 显示全部楼层
回复 16# Five66


    改一下 ,加上了密码base64解码后包含英文双引号时的处理
将7楼代码第22行换成下面的 ,因为使用的是字符串 ,密码base64解码后可能涉及字符串编码问题 ,简单的判断了下编码
代码没有排除bat本身 ,bat的名字最好取个唯一的名字 ,也就是说最好不要有跟bat对应的文件夹 ,不然对应的文件夹也会压缩处理

  1. $pw="";if($str -match '(?<=uniquecode=")[^"]*(?=")'){
  2. if($Matches[0]){$pw=$matches[0];$o=$pw.Length%4
  3. if($o){$pw=$pw+'===='.Substring(0,4-$o)}
  4. $pwdc=[text.encoding]::utf8.getstring([convert]::FromBase64String($pw))
  5. if($pwdc -match '\?'){
  6. write-host "密码的编码可能不是utf8 ,将使用默认编码" -ForegroundColor yellow
  7. $pwdc=[text.encoding]::default.getstring([convert]::FromBase64String($pw))}
  8. $pwdc=[regex]::replace($pwdc,'\\+"|""+|"',[scriptblock]::create('""+($args[0].value.tochararray() -join "")'))
  9. $pw='-p"'+$pwdc+'"'
  10. }}
复制代码
 楼主| 发表于 2025-4-3 15:34:14 | 显示全部楼层
回复 19# Five66


    可用,感谢!
 楼主| 发表于 2025-4-3 15:34:54 | 显示全部楼层
回复 18# wanghan519


        可用,感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:25 , Processed in 0.016631 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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