标题: [CMD]理解变量字符的截取功能
[打印本页]
作者: lxmxn
时间: 2006-12-17 06:35
标题: [CMD]理解变量字符的截取功能
其实CMD里面变量的字符截取功能很实用,但是有的朋友还没有真正理解里面的规律,所以今天特意写了以下代码,希望对新手朋友理解CMD下面变量的字符截取功能有所帮助。
::code by lxmxn @ cn-dos.net .
::目的:帮助新手们更好的理解变量字符截取功能.
::Date 2006-12-16 .
::说明:有的变量截取之后值为空,这是正常的.
@echo off&setlocal EnableDelayedexpansion
::设置变量var的值:
set var=0123456789ABCDEF
call :begin
for /l %%a in (1,3,15) do (
for /l %%b in (1,4,15) do (
call :printf %%a %%b
)
)
call :begin
for /l %%a in (1,4,15) do (
for /l %%b in (-1,-3,-15) do (
call :printf %%a %%b
)
)
call :begin
for /l %%a in (-2,-3,-15) do (
for /l %%b in (1,4,15) do (
call :printf %%a %%b
)
)
call :begin
for /l %%a in (-1,-4,-15) do (
for /l %%b in (-2,-3,-15) do (
call :printf %%a %%b
)
)
pause
endlocal&cls&echo.
echo 演示结束了,任意键退出……
pause>nul
goto :eof
::输出结果:
:printf
echo %%var:~%1,%2%% 截取之后的字符为: !var:~%1,%2!
goto :eof
::清理屏幕:
:begin
echo\&pause&cls&echo.
echo 变量var的值为: %var%
echo.
goto :eof
点击这里下载附件(Getstr.rar)
[
Last edited by lxmxn on 2007-10-31 at 06:33 PM ]
作者: ccwan
时间: 2006-12-17 06:46
谢谢lxmxn兄,对我等新手帮助很大啊!
作者: zh159
时间: 2006-12-17 06:51
建议大家复制代码保存为BAT文件后在“截取之后的字符为”“变量var的值为”之前用TAB加一个制表符,这样显示就整洁了
作者: lxmxn
时间: 2006-12-17 07:41
Re ccwan :
汗,你还是新手啊?
多谢加分鼓励。^_^
Re zh159 :
多谢兄的提议和加分。
自己把帖子重新编辑了半天,但是可惜的是最终还是没有达到整齐的显示效果。最后只能以附件的形式让大家下载了。
作者: redtek
时间: 2006-12-17 07:47
太精彩了~~
字体为什么变小了?
作者: lxmxn
时间: 2006-12-17 07:57
Quote: |
Originally posted by redtek at 2006-12-17 07:47:
太精彩了~~
字体为什么变小了? |
|
兄所说的字体变小了,是指的什么?我主题的字体变大了才对呀。
作者: jmz573515
时间: 2006-12-17 08:01
好东西,学习。
作者: lianjiang2004
时间: 2006-12-17 10:03
学习了。好贴。
作者: vkill
时间: 2006-12-17 21:49
字太小了
作者: ccwan
时间: 2006-12-17 22:03
若是因字小不好读,可以按住Ctrl键,然后向上转动鼠标滑轮就大了,向下是变小。
作者: wydos
时间: 2006-12-18 00:07
精彩!!!
作者: lxmxn
时间: 2006-12-18 03:21
把字体调整了一下,大家再看字体有多大。
我昨天特意把字体调整得比较大,今天上论坛怎么突然一下变很小了,不知道是什么原因。
作者: freeapple
时间: 2006-12-18 03:35
经典,新手有福了!呵呵
作者: redtek
时间: 2006-12-24 23:59
精彩~~好贴子顶起来~:)
作者: xuzhenhui
时间: 2007-1-13 21:41
好东西,好得说不出,原来批处理还有如此细致的功能.
作者: lotus516
时间: 2007-1-14 03:57
谢谢lxmxn兄,对我等新手帮助很大啊!
作者: yesmao
时间: 2007-1-14 04:22
路过学习一下,3Q
作者: netchxing
时间: 2007-1-14 12:41
学习了,谢谢!
作者: wuyugui
时间: 2007-1-15 23:48
太复杂了,看不懂,能不能每行加注解呀 调用和循环过程是怎样的 说一下呀 对于CALL
goto :eof这个东东我都看不懂,关于这call goto :eof能说明一下吗?谢谢!
作者: lxmxn
时间: 2007-1-16 04:39
call 可以调用一些外部命令和内部命令,也可以调用批处理程序内的标签段。这里call :print表示调用这个批处理程序下面的:print程序段。另外,call 还可以加参数调用批程序段。
goto :eof 如果在一个标签里面,那么就表示跳出此标签,如果在批处理程序其它的位置,表示跳转到批处理程序的结尾出,就表示退出批程序。
作者: lbqldos
时间: 2007-2-2 08:06
精彩,有学到东西了,3Q!
作者: lpclimber
时间: 2007-3-4 22:14
强呀!要好好学习一下!
作者: qingfushuan
时间: 2007-3-4 22:42
标题: 强啊,学习了
以LZ的实力肯定能够再作一份类似的延时变量.bat,热切盼望中
作者: tianlijian
时间: 2007-3-14 04:53
echo\&pause&cls&echo.
中的\ 起什么作用
作者: yangzhiyi
时间: 2007-3-17 09:49
强强强,好强,到后面再跳出回来,循环做得真是高。
作者: HUNRYBECKY
时间: 2007-3-17 11:47
不错。收藏。这方面还没有深入学习
作者: star8289
时间: 2007-3-22 05:01
echo %%var:~%1,%2%% 截取之后的字符为: !var:~%1,%2!
-------------------这句不甚明了,可以详细的解释下么?
谢谢~
作者: enliang
时间: 2007-3-22 05:16
新手,还有些看不懂
作者: lxmxn
时间: 2007-3-22 07:51
Re tianlijian:
这里的/和 ; , . \ 等符号的作用一样,表示输出一个空行。
Re star8289:
你可以结合代码的输出来分析它的作用,其中%1和%2代表第一、第二个命令行参数。
作者: zzhh612
时间: 2007-3-25 10:06
标题: 好东西值得我们推广.多好的教学手段...
能不能把批处理命令都做成这种带演示功能的批处理代码.不过这要高手才能完成的事情了,希望有心人去做这件有意义的事情
作者: stornager
时间: 2007-3-26 06:20
标题: 楼主真强
我要争取赶上楼主,谢谢啦!
作者: lxmxn
时间: 2007-3-27 00:17
Quote: |
Originally posted by stornager at 2007-3-25 17:20:
我要争取赶上楼主,谢谢啦! |
|
呵呵,但愿如此~
作者: lp1129
时间: 2007-3-28 00:14
强烈的支持,受益匪浅啊
作者: 9306516
时间: 2007-4-14 09:08
答案暗暗暗暗暗暗暗暗
作者: tongwandou
时间: 2007-4-19 11:52
这种教法太好了,我也基本上会提取了,但是不知道有什么实用的价值?
作者: lxmxn
时间: 2007-4-19 13:16
Re tongwandou:
实用价值可大呢。比如你可以提取一个字符串的前3个字符,或者后5个字符,或者第10到第20个字符,很多都可以用到。
作者: minmin888
时间: 2007-5-8 20:57
好东西,全面.
作者: 8250
时间: 2007-5-9 09:31
Quote: |
Originally posted by lxmxn at 2007-1-16 04:39:
goto :eof 如果在一个标签里面,那么就表示跳出此标签,如果在批处理程序其它的位置,表示跳转到批处理程序的结尾出,就表示退出批程序。 |
|
首先感谢版主的分享。
其次请教一个问题:
:eof是否是一个特殊的标签和一般普通的标签不同?
作者: bing614
时间: 2007-5-9 11:05
不错,又学到一招,多谢楼主。
作者: lxmxn
时间: 2007-5-9 13:29
Quote: |
Originally posted by 8250 at 2007-5-9 09:31:
首先感谢版主的分享。
其次请教一个问题:
:eof是否是一个特殊的标签和一般普通的标签不同? |
|
:EOF 一般和 goto 命令在一起使用,表示 End Of File ,意即文件的末尾。
如果这个 goto :EOF 在一个批处理文件中,表示跳到文件尾,可以理解成退出批处理,如果 goto :EOF 在一个批处理脚本程序的标签程序中,那么就退出当前的标签,回到批处理脚本程序中来。
你可以通过一些练习来理解它的作用。
作者: flyinspace
时间: 2007-5-9 13:31
Quote: |
Originally posted by lxmxn at 2007-5-9 01:29 PM:
:EOF 一般和 goto 命令在一起使用,表示 End Of File ,意即文件的末尾。
如果这个 goto :EOF 在一个批处理文件中,表示跳到文件尾,可以理解成退出批 ... |
|
可以通过 call /? 和 goto /? 来学习这个。。
作者: yh6688
时间: 2007-6-1 13:11
ok!
作者: enliang
时间: 2007-6-16 11:04
好资料.宝典
作者: bd123456789
时间: 2007-6-17 10:42
太好了,感谢指导!
不过,得请教一个问题:
pause>nul
是什么意思???
另外,为什么要启用"延迟的环境变量扩展"
它有什么用???
作者: tbs198400
时间: 2007-6-17 11:04
呵呵,楼主一不小心就急我之所急了。太精彩了。
作者: lxmxn
时间: 2007-6-17 13:30
RE bd123456789:
1、pause>nul 的效果和单独的 pause 命令的效果一样,只是没有显示“请按任意键继续. . .”的字样,这里是>nul的作用,具体分析可以搜索一下论坛相关的讨论贴子。
2、参考下面两个链接:
[原创]变量延迟详解(新手推荐)
http://www.cn-dos.net/forum/viewthread.php?tid=28273&fpage=1
什么情况下该使用变量延迟?
http://www.cn-dos.net/forum/viewthread.php?tid=20733&fpage=1
作者: bd123456789
时间: 2007-6-24 07:08
呵呵,实用
非常感谢!
作者: vk
时间: 2007-6-24 20:03
这东西灵的 已收藏 多谢LZ
作者: duanml
时间: 2007-6-24 23:29
对新人帮助很大啊~
作者: redrains
时间: 2007-9-28 11:54
真是强贴
作者: ylgzs
时间: 2007-10-9 02:43
楼主真是一位好的引导老师啊,多写点啊。。。(别拍偶。。。。呵呵)
作者: james168
时间: 2007-10-9 10:19
学习了。
谢谢lxmxn!!!
作者: 06403213
时间: 2007-10-20 02:05
还可以这样传递啊!!!
作者: fengjian
时间: 2007-10-31 18:06
请容许我发表一个很低级得问题
版主 看了你得很多帖子 心里只有2个字“佩服”
我是刚刚才接触 这类东西 有很多不明白 就比你刚刚发的这个 我演示过了
但是看不明白什么意思 希望你们不要见笑
我真的希望在今后的学习中能得到大家的帮助
谢谢
作者: lxmxn
时间: 2007-10-31 18:26
Quote: |
Originally posted by fengjian at 2007-10-31 18:06:
请容许我发表一个很低级得问题
版主 看了你得很多帖子 心里只有2个字“佩服”
我是刚刚才接触 这类东西 有很多不明白 就比你刚刚发的这个 我演 ... |
|
其实这个变量截取就相当于其它语言里面的substr函数一样,可以截取一个字符串中指定位置的子串。
比如一个字符串的前两位是你想要的,那么就可以用变量截取来获得你想要的字符串。
比如
set string=cn.sina.com
set new=%string:~0,2%
那么%new%的值就是%string%的前两个字符了,即“cn”。
作者: z310394543
时间: 2007-11-4 00:46
for /l %%a in (1,3,15) do (
for /l %%b in (1,4,15) do (
call :printf %%a %%b
)
)
能不能解释下(1,3,15) 和(1,4,15) 是控制什么的么?
作者: z310394543
时间: 2007-11-4 00:49
接上面
貌似
set var=0123456789ABCDEF
这个变量下面的FOR没用到他的值?
不懂哎 ~~
作者: lxmxn
时间: 2007-11-4 09:59
RE z310394543:
1、(1,3,15) 是控制for循环中的变量 %%i 的,表示一个等差数列,即从1开始,以3为步长增长的数列,但数最大为15。
2、var 这个变量在 call 子过程中用到了,可以搜索一下论坛关于 call 用法的例子。
作者: z310394543
时间: 2007-11-4 20:58
斑竹的效率真高
作者: jk328019419
时间: 2007-11-9 20:10
根本没讲用法,会的还是会,不会的还是不会
作者: ThinKing
时间: 2007-11-9 20:17
Quote: |
Originally posted by jk328019419 at 2007-11-9 08:10 PM:
根本没讲用法,会的还是会,不会的还是不会 |
|
自己不动脑筋思考,永远也不会。
作者: wenjiech
时间: 2007-11-18 15:18
怎么下不了啊
作者: lxmxn
时间: 2007-11-18 20:15
Quote: |
Originally posted by wenjiech at 2007-11-18 15:18:
怎么下不了啊 |
|
论坛的存附件的空间被人破坏了,直接复制代码保存吧。
作者: zdzzdz1821
时间: 2007-11-21 19:22
hao dd
作者: xiaoqiang527
时间: 2007-12-14 11:11
支持下。我刚刚喜欢上批处理!
作者: ILoveDosoo1
时间: 2007-12-14 13:57
good就是good!
作者: moniuming
时间: 2007-12-31 00:49
对我的帮助实在是太大了,非常感谢!
作者: gne
时间: 2007-12-31 19:48
没明白干什么的
作者: riversail
时间: 2008-1-9 23:09
原来批处理还有如此细致的功能
作者: wxcute
时间: 2008-1-20 09:43
call :printf %%a %%b
这句不太明白,请问后面的 %%a %%b 起到什么作用?
还有
echo. 是不是和 echo\ 一样都是换行的意思?
[
Last edited by wxcute on 2008-1-20 at 10:51 AM ]
作者: jinde22
时间: 2008-1-22 23:16
%%a %%b 是变量, 依次附给 %%1 %%2 把
谢谢.楼主.
作者: 313885174
时间: 2008-1-26 12:34
很好啊
作者: dslz666
时间: 2008-2-20 19:10
我是超级菜鸟,,这个也看不懂,,汗
作者: windowsxphao
时间: 2008-2-21 10:44
好东西,感谢,学习ing
作者: diangongban
时间: 2008-2-23 20:50
Getstr.rar不能下!!
作者: lxmxn
时间: 2008-2-23 22:29
Quote: |
Originally posted by diangongban at 2008-2-23 20:50:
Getstr.rar不能下!! |
|
论坛的上传空间出现点问题导致的,直接复制代码是一样的。
作者: oszero
时间: 2008-3-13 11:53
多谢了,对我等新手的帮助实在太大了
作者: nipo
时间: 2008-4-27 03:26
这个要好好学学。
作者: nipo
时间: 2008-4-27 03:26
这个要好好学学。
作者: cheng342709
时间: 2008-4-27 14:27
真是受益匪浅啊! …………~
我是新手,希望多出好贴~
作者: wfy150
时间: 2008-5-3 02:11
标题: 谢谢斑竹
能请斑竹帮我详细讲解下关于FOR的/R /F /D /L 的使用方法讲解下吗!我看了很多这样的就是不知所云?越看越迷糊希望斑竹点拨下 新人
作者: wfy150
时间: 2008-5-3 02:19
标题: 再次感谢斑竹
又看了一边BAT文件里的东东觉得通俗易懂真是太谢谢斑竹了
作者: a346869208
时间: 2008-5-5 08:30
我都不知道怎么用哈
作者: taqiao
时间: 2008-5-18 11:21
谢谢
作者: hansom
时间: 2008-5-25 20:42
矛塞顿开
作者: wgx1688
时间: 2008-7-11 13:50
还是没怎么看的懂~
作者: wgx1688
时间: 2008-7-11 13:50
还是没怎么看的懂~
作者: scriptfresh
时间: 2008-8-20 19:41
学习了,呵呵
作者: BC
时间: 2008-8-21 21:46
不错。。。
作者: BC
时间: 2008-8-21 21:46
不错。。。
作者: slw218856
时间: 2008-8-28 19:29
学习中,能遇上自己能接受了的东西
那种感觉是perfect
谢了
作者: airstop
时间: 2008-9-8 20:30
好的,谢谢,学习了
作者: lingkong
时间: 2008-9-27 19:02
看来有很多东西要学啊。
作者: cysky
时间: 2008-10-7 13:26
下载来看看,好长时间没有认真地学习过了,
作者: aihejiating
时间: 2008-10-20 12:38
lxmxn版主,你可以尝试着用word编辑,用word上面的标尺来定位,这样就可以整齐地输出了
作者: wzhh1982
时间: 2008-10-28 22:27
顿时豁然开朗 感激不尽
授人于渔者 可敬!
作者: lfzmx
时间: 2008-11-5 14:54
标题: [CMD]理解变量字符的截取功能
板主真是強人!我頂....!!!!!
不過我還是得虛心學習.....
有些還是看不懂....
我想問個問題:
能否用批處理DOS命令每月建立一次當月的資料夾?
謝謝
作者: HAT
时间: 2008-11-5 18:03
标题: Re 98楼
有问题请单独发帖提问,你在别人的帖子里面跟帖提问的话,很少有人能看到你的问题,愿意回答问题的就更少了。
作者: biscuit
时间: 2008-11-20 21:02
谢谢LZ~我会好好学习的~
作者: YoDe
时间: 2008-12-5 16:02
lxmxn版主的帖子对我等新人帮助太大了!谢谢 辛苦了
作者: netbenton
时间: 2009-1-7 00:03
太强了
对我的帮助太大了
我会因此爱上批处理