中国DOS联盟论坛

中国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"都通不过
为什么呢?

而且说是创建文件
结果创建的是文件夹
似乎有些区别吧

  引号不能作为文件(夹)的名啊,所以"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