[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 aloha20200628 于 2024-2-4 15:58 编辑


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

验证1-2代码
  1. @echo off &if "%~1" neq "" (setlocal enabledelayedexpansion &echo,%1&endlocal&exit/b)
复制代码
验证3-4代码
  1. @echo off &if "%~1" neq "" echo,%1&exit/b
复制代码

TOP

返回列表