本帖最后由 aloha20200628 于 2024-2-4 15:58 编辑
记得多年前有个老帖关于此类问题做过长篇讨论,结果似乎是字符串包裹命令行参数和启用变量延迟会对其中的特殊字符产生较大影响。
所谓特殊字符是指数字和英文字母之外的键盘可见字符,当然也是在简中编码字符集的大前提之下。
用以下两行测试代码可实测出几种结果—即可在命令行参数中保全的特殊字符。仅供参考。
1.最坏情况:无双引号包裹命令行参数+启用变量延迟》@#$%_+-~`.}{[]('
2.次坏情况:有双引号包裹命令行参数+启用变量延迟》@#$%^&*( )_+=-~`/.,<>?|}{[]\';:
3.次好情况:有双引号包裹命令行参数+未用变量延迟》!@#$%*()_+-~`.}{[]?'
4.最好情况:无双引号包裹命令行参数+未用变量延迟》!@#$%^&*( )_+=-~`/.,<>?|}{[]\';:
将路径文件名拖至批处理脚本运行也可能导致上述四种情况,但因系统对路径文件名本身还有禁用字符(<|>/\:"?*),故可保全字符总量会相应减少。
验证1-2代码- @echo off &if "%~1" neq "" (setlocal enabledelayedexpansion &echo,%1&endlocal&exit/b)
复制代码 验证3-4代码- @echo off &if "%~1" neq "" echo,%1&exit/b
复制代码
|