|
一、规律
SET命令用法多变,如:显示、查询、设置与清除环境变量,简单计算,提示输入与回显提示,环境变量替换、截取,延迟环境变量扩展等等,其中环境变量截取,在MS帮助中也只有几个实例说明,没有完整的定义,看来看去,总是很模糊,因为做了一个简单的批处理,总结出如下规律:
对于变量%STR%有%STR:~M%和%STR:~M,N%两种变量截取形式。
(一)对于%STR:~M%
1. 当M为零时,%STR:~M%=%STR%
2. 当M为正数时,表示舍弃%STR%左M位
3. 当M为负数时,表示提取%STR%右|M|位(|M|为M的绝对值,下同)
特例:
1. 当M为正数 并且 M≥变量字符串长度时,%STR:~M%为空字符串
2. 当M为负数 并且 |M|≥变量字符串长度时,%STR:~M%=%STR%
(二)对于%STR:~M,N%
1. %STR:~M,N%中M的含义与%STR:~M%中的M含义相同
2. 当N为零时,%STR:~M,N%为空字符串
3. 当N为正数时,表示从%STR:~M%中提取左N位
4. 当N为负数时,表示从%STR:~M%中舍弃右|N|位(即舍弃%STR:~N%)
特例:
1. 当N为正数,M为正数,并且 M+N≥变量字符串长度时,%STR:~M,N%=%STR:~M%
2. 当N为正数,M为负数,并且 N≥|M|时,%STR:~M,N%=%STR:~M%
3. 当N为负数、M为负数,并且 |N|≥|M|时,%STR:~M,N%为空字符串
4. 当N为负数、M为负数,并且 |N|≥变量字符串长度时,%STR:~M,N%为空字符串
5. 当N为负数、M为正数,并且 M+|N|≥变量字符串长度时,%STR:~M,N%为空字符串
二、验证
设定变量str=1234567890,其长度为10,偏移量m、n取上限为15,取下限为-15,使用批处理穷举其所有的环境变量截取情况。运行批处理,在批处理同目录生成str10.txt。
批处理:str10.cmd
=======================================
@echo off
setlocal enabledelayedexpansion
set str=1234567890
(
echo 环境变量截取规律
echo ────────────
echo 示例:str=1234567890
echo ────────────
) > str10.txt
for /l %%m in (-15,1,15) do (
echo %%str:~%%m%%=!str:~%%m!>>str10.txt
)
echo ──────────── >>str10.txt
for /l %%m in (-15,1,15) do (
for /l %%n in (-15,1,15) do (
echo %%str:~%%m,%%n%%=!str:~%%m,%%n!>>str10.txt
)
)
endlocal
goto :eof
=======================================
[ 本帖最后由 liuhj 于 2009-1-24 14:55 编辑 ] |
|