![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 13:03 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 判断输入的文件名是否合法的批处理 |
| 可打印版本 1,976 / 5 |
| 第1楼 namejm | 发表于 2007-05-28 22:08 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
判断输入的文件名是否合法的批处理 在很多时候,我们需要在CMD窗口中手动输入文件名来创建文件,比如本人曾经做过的 文件备份器 ,这个时候,往往需要对输入的字符串做非法字符的检测。但是,不能做文件名的字符是如此之多:有各种控制符号、/、\、>、<、"、系统设备保留字符(如nul、com1等)……若用穷举法的话,姑且不论CMD特殊字符的处理是何等地让人绞尽脑汁,光是那一大堆非法字符,恐怕没人能轻易地全部罗列出来,基于对特殊字符的头痛及挂一漏万的担忧,以前一直没找到一个合适的方案,现在得以有闲,写了段代码,用于演示检测被当作文件名输入的字符串是否含有非法字符,发出来让大家讨论一下:
[ Last edited by namejm on 2007-5-29 at 11:28 PM ] |
|
| 第2楼 qzwqzw | 发表于 2007-05-29 19:57 |
| 银牌会员 发帖 636 积分 2,343 | |
|
不支持引号真是太遗憾了
"filename"都通不过 为什么呢? 而且说是创建文件 结果创建的是文件夹 似乎有些区别吧 |
|
| 第3楼 vkill | 发表于 2007-05-29 20:26 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
...........
[ Last edited by vkill on 2007-5-29 at 08:30 PM ] |
|
| 第4楼 namejm | 发表于 2007-05-29 20:27 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by qzwqzw at 2007-5-29 19:57: 引号不能作为文件(夹)的名啊,所以"filename"不能通过。 呵呵,XP系统下,文件夹名和文件名的命名规则应该一致的吧?当时没仔细思考,顺手就写了个创建文件夹的代码,我还是改成创建随机文件的代码吧。 [ Last edited by namejm on 2007-5-29 at 08:48 PM ] |
|
| 第5楼 qzwqzw | 发表于 2007-05-29 22:20 |
| 银牌会员 发帖 636 积分 2,343 | |
|
那么直接拖进去的带空格文件名呢?
还要我手工删除前后的引号吗? 况且引号处理起来也不算很复杂 可以将处理引号的句子也放在check中 因为都是与check有关的 另外,这一句搞得那么别扭 cd.>"%tmp%\%input%%rnd%" 2>nul && ( del /q "%tmp%\%input%%rnd%" ) || ( goto main ) 直接这样不省事省心吗? cd.>"%tmp%\%input%%rnd%" 2>nul || goto main del /q "%tmp%\%input%%rnd%" ------------------------------- 其它的问题 发现cd、echo等出错之后并不返回errorleve 也不设置%errorlevel%l 但是用&&、||仍然有效 看来cmd用了另外的通讯机制 echo.>"%tmp%\%input%%rnd%" & echo %errorlevel% cd.>"%tmp%\%input%%rnd%" & if not errorlevel 1 echo 0 |
|
| 第6楼 namejm | 发表于 2007-05-29 23:06 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
1、忘记说了,写这个代码的本意是演示如何判断输入的文件名是否合法,并没有考虑到使用上的方便,所以,不对完整路径做判断,换而言之,只判断文件名而不考虑路径。若要判断路径的话,就得重写代码了;
2、判断引号的语句确实应该放到:check标签段中去,这样就得多写一个标签符号了,嘿嘿,为了节省这个标签,我把它放前面去了,恩,马上改过来; 3、&&和||的复合语句看起来确实别扭,就照 qzwqzw 兄说的办。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |