网上看了不少文章,都不能得到完美无缺的答案。最后自己琢磨出一个绝妙的方法:
@rem style:Cobol
@echo off
set var="1"2"3
echo "%var%%var%"| findstr /i /r "^"""""".*""""""$" > nul && set "var=%var:~1,-1%"
echo %var%
cd.
解决了:单数个双引号,命令定界混淆;首尾误删除;命令执行异常退出等。
估计 也可以安排个 set "%var%%var%",待以后试试。
具体测试用例如下:
@echo off
set var="1"2"3"
echo.s1=%var%
set "var=%var:~1%"
echo.s1=%var%
set var=1"2"3"
echo.s1=%var%
set "var=%var:~1%"
echo.s1=%var%
set var=
echo.s1=%var%
set "var=%var:~1%"
echo.s1=%var%
rem 脱去环境变量 var 的第一个字符;如果 var 原串为空,则结果为表达式内容 【~1】。
set var="1^"2^"3"
echo.s2=%var%
set var=%var:*"=%
echo.s2=%var%
set var=1^"2^"3"
echo.s2=%var%
set var=%var:*"=%
echo.s2=%var%
set var=123"
echo.s2=%var%
set var=%var:*"=%
echo.s2=%var%
set var=123
echo.s2=%var%
set var=%var:*"=%
echo.s2=%var%
set var=
echo.s2=%var%
set var=%var:*"=%
echo.s2=%var%
rem 脱去环境变量 var 的第一个引号及其前面的内容,如果不存在引号,则变量值不变;如果 var 原串为空,则结果为表达式内容 【*"=】。
set var="1^"2^"3"
echo.s21=%var%
set var=%var:*"=*%
echo.s21=%var%
set var=1^"2^"3"
echo.s22=%var%
set var=%var:*"=*%
echo.s22=%var%
set var=123"
echo.s23=%var%
set var=%var:*"=*%
echo.s23=%var%
set var=123
echo.s24=%var%
set var=%var:*"=*%
echo.s24=%var%
set var=
echo.s25=%var%
set var=%var:*"=*%
echo.s25=%var%
rem dfe fefef
set "var="1^"2^"3""
echo.s3=%var%
set var=%var:~0,-1%
echo.s3=%var%
set "var="1^"2^"3"
echo.s3=%var%
set var=%var:~0,-1%
echo.s3=%var%
set "var="123"
echo.s3=%var%
set var=%var:~0,-1%
echo.s3=%var%
set "var="
echo.s3=%var%
set var=%var:~0,-1%
echo.s3=%var%
rem 脱去环境变量 var 的最后一个字符;如果原串为空,则结果为表达式内容 【~0,-1】。
set "var="1^"2^"3""
echo.s4=%var%
set "var=%var%
echo.s4=%var%
set "var="1^"2^"3"
echo.s4=%var%
set "var=%var%
echo.s4=%var%
set "var="123"
echo.s4=%var%
set "var=%var%
echo.s4=%var%
set "var=123"
echo.s4=%var%
set "var=%var%
echo.s4=%var%
set var=
echo.s4=%var%
set "var=%var%
echo.s4=%var%
rem 脱去环境变量 var 的最后一个引号及其后面的内容,如果不存在引号,则变量值不变;如果原串为空,则结果为空。
set "var="1^"2^"3""
echo.s5=%var%
set var=%var:~1,-1%
echo.s5=%var%
set var="1"2"3
echo.s5=%var%
set var=%var:~1,-1%
echo.s5=%var%
set var=1"2"3"
echo.s5=%var%
set var=%var:~1,-1%
echo.s5=%var%
set var=1"2"3
echo.s5&