中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-08 19:05
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 花了2个小时才明白的set用法,请大家不要见笑! 查看 1,144 回复 14
楼 主 花了2个小时才明白的set用法,请大家不要见笑! 发表于 2008-03-12 17:44 ·  中国 黑龙江 大庆 大庆中基石油通信建设有限公司
高级用户
★★
积分 547
发帖 261
注册 2006-04-15 16:50
20年会员
UID 53887
状态 离线
以下是我的学习心得,希望对还不知道的人有所帮助:

@echo off
set var=zgk.com
echo 变量var的值是:%var%
pause
set b=%var:~0,5%
rem %var:~0,5%:从头开始取前5个赋值给变量
echo 我认为的b=^%%var:^~0,5^%%结果是:zgk.c
echo 变量b的值是:%b%
pause

set c=%var:~1,5%
rem %var:~1,5%:从第2个开始取前5个赋值给变量
echo 我认为的c=^%%var:^~1,5^%%结果是:gk.co
echo 变量c的值是:%c%
pause

set e=%var:~0,-3%
rem %var:~0,-3%:截取最后3个,从头开始取到尾赋值给变量
echo 我认为的e=^%&var:^~0,-3^%%结果是:zgk.
echo 变量e的值是:%e%
pause

set f=%var:~1,-3%
rem %var:~1,-3%:截取最后3个,从第2个开始取到尾赋值给变量
echo 我认为的f=^%%var:^~1,-3^%%结果是:gk.
echo 变量f的值是:%f%
pause

echo 我认为的g=^%%var:^~3^%%结果是:.com
set g=%var:~3%
rem %var:~3%:从第4个开始取到尾赋值给变量
echo 变量g的值是:%g%

pause
set d=%var:~-3%
rem %var:~3%:只取后3个赋值给变量
echo 我认为的^d=^%%var:^~-3^%%结果是:com
echo 变量d的值是:%d%
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
snowbbbb +2 2008-03-12 19:04
2 发表于 2008-03-12 18:12 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
snowbbbb -2 2008-03-12 19:04
tireless +2 2008-05-27 14:17
3 发表于 2008-03-12 19:06 ·  中国 河南 南阳 联通
初级用户
积分 118
发帖 42
注册 2006-09-14 21:58
19年会员
UID 62590
状态 离线
新手学东西 最好是一个一个命令来教 hat所引用的这篇贴子 用的for命令是我们这样的新手还不会的 我上午看了一上午 http://www.cn-dos.net/forum/view ... ;highlight=%2Blxmxn 得到的结果不如花几分钟看tempuser这样的解说
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
HAT +3 2008-03-12 23:07
4 发表于 2008-03-12 19:21 ·  中国 湖北 武汉 电信
初级用户
积分 108
发帖 49
注册 2008-02-26 18:54
18年会员
UID 111491
性别 男
状态 离线
学好了截取变量字符 的用法,请参考http://www.cn-dos.net/forum/viewthread.php?tid=26918
5 发表于 2008-03-12 23:07 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by snowbbbb at 2008-3-12 07:06 PM:
新手学东西 最好是一个一个命令来教 hat所引用的这篇贴子 用的for命令是我们这样的新手还不会的 我上午看了一上午 http://www.cn-dos.net/forum/view 很好 很强大 +分
6 发表于 2008-03-13 11:53 ·  中国 山东 青岛 联通
新手上路
积分 17
发帖 9
注册 2008-01-29 10:57
18年会员
UID 109749
性别 男
状态 离线
谢谢,学习了
7 发表于 2008-03-15 01:26 ·  中国 广东 深圳 电信
初级用户
★★
积分 188
发帖 96
注册 2008-03-11 00:59
18年会员
UID 112592
性别 男
状态 离线
tks
8 发表于 2008-03-15 02:48 ·  中国 北京 联通
中级用户
★★
积分 206
发帖 100
注册 2007-07-09 20:51
19年会员
UID 93566
性别 男
状态 离线
截取字符还是不怎么熟练...
9 发表于 2008-03-16 23:30 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 233
发帖 117
注册 2007-11-28 02:38
18年会员
UID 104005
性别 男
状态 离线
好东西。通俗易懂。谢谢楼主。。
10 发表于 2008-03-18 00:09 ·  中国 江西 吉安 电信
初级用户
积分 97
发帖 34
注册 2007-11-16 16:04
18年会员
UID 102852
性别 男
状态 离线
3楼给的连接看不了了
11 感谢zw19750516的全面提示 发表于 2008-03-18 10:41 ·  中国 黑龙江 大庆 大庆中基石油通信建设有限公司
高级用户
★★
积分 547
发帖 261
注册 2006-04-15 16:50
20年会员
UID 53887
状态 离线
Originally posted by tempuser at 2008-3-12 17:44:
以下是我的学习心得,希望对还不知道的人有所帮助:

@echo off
set var=zgk.com
echo 变量var的值是:%var%
pause
set b=%var:~0,5%
rem %var:~0,5%:从头开始取前5个赋 ...


对zw19750516的全面提示稍加修改,觉得更适合自己的理解:
%var:~a,b%
注意:b不能为零;如a和b都为“负数”,a的绝对值一定要大于b的绝对值。
REM a为负数时,从变量var后端截取/保留a个字符赋值给新变量
REM b为负数时,从变量var后端截掉/丢弃b个字符后,剩余部分赋值给新变量
REM a为正数时,从变量var开头处截掉/丢弃a个字符后,剩余部分赋值给新变量
REM b为正数时,从变量var开始截取处保留b个字符赋值给新变量
12 发表于 2008-03-19 21:04 ·  中国 福建 福州 电信
初级用户
积分 31
发帖 11
注册 2007-09-10 16:43
18年会员
UID 97033
性别 男
状态 离线
学习
<img src="
13 发表于 2008-05-27 13:16 ·  中国 天津 电信
初级用户
积分 34
发帖 15
注册 2008-05-14 13:21
18年会员
UID 118642
性别 男
状态 离线
实例类的对新手真是太好了
我现在大概能看懂你的东西,慢慢我自己再试试基本山就差不多掌握一点了~~
谢谢啊
14 很亲切,呵呵 发表于 2008-05-27 14:52 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
突然看见这个帖子很亲切,因为前两天自己也做了这方面的笔记,呵呵
贴出来,大家分享下!
可能感觉"很傻很天真",但是我们是新手,最不怕的是丢人!哈哈哈

@echo off
set var=liangguozhu
echo var=%var%
pause

rem %var:~a,b% 对于参数a,b的规律总结:
rem 注意:b不能为零;如a和b都为“负数”,a的绝对值一定要大于b的绝对值。
rem ==================================================================

rem ①a<0 b<0
rem 从变量var中a位置开始截取/保留(b-a)个字符赋值给新变量
set h=%var:~-3,-1%
echo ^%%var:^~-3,-1^%%:zh
echo %h%
pause


rem ②a<0 b>0
rem 从变量var中a位置开始截取/保留b个字符赋值给新变量
rem 注意:如果b>a的绝对值,也就是说从a位置到字符串最后的字符总数<b,这时候将a位置到字符串最后的字符赋值给新变量

set h=%var:~-4,3%
echo ^%%var:^~-4,3^%%:ozh
echo %h%
pause

set h=%var:~-4,5%
echo ^%%var:^~-4,5^%%:ozhu
echo %h%
pause


rem ③a>0, b<0
rem 从变量var中a位置开始往前截掉/丢弃至位置b的字符后,剩余部分赋值给新变量
set i=%var:~3,-1%
echo ^%%var:^~3,-1^%%:ngguozh
echo %i%
pause


rem ④a>0, b>0
rem 从变量var中a位置开始往后截取/保留b个字符赋值给新变量
set j=%var:~1,3%
echo ^%%var:^~1,3^%%:ian
echo %j%
pause

rem ⑤a=0, b>0
rem 从变量var开头往后截取/保留b个字符赋值给新变量
set k=%var:~0,3%
echo ^%%var:^~0,3^%%:lia
echo %k%
pause

rem ⑥a=0, b<0
rem 从变量var最后往前截掉/丢弃b个字符后,剩余部分赋值给新变量
set k=%var:~0,-3%
echo ^%%var:^~0,-3^%%:liangguo
echo %k%
pause


rem ⑦a没有, b<0
rem 截取/保留最后的|b|个字符
set l=%var:~-3%
echo ^%%var:^~-3^%%:zhu
echo %l%
pause


rem ⑧a没有, b>0
rem 截掉/丢弃前面的b个字符后,剩余部分赋值给新变量
set m=%var:~3%
echo ^%%var:^~3^%%:ngguozhu
echo %m%
pause
無求一生光輝 唯朢鬥志不會斷
15 发表于 2008-05-27 16:19 ·  中国 山西 忻州 联通
初级用户
积分 35
发帖 18
注册 2007-01-14 01:18
19年会员
UID 76436
性别 男
状态 离线
好好,我是新手,学习了
论坛跳转: