中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 18:03
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 花了2个小时才明白的set用法,请大家不要见笑!
可打印版本  1,142 / 14
第1楼 tempuser 发表于 2008-03-12 17:44
高级用户 发帖 261 积分 547
花了2个小时才明白的set用法,请大家不要见笑!
以下是我的学习心得,希望对还不知道的人有所帮助:

@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
第2楼 HAT 发表于 2008-03-12 18:12
版主 发帖 5,017 积分 9,023
第3楼 snowbbbb 发表于 2008-03-12 19:06
初级用户 发帖 42 积分 118
新手学东西 最好是一个一个命令来教 hat所引用的这篇贴子 用的for命令是我们这样的新手还不会的 我上午看了一上午 http://www.cn-dos.net/forum/view ... ;highlight=%2Blxmxn 得到的结果不如花几分钟看tempuser这样的解说
第4楼 learner0 发表于 2008-03-12 19:21
初级用户 发帖 49 积分 108
学好了截取变量字符 的用法,请参考http://www.cn-dos.net/forum/viewthread.php?tid=26918
第5楼 HAT 发表于 2008-03-12 23:07
版主 发帖 5,017 积分 9,023
Originally posted by snowbbbb at 2008-3-12 07:06 PM:
新手学东西 最好是一个一个命令来教 hat所引用的这篇贴子 用的for命令是我们这样的新手还不会的 我上午看了一上午 http://www.cn-dos.net/forum/view 很好 很强大 +分
第6楼 oszero 发表于 2008-03-13 11:53
新手上路 发帖 9 积分 17
谢谢,学习了
第7楼 woo88 发表于 2008-03-15 01:26
初级用户 发帖 96 积分 188
tks
第8楼 313885174 发表于 2008-03-15 02:48
中级用户 发帖 100 积分 206
截取字符还是不怎么熟练...
第9楼 dslz666 发表于 2008-03-16 23:30
中级用户 发帖 117 积分 233
好东西。通俗易懂。谢谢楼主。。
第10楼 jy02141405 发表于 2008-03-18 00:09
初级用户 发帖 34 积分 97
3楼给的连接看不了了
第11楼 tempuser 发表于 2008-03-18 10:41
高级用户 发帖 261 积分 547
感谢zw19750516的全面提示
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楼 star85 发表于 2008-03-19 21:04
初级用户 发帖 11 积分 31
学习
第13楼 MASKKID 发表于 2008-05-27 13:16
初级用户 发帖 15 积分 34
实例类的对新手真是太好了
我现在大概能看懂你的东西,慢慢我自己再试试基本山就差不多掌握一点了~~
谢谢啊
第14楼 easonL 发表于 2008-05-27 14:52
初级用户 发帖 56 积分 118 来自 南京
很亲切,呵呵
突然看见这个帖子很亲切,因为前两天自己也做了这方面的笔记,呵呵
贴出来,大家分享下!
可能感觉"很傻很天真",但是我们是新手,最不怕的是丢人!哈哈哈

@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楼 yesmao 发表于 2008-05-27 16:19
初级用户 发帖 18 积分 35
好好,我是新手,学习了
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023