Board logo

标题: [其他] bat能不能:将16进制.reg转换为常见字符?谢谢 [打印本页]

作者: yyz219    时间: 2023-10-9 12:37     标题: bat能不能:将16进制.reg转换为常见字符?谢谢

本帖最后由 yyz219 于 2023-10-9 12:42 编辑

原来(16进制————不是固定的):用“FSCapture”打开.reg:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Imagine.PNG\shell\用“FSCapture”打开]
@="用“FSCapture”打开"

[HKEY_CLASSES_ROOT\Imagine.PNG\shell\用“FSCapture”打开\command]
@=hex(2):44,00,3a,00,5c,00,31,00,ff,7e,72,82,6f,8f,f6,4e,5c,00,1a,59,92,5a,53,\
  4f,5c,00,93,62,fe,56,93,62,da,6e,a8,52,5c,00,93,62,da,6e,a8,52,46,00,53,00,\
  43,00,61,00,70,00,74,00,75,00,72,00,65,00,39,00,37,00,5c,00,46,00,53,00,43,\
  00,61,00,70,00,74,00,75,00,72,00,65,00,2e,00,65,00,78,00,65,00,20,00,25,00,\
  31,00,00,00
*******************************************************************************
希望运行批处理后,得到:用“FSCapture”打开.reg:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Imagine.PNG\shell\用“FSCapture”打开]
@="用“FSCapture”打开"

[HKEY_CLASSES_ROOT\Imagine.PNG\shell\用“FSCapture”打开\command]
@="D:\\1绿色软件\\多媒体\\抓图抓滚动\\抓滚动FSCapture97\\FSCapture.exe %1"
作者: Batcher    时间: 2023-10-9 21:18

回复 1# yyz219
  1. reg query "HKEY_CLASSES_ROOT\Imagine.PNG\shell"
复制代码

作者: yyz219    时间: 2023-10-9 21:46

回复  yyz219
Batcher 发表于 2023-10-9 21:18



    Microsoft Windows [版本 10.0.10586]
(c) 2016 Microsoft Corporation。保留所有权利。

X:\Windows\System32>reg query "HKEY_CLASSES_ROOT\Imagine.PNG\shell"

HKEY_CLASSES_ROOT\Imagine.PNG\shell\555
HKEY_CLASSES_ROOT\Imagine.PNG\shell\open
HKEY_CLASSES_ROOT\Imagine.PNG\shell\print

X:\Windows\System32>
作者: Batcher    时间: 2023-10-9 22:03

回复 3# yyz219
  1. reg query "HKEY_CLASSES_ROOT\Imagine.PNG\shell" /s
复制代码

作者: yyz219    时间: 2023-10-9 22:07

回复 4# Batcher


    谢谢 试一试先
作者: yyz219    时间: 2023-10-9 22:13

回复  yyz219
Batcher 发表于 2023-10-9 22:03

可以看得:
HKEY_CLASSES_ROOT\Imagine.PNG\shell\555
    (默认)    REG_SZ    555
    Icon    REG_SZ    D:\1绿色软件\多媒体\抓图抓滚动\抓滚动FSCapture97\FSCapture.exe

HKEY_CLASSES_ROOT\Imagine.PNG\shell\555\command
    (默认)    REG_EXPAND_SZ    D:\1绿色软件\多媒体\抓图抓滚动\抓滚动FSCapture97\FSCapture.exe %1
作者: WHY    时间: 2023-10-10 00:08

注册表文件中,hex(2) 是可扩充字符串类型(REG_EXPAND_SZ),一般用于字符串里面包含有系统环境变量的场合,比如包含 %WinDir% 等系统环境变量。

如果确定字符串不包含这些变量,可以这样:
  1. $srcFile = 'a.reg';   #源文件
  2. $dstFile = 'b.reg';   #目标文件
  3. $scriptBlock1 = {
  4.     param($a);
  5.     $s = $a.Value -replace '[\s\\]' -replace '00,00$';
  6.     $s = $s.Split(':', 2)[1];
  7.     $s = [regex]::Replace($s, '([0-9a-f]{2}),([0-9a-f]{2}),', $scriptBlock2);
  8.     return '="' + $s.Replace('\', '\\') + '"';
  9. }
  10. $scriptBlock2 = {
  11.     param($b);
  12.     return [char][int]('0x' + $b.Groups[2].Value + $b.Groups[1].Value);
  13. }
  14. $reg = '(?i)=hex\(2\):(?> *(?:[a-f0-9]{2},)+(?:\\\r\n)?)+00(?!,)';
  15. $str = (gc $srcFile -ReadCount 0) -join "`r`n";
  16. $str = [regex]::Replace($str, $reg, $scriptBlock1);
  17. sc $dstFile -Value $str -Enc Unicode;
  18. pause;
复制代码

作者: yyz219    时间: 2023-10-10 06:44

注册表文件中,hex(2) 是可扩充字符串类型(REG_EXPAND_SZ),一般用于字符串里面包含有系统环境变量的场合 ...
WHY 发表于 2023-10-10 00:08


我试一试先 谢谢




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