[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[转贴] plp626的批处理学习笔记

【0】前言杂记

1、windows,xp下的cmd共有71个内置命令,每个命令都自带了帮助信息,现在先把这些帮助全部导出来放到桌面的cmdhelp目录里
这里给个代码:
  1. @echo off&mode con lines=5 cols=50
  2. md cmdhelp ||(pause&exit)
  3. title 正在导出cmd帮助信息到cmdhelp目录内, 稍等...
  4. chcp 437>nul&call :help E
  5. graftabl 936>nul&call :help C
  6. cd cmdhelp
  7. set mark=───────────────────────────────────
  8. for %%i in (*.E) do (
  9.     echo.>>%%i &echo %mark%>>%%i
  10.     copy %%~ni.E+%%~ni.C EC_%%~ni.txt>nul
  11.     echo %mark%>>EC_%%~ni.txt &echo.>>EC_%%~ni.txt
  12. )
  13. del *.c;*.e
  14. find /v "" *.txt>ALL.help
  15. title 已完成 按任意键查看. &pause>nul
  16. start notepad ALL.help
  17. goto :eof
  18. :help
  19. for /f %%i in ('help^|findstr "^[A-Z]"') do help %%i>>cmdhelp\%%i.%1
  20. goto :eof
复制代码
本人还是推荐看英文原版帮助的,这个把英文的版本与中文版本放在一起了,英语差点可以结合着看,
本想做成htm格式,这个我还没想好,论坛里已经有人写过相关代码,搜下借鉴着改*改,就可以了.

下面的帖子是我边学别写的,有收获就添,所以修改是难免的,里面的用法有些可能帮助里没有解释,那这些大都是我从论坛里前辈那总结的,

掌握变量截取%str:~x,y%即:%str%的偏移量为x处,长度为y的字符

经常要用到变量的截取,所以这个命令自然得熟练掌握,这里x,y有正有负,总共也就4种情况,分别都是怎么截取呢?
做个小试验,命令提示符下演示结果:
  1. @echo off
  2. set str=%date%
  3. echo %str%
复制代码
2008-01-28 星期一
这个显示结果是说, 变量%str%的值为"2008-01-28 星期一"
  1. set a=%str:~2,4%
  2. echo %a%
复制代码
08-0
这个说明,从%str%第2个字符右侧,往后截取4个字符, 就是变量%a%的值.下同理
  1. set b=%str:~6,-2%
  2. echo %b%
复制代码
1-28 星
从%str%第6个字符右侧,往后截取%str%最后2个字符所剩余的字符, 就是变量%b%的值
  1. set c=%str:~-3,2%
  2. echo %c%
复制代码
星期
从%str%的倒数第3个字符左侧,往后截取2个字符, 就是变量%c%的值
  1. set d=%str:~-6,-2%
  2. echo %d%
复制代码
28 星
从%str%的倒数第6个字符左侧,往后截取%str%最后2个字符所剩余的字符,就是变量%d%的值

上面4种情况记忆是不方便的,重要的是抓住共性,下面是我的理解(很不专业!因为偶不是jsj专业的):

观察上面4个赋值语句并归纳得到语句:
set s=%str:~x,y%
的作用就是:在字符串%str%的偏移量x处,取"长度"为y的字符,然后赋给变量s.
理解与掌握:

记:   左->右 ---正方向
       右->左 ---负方向
       x为正或0时,偏移量x处表示沿着正方向第x个字符的右侧处.
       x为负时,   偏移量x处表示沿着负方向第x个字符的左侧处.

例如  abcdefg的偏移量为-4处就是字符d的左侧处

       y为正或0时,取"长度"为y的字符表示沿正方向获取y个字符.
       y为负时,   取"长度"为y的字符表示沿负方向舍弃|y|(y的绝对值)个字符所得的剩余字符.

例如  abcdefg的偏移量为-4处,获取长度为2的字符,就是字符d的左侧处,沿正方向获取2个字符即:"de"
        abcdefg的偏移量为2处,获取长度为-4的字符,就是字符b的右侧处,沿负方向舍弃4个字符即得到剩余的字符:"c"   
另外:
       当y为负时, %str:~y%表示获取%str%的后|y|字符(这个可以看做%str:~-|y|,|y|%的简写)
       当y为正时, %str:~y%表示舍弃%str%的前y个字符后剩余的字符(这个很重要,用偏移量+长度的方法不能表示的.)

关于简写:
       x或y其中之一为0时,0可省略. 比如: %str:~0,3%   可简写为 %str:~,3%
       x为正时 :                        %str:~-x,x'% 可简写为 %str:~-x% (这里x'是大于x的任意正数)

最后说下,不合理的截取将会得到"空"值.
比如现在执行
           set str=abcde
           set f=%str:~-2,y%
显然%str%的偏移量-2处为字符"d"的左侧,由于不管y为多少,所获取的字符串都是剩余字符串"de"的子集,所以要想%f%不为空,就要合理截取.
当y取0,±1,2其中之一时%f%不为空;当y小于或等于-2时%f%为空,而当y大于或等于2时%f%恒为"de".

另外:
环境变量替换已有如下增强:

    %PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。

比如执行:

set a=123456123456
set b=123456123456
echo %a:2=+%
echo %b:1=%

将显示: 1+34561+3456
           2345623456

原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=37382
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

好文章啊,感谢楼主写出来!!

TOP

浅说字符串偏移位置使用问题

初学批处理,目前水平仅到理解阶段,对于字符偏移问题浅谈下体会.
%str:~x,y%是批处理中提供的引用字符内容的命令.在使用过程中,为了方便,格式方面可以进行些省略.主要想的是关于省略的格式问题.
X代表需要处理的字符的位置编号(即偏移量),Y代表终止位置编号.以一个命令说明.
  1. set str=abcdefg
  2. echo %str:~0,4%
  3. pause>1
复制代码


STR内容为    a    b     c     d     e    f   g    (为了便于说明,将字符间隔开,实际的字符内容就是代码中的abcdefg)
从左起对应    0    1     2    3     4    5  6     (各位置编号)
从右起对应    -7 -6    -5   -4   -3  -2  -1      (各位置编号)
当我们想显示 abcd时,设置命令的标准为%str:~0,4%,简写就是%str:,4%.注意两点,一是"4"前面的逗号一定不能少.二是"4"对应的是f,就是说,终止位的字符不会被包括在显示范围内的.
思考下,是否可以写成%str:~-7,-3%呢?如果4前的逗号少了,会出现什么结果?%str:~0,4%为什么显示的不是bcd,不是abcde,而是abcd呢.
实验完上面的问题,相信你会有些新的体会,明白X,Y代表的变量意义以及系统在取位是的具体情况.那么再深入研究下,对比从右对应和从左对应的位置编号.可以看到,从起是没有0这个位置的,因此%str:~0,0%是不能得到abcdefg的结果,那么%str:~0,-1%不就可以了么?如果这样认为,你要把上面输出abcd的程序再多练习体会.要想得到最后带有最后一个字符的输出,只能是%str:~x%

双引号内为引用楼主一楼部分内容.

"当y为负时, %str:~y%表示获取%str%的后|y|字符(这个可以看做%str:~-|y|,|y|%的简写)
       当y为正时, %str:~y%表示舍弃%str%的前y个字符后剩余的字符(这个很重要,用偏移量+长度的方法不能表示的.)

关于简写:
       x或y其中之一为0时,0可省略. 比如: %str:~0,3%   可简写为 %str:~,3%"
再读这段话,是否有了新的体会?只是楼主说的Y也可以为0我认为是不可以的.%str:~x%的写法并不是Y为0时的一种省略格式,应该属于一种特殊情况.当以标准格式%str:~x,y%写命令时,Y为何值时可以输出最后一个字符,需要各高手说明.

TOP

即使冒着被封的风险,我还是要顶!!

TOP

好强大,这回有的消化了。

TOP

看到大多还是强人达人再相互交流。
希望能差上几句话。

TOP

搜藏,很经典,很强大~!

TOP

经典!经典!
直接收集一起打包吧!

TOP

收藏了   对我这种 丢三拣四的人很有用

TOP

好丰富的教程啊,收藏慢慢看,谢谢分享~~

TOP

回复 22楼 的帖子

坚持记笔记,你也会变成强人:)
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

真是强人,竟然会有笔记,顶

TOP

回复 20楼 的帖子

他最近在忙于找工作,可能过段时间工作稳定下来以后,会回来的。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

plp 是热爱数学的一个人~

不过他对批处理的热好像过了,偶很少看见他逛论坛……

[ 本帖最后由 523066680 于 2009-3-20 17:46 编辑 ]

TOP

强人。
我在联盟呆了很久也没点长进,PLP626 就不一样了。
慢慢研究。
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

返回列表