中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 15:53
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » (原创)批处理加密+解密(感谢namejm和bjsh版主!)
可打印版本  2,253 / 22
第16楼 bjsh 发表于 2008-03-30 23:48
银牌会员 发帖 621 积分 2,000
去看看下面这两个帖子, 当时写这个的时候就是碰到这些问题的
按照这种思路 改造, 去解决你的问题


http://www.cn-dos.net/forum/viewthread.php?tid=30815&fpage=1&highlight=%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6

http://www.cn-dos.net/forum/viewthread.php?tid=30884&fpage=1&highlight=%2Bbjsh
第17楼 bat-zw 发表于 2008-03-31 00:14
金牌会员 发帖 1,276 积分 3,105
欣喜若狂中!!!!!
Originally posted by zw19750516 at 2008-3-30 12:05:
  本加解密工具现在有个最大的问题没有得到解决,如果被处理的批处理中含有"! !"的话,所有的"! !"将不被处理。我做了 ...

  我日,苦苦思考了几天的问题,居然用一个小技巧就解决了,感谢namejm大 人,正是查你共享资料才解决我的问题,太谢谢了!!!!!!
  特在此帖出其原文如下:

如何从用户传入的参数中去掉引号?

来源:http://www.cn-dos.net/forum/viewthread.php?tid=20838&fpage=1&highlight=%E5%8E%BB

很多情况下,我们需要脱除一个字符串中可能会存在的引号,然后在加上自己的引号使其中的特殊字符(命令连接符&、|、&&、||,命令行参数界定符Space、tab、;、=,字符化转义符^、",变量化转义符%等)进行字符化,使其失去特定的作用,而作为普通的字符成为字符串的一个组成部分。

一、将字符串中的引号脱去的简单办法由三种,它们的功能相近,只是各自的使用场合不同,可以处理大多数的情况。

1-1、如果字符串存在于命令行参数%1中,可以使用%~1脱去第一对外侧引号,如果没有外侧引号则字符串不变;

1-2、如果字符串存在于for替代变量%%i中,可以使用%%~i脱去第一对外侧引号,如果没有外侧引号则字符串不变;

1-3、如果字符串存在于环境变量%temp%中,可以使用%temp:"=%脱去其中所有的引号,如果没有引号则字符串不变;

1-4、以上三种方案在某种程度上可以互相通用,因为它们作为变量的一种类型,可以通过类似以下的代码或代码片断相互转移:
1-4-1、for替代变量转命令行参数: call:DeQuote %%i
1-4-2、环境变量转命令行参数:call:DeQuote %temp%
1-4-3、命令行参数转for替代变量:for %%i in (%1) do ...
1-4-4、环境变量转for替代变量:for %%i in (%temp%) do ...
1-4-5、命令行参数转环境变量:set temp=%1
1-4-6、for替代变量转环境变量:for ... set temp=%%i

二、如果字符串的引号分布情况很复杂,或者我们对被脱去引号的位置有特殊要求,或者字符串中可能出现某些控制字符,则可以使用以下方案:

2-1、可以使用%test:*"=%脱去环境变量test串首的第一个引号,如果串首不存在引号则变量值不变;

2-2、可以使用set "test=%test%脱去环境变量test串尾的最后一个引号,如果串尾不存在引号则变量值被清空;

2-3、可以使用%test:*"=set "test=%脱去环境变量test串最外侧的一对引号,如果串外侧不存在引号则出现语法错误;

2-4、可以使用set "test=%test:"=%"脱去环境变量test串中可能出现的所有引号,如果串外侧不出现引号则变量值不变;与1-3不同的是,它可以容许字符串的匹配引号对内出现特殊控制字符。
第18楼 bat-zw 发表于 2008-03-31 00:54
金牌会员 发帖 1,276 积分 3,105
感谢版主对我的关注:
Originally posted by bjsh at 2008-3-30 23:48:
去看看下面这两个帖子, 当时写这个的时候就是碰到这些问题的
按照这种思路 改造, 去解决你的问题


http://www.cn-dos.net/forum/viewthread.php?tid=30815& ...  虽然从namejm的共享资料中问题得到了解决,但我还是要非常感谢bjsh版主,谢谢你对我的关注。 [ Last edited by zw19750516 on 2008-3-31 at 01:19 AM ]
第19楼 ZJHJ 发表于 2008-04-01 10:32
高级用户 发帖 374 积分 609
我发现,不是有!的没有替掉,而是丢掉了内容(或有错误).可以先将“ ! ”替掉,就可以了.但是,我的方法太慢.加密前一次,解密后一次,100K文件要检查几十秒.太太慢了.
没办法
第20楼 bat-zw 发表于 2008-04-01 10:54
金牌会员 发帖 1,276 积分 3,105
Originally posted by ZJHJ at 2008-4-1 10:32:
我发现,不是有!的没有替掉,而是丢掉了内容(或有错误).可以先将“ ! ”替掉,就可以了.但是,我的方法太慢.加密前一次,解密后一次,100K文件要检查几十秒.太太慢了.
没办法

你是不是没有把我写在批处理中的注释去掉啊,我用改写后的程序加密又解密了我所有批处理后运行都基本没问题啊。
第21楼 stance 发表于 2008-04-21 17:21
初级用户 发帖 46 积分 64
感謝分享
第22楼 26933062 发表于 2008-04-21 17:43
银牌会员 发帖 879 积分 2,268
未及细看,但那两段超长的替换过程应该可以精简。。。
第23楼 26933062 发表于 2008-04-21 18:57
银牌会员 发帖 879 积分 2,268
仅仅是精简那些替换部分代码如下:
但是,看楼主的加密方法,似乎就是将需加密的文件中的26个字母替换成生僻的汉字。
但是遇到某些些特殊符号时好像仍有问题,导致加密后的文件丢失内容
比如需加密的文件有一行的内容是:set "num=%mum:^>=#%"
替换后的结果就不对了。
有个建议:
既然是用生僻字来替换文件中的字,为和不把这些让人头痛的特殊符号也替换成生僻字?

:
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023