![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 15:57 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何过滤变量中指定的字符[已解决] |
| 可打印版本 8,795 / 31 |
| 第16楼 vkill | 发表于 2006-09-06 03:04 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
楼上的这些很实用,收下
|
|
| 第17楼 fornever | 发表于 2006-09-09 04:44 |
| 初级用户 发帖 35 积分 98 | |
|
经过我实验用set name=| 是不可以的
但是用set /p name=input: 输入后是可以的 ,如图: 然后就可以用if语句一个一个字符判断了,这个的确可以做到我也实验成功了,可以过滤很多敏感字符,再结合findstr的限制就可以达到目的:规定输入为6~12个大写字母,小写字母,数字和符号_,其他符号过滤.要保证每一位都是前面的那些字符. 看我代码: @setlocal @set /p user=Input: ::过滤空字符以及不够六个字符的输入 @if "%user%"=="" goto error @if "%user:~5,1%"=="" goto error ::过滤“|”号 @if "%user:~0,1%"=="|" goto error @if "%user:~1,1%"=="|" goto error @if "%user:~2,1%"=="|" goto error @if "%user:~3,1%"=="|" goto error @if "%user:~4,1%"=="|" goto error @if "%user:~5,1%"=="|" goto error @if "%user:~6,1%"=="|" goto error @if "%user:~7,1%"=="|" goto error @if "%user:~8,1%"=="|" goto error @if "%user:~9,1%"=="|" goto error @if "%user:~10,1%"=="|" goto error @if "%user:~11,1%"=="|" goto error ::过滤其他敏感符号同上 ::强制有效位为最多12位 @set user=%user:~0,12% ::限制输入字符为大写字母小写字符数字和_号 @echo %user% |findstr "[A-Za-z0-9_]" @if errorlevel 1 goto error @goto next endlocal :next @echo succeed! @goto end :error @echo Input error! :end 但是有个符号 " 引号小弟不知道该怎么 办,怎么也过滤不掉郁闷,而且在输入中文的时候会提示过滤了,但是中文后面如果有英文字母的话就会成功通过过滤 这两点还请教各位大虾! 附件 未命名.GIF (12.91 KiB) |
|
| 第18楼 fornever | 发表于 2006-09-09 23:11 |
| 初级用户 发帖 35 积分 98 | |
|
...... 没有人回复吗?
没有人会吗 斑竹给个答案啊 |
|
| 第19楼 fornever | 发表于 2006-09-10 01:02 |
| 初级用户 发帖 35 积分 98 | |
|
难道真的没有人会吗?!
|
|
| 第20楼 namejm | 发表于 2006-09-10 23:03 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by fornever at 2006-9-9 04:45: 虽然在CMD命令行下输入是可以的,但是用在批处理中还是会出错。困惑中。 |
|
| 第21楼 3742668 | 发表于 2006-09-10 23:43 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Well,在批处理中赋值|到变量并非不可实现:
关于过滤字符,信手写出下面的代码, 希望能对需要的朋友有所帮助: 似乎可以过滤掉|,||,&,&&,",大家自行测试更改。 |
|
| 第22楼 namejm | 发表于 2006-09-11 00:42 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
3742668版主的代码用call来调用就可以过滤掉了,一时还真想不到
![]() 第一种情况如果不加转义字符的话,在批处理中无法通过,但是却可以在CMD命令行下成功运行,我对这点还是挺纳闷的。 |
|
| 第23楼 fornever | 发表于 2006-09-11 09:06 |
| 初级用户 发帖 35 积分 98 | |
Originally posted by namejm at 2006-9-10 23:03: 批处理中如果在 set /p user=input:下面跟上if 语句判断的话是通过的,如果没有IF的话也是不通过的,....想不通 而 set "str=|" 我在命令行下和批处理中都是通过的,难道和补丁有关>? 这个是我的补丁信息: 安装了 111 个修补程序。 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : File 1 : Q147222 : S867460 - Update : KB917734_WMP9 : KB834707 - Update : KB873339 - Update : KB885835 - Update : KB885836 - Update : KB886185 - Update : KB886677 - Update : KB887472 - Update : KB888302 - Update : KB890046 - Update : KB890859 - Update : KB891781 - Update : KB893756 - Update : KB893803v2 - Updat : KB894391 - Update : KB896358 - Update : KB896423 - Update : KB896424 - Update : KB896428 - Update : KB898461 - Update : KB899587 - Update : KB899589 - Update : KB899591 - Update : KB900485 - Update : KB900725 - Update : KB901017 - Update : KB901190 - Update : KB901214 - Update : KB904706 - Update : KB905414 - Update : KB905749 - Update : KB908519 - Update : KB908531 - Update : KB910437 - Update : KB911280 - Update : KB911562 - Update : KB911567 - Update : KB911927 - Update : KB912919 - Update : KB913580 - Update : KB914388 - Update : KB914389 - Update : KB916595 - Update : KB917159 - Update : KB917344 - Update : KB917422 - Update : KB917953 - Update : KB918439 - Update : KB918899 - Update : KB920214 - Update : KB920670 - Update : KB920683 - Update : KB921398 - Update : KB921883 - Update : KB922616 - Update [ Last edited by fornever on 2006-9-11 at 09:28 ] |
|
| 第24楼 fornever | 发表于 2006-09-11 09:45 |
| 初级用户 发帖 35 积分 98 | |
|
RE 3742668:
小弟新手,你代码中很多不很理解 call :filter "%var%" call到了 filter标签并用 var变量作为参数,可 在filter标签下并未有用到var变量啊? set "str=%~1★" 还有上面一句的意思 谢谢! |
|
| 第25楼 fornever | 发表于 2006-09-11 09:49 |
| 初级用户 发帖 35 积分 98 | |
|
我还有一个发现
就斑竹的代码我实验后,发现在输入字符时如果在把"&写在前面 ,那"&后面的所有字符都会忽略......能解释一下吗? |
|
| 第26楼 9527 | 发表于 2006-09-11 20:57 |
| 银牌会员 发帖 438 积分 1,185 来自 北京 | |
|
@echo off
:start setlocal cls set /p var=请输入字符: call :filter "%var%" endlocal goto start :filter setlocal set "str=%~1★" set "str=%str:|=%" set "str=%str:&=%" set "str=%str:"=%" echo 过滤以后的字符为: %str:~0,-1% pause endlocal goto :eof 我来废话几句,call :filter "%var%" 这句是CALL调用过程执行相应代码,“%var%“ 是作为 %1 参数传递给执行代码的,版主主要是过滤掉了 | & “ 这三个字符,之所以用%str:~0,-1%来显示是因为开始的一句set "str=%~1★",把最后的那个五角星去掉而已......... |
|
| 第27楼 zyyuser | 发表于 2006-09-12 23:08 |
| 新手上路 发帖 1 积分 2 | |
|
%Var:a=b%
把环境变量Var里的所有a替换为b |
|
| 第28楼 namejm | 发表于 2006-09-13 10:10 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
今天楼主告诉我说,如果"和&连在一起的话,会把&及其之后的字符全部过滤掉,看来3742668版主的代码还有考虑不周的地方,特修改如下,可以避免这个问题:
[ Last edited by namejm on 2006-9-13 at 10:11 ] |
|
| 第29楼 fornever | 发表于 2006-09-15 10:20 |
| 初级用户 发帖 35 积分 98 | |
|
先要谢谢NAMEJM兄的无私帮助!
现在回想自己有些愚笨了,虽然最后和自己的最初设想有些出入,不过总算有解决办法了. 对于我的方法,其实主要是引号的问题,其他字符都可以顺利检查到.如果还按照我的初衷的话只需要在前面加一句set "var=%var:"=%"就可以搞定引号了.不过是做不到提示了,而是直接通过不过对字符做了处理(过滤了引号).这样的话只要用echo 说明出来就可以了.回头看自己的代码写出来后会是多么的臃肿,汗! 那结论就是了,如果你想要凝练的代码,那只用set "var=%var:"=%"过滤掉敏感字符,(主要是findstr语句敏感)然后用findstr "[A-Za-z0-9_]"加if errorlevel就可以直接限制了,不用去想剩下字符的情况了(有N多的符号,制表符什么的). 如果你想要出现错误有提示的话就用set /p var=input:后面家if "%var%"=="|" goto error 的语句跳转就好了. 就这些了吧,我想不起来了.还有什么情况大家一起来讨论哈! 解铃还需系铃人,哈哈! |
|
| 第30楼 yangxixing | 发表于 2007-11-22 23:13 |
| 初级用户 发帖 16 积分 25 | |
|
收下学习了
|
|
| 上一页 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |