|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
|
2008-3-30 23:48 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
17 楼』:
欣喜若狂中!!!!!
Quote: | Originally posted by zw19750516 at 2008-3-30 12:05:
本加解密工具现在有个最大的问题没有得到解决,如果被处理的批处理中含有"! !"的话,所有的"! !"将不被处理。我做了 ... |
|
我日,苦苦思考了几天的问题,居然用一个小技巧就解决了,感谢namejm大 人,正是查你共享资料才解决我的问题,太谢谢了!!!!!!
特在此帖出其原文如下:
如何从用户传入的参数中去掉引号?
来源:http://www.cn-dos.net/forum/view ... 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不同的是,它可以容许字符串的匹配引号对内出现特殊控制字符。
|
批处理之家新域名:www.bathome.net |
|
2008-3-31 00:14 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
18 楼』:
感谢版主对我的关注:
Quote: | Originally posted by bjsh at 2008-3-30 23:48:
去看看下面这两个帖子, 当时写这个的时候就是碰到这些问题的
按照这种思路 改造, 去解决你的问题
[url]http://www.cn-dos.net/forum/viewthread.php?tid=30815& ... |
|
虽然从namejm的共享资料中问题得到了解决,但我还是要非常感谢bjsh版主,谢谢你对我的关注。
[ Last edited by zw19750516 on 2008-3-31 at 01:19 AM ]
|
批处理之家新域名:www.bathome.net |
|
2008-3-31 00:54 |
|
|
ZJHJ
高级用户
积分 609
发帖 374
注册 2006-8-2
状态 离线
|
『第
19 楼』:
我发现,不是有!的没有替掉,而是丢掉了内容(或有错误).可以先将“ ! ”替掉,就可以了.但是,我的方法太慢.加密前一次,解密后一次,100K文件要检查几十秒.太太慢了.
没办法
|
|
2008-4-1 10:32 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
20 楼』:
Quote: | Originally posted by ZJHJ at 2008-4-1 10:32:
我发现,不是有!的没有替掉,而是丢掉了内容(或有错误).可以先将“ ! ”替掉,就可以了.但是,我的方法太慢.加密前一次,解密后一次,100K文件要检查几十秒.太太慢了.
没办法 |
|
你是不是没有把我写在批处理中的注释去掉啊,我用改写后的程序加密又解密了我所有批处理后运行都基本没问题啊。
|
批处理之家新域名:www.bathome.net |
|
2008-4-1 10:54 |
|
|
stance
初级用户
积分 64
发帖 46
注册 2008-4-21
状态 离线
|
|
2008-4-21 17:21 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
22 楼』:
未及细看,但那两段超长的替换过程应该可以精简。。。
|
致精致简! |
|
2008-4-21 17:43 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
23 楼』:
仅仅是精简那些替换部分代码如下:
但是,看楼主的加密方法,似乎就是将需加密的文件中的26个字母替换成生僻的汉字。
但是遇到某些些特殊符号时好像仍有问题,导致加密后的文件丢失内容
比如需加密的文件有一行的内容是:set "num=%mum:^>=#%"
替换后的结果就不对了。
有个建议:
既然是用生僻字来替换文件中的字,为和不把这些让人头痛的特殊符号也替换成生僻字?
:
@echo off
set "var=犇猋骉蟲麤毳淼掱焱垚煊烜煐焓烓焺瓛炜翙燚焜琰燊眚奡慤"
set "num=abcdefghijklmnopqrstuvwxyz"
set "str=dfdsifsdkfjdafsdfj"
setlocal enabledelayedexpansion
for /l %%a in (0 1 25) do (
call set "str=%%str:!num:~%%a,1!=!var:~%%a,1!%%"
)
echo "!str!"
pause
|
致精致简! |
|
2008-4-21 18:57 |
|