在很多时候,我们需要在CMD窗口中手动输入文件名来创建文件,比如本人曾经做过的 文件备份器 ,这个时候,往往需要对输入的字符串做非法字符的检测。但是,不能做文件名的字符是如此之多:有各种控制符号、/、\、>、<、"、系统设备保留字符(如nul、com1等)……若用穷举法的话,姑且不论CMD特殊字符的处理是何等地让人绞尽脑汁,光是那一大堆非法字符,恐怕没人能轻易地全部罗列出来,基于对特殊字符的头痛及挂一漏万的担忧,以前一直没找到一个合适的方案,现在得以有闲,写了段代码,用于演示检测被当作文件名输入的字符串是否含有非法字符,发出来让大家讨论一下:
[ Last edited by namejm on 2007-5-29 at 11:28 PM ]
@echo off
:: 思路:在系统临时目录下创建随机文件,把检测非法字符的任务交给操作系统来完成
:: Thanks to qzwqzw
:main
cls
set input=
set /p input= 请输入文件名:
call :check
pause
goto main
:check
set "str1=%input:"=%"
set "str2=%input:"= %"
if not "%str1%"=="%str2%" goto main
:loop
set rnd=%random%
if exist "%tmp%\%input%%rnd%" goto loop
cd.>"%tmp%\%input%%rnd%" 2>nul || goto main
del /q "%tmp%\%input%%rnd%"
echo "%input%" 是合法的文件名
goto :eof
[ Last edited by namejm on 2007-5-29 at 11:28 PM ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
考虑问题复杂化,解决问题简洁化。
