无忧启动论坛

标题: 浅举例批处理bat中冒号波浪号:~的截取 [打印本页]

作者: likeyouli    时间: 2024-2-24 14:05
标题: 浅举例批处理bat中冒号波浪号:~的截取
本帖最后由 likeyouli 于 2024-3-1 15:50 编辑

最近求助了批处理的2个问题,感谢大家的帮助。 学习批处理过程中,有感于@dos时代菜鸟 的这个帖子,http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409719&page=1,研究了半天,才发现是冒号起到了截取字符串的作用,经研究,:英文冒号截取有以下特点:
  1. @echo off
  2. set n=abcdefg123456789

  3. echo 从头开始的5个字符:
  4. echo %n:~0,5%
  5. echo.

  6. echo 从最后一个开始的5个字符:
  7. echo %n:~-5%
  8. echo.

  9. echo 从头开始,截取到倒数第6个字符:
  10. echo %n:~0,-5%
  11. echo.

  12. echo 从头开始,从第4个字符开始截取5个
  13. echo %n:~3,5%
  14. echo.

  15. echo %n:~-6,3%
  16. echo %n:~-6,-1%
  17. echo %n:~6,-3%
  18. echo %n:~6,3%
复制代码
返回以下内容:
E:\>13.bat
从头开始的5个字符:
abcde

从最后一个开始的5个字符:
56789

从头开始,截取到倒数第6个字符:
abcdefg1234

从头开始,从第4个字符开始截取5个
defg1

456
45678
g123456
g12
   具体规律,大家自行总结吧,实则是不太好表述啊




作者: likeyouli    时间: 2024-2-24 14:14
本帖最后由 likeyouli 于 2024-2-24 19:00 编辑

echo %n:~0,5%   --返回从头开始的5个字符;.
echo %n:~5%  --如果没有0,这样写会返回从左数第6个到末尾的全部字符;.
试着总结以下规则:m、t代表数字,n为变量,代表字符串:①一个数字的情况,分两种情况:
一是如果为%n:~m%形式:如果m为正数,返回从左数m+1个到最后的字符串;如果m为负数,返回从右数|m|到最后的字符串;如果m为0,则返回整个字符串;
二是如果为%n:~,m%形式:如果m为0或正数,返回从左数第1个开始,取m个字符串,与上边~后没有逗号时正好相反;如果m为负数,从左数第一个开始,到右数第|m|+1个结束,与上边~后没有,时相反。
②如果为%n:~t,m%形式,即有二个数字,因为m不能等于0(为0会报错),分六种情况(我先全部罗列出,再总结)
一是t为正数,m为正数:从左数第t+1个开始,取m个字符串;
二是t为正数,m为负数:从左数第t+1个开始,到右数|m|+1个结束;
三是t为0,m为正数:从左数第1个开始,取m个字符串;
四是t为0,m为负数:从左数第1个开始,到右数|m|+1个结束;
五是t为负数,m为正数:从右数第t个开始,取m个字符串;
六是t为负数,m为负数:从右数第t个开始,到右数|m|+1个结束,所以必须|t|≥|m|+1,否则报错。前四种可以合并为二种:
一是t为0或正数,m为正数:从左数t+1个开始,取m个字符串;
二是t为0或正数,m为负数:从左数t+1个开始,到右数|m|+1个结束;
三是t为负数,m为正数:从右数第t个开始,取m个字符串;
四是t为负数,m为负数:从右数第t个开始,到右数|m|+1个结束,所以必须|t|≥|m|+1,否则报错。
.

我倒觉着可以根据逗号简单记忆:~后有逗号的,即~,结束点根据逗号(,)后的数决定;
                                                ~后没有逗号的,结束点就是字符串结尾。                                     .
                                   有逗号与没有逗号,取值正好相反。
.

.






作者: yyz2191958    时间: 2024-2-24 14:45
不错 谢谢
作者: zlq_hysy    时间: 2024-2-24 15:08

不错哦 谢谢
作者: 专注windows安装    时间: 2024-2-24 15:11
有什么用吗
作者: hilsonma    时间: 2024-2-24 15:59
可以对照一下我的表述:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=438623
作者: likeyouli    时间: 2024-2-24 16:15
hilsonma 发表于 2024-2-24 15:59
可以对照一下我的表述:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=438623

谢谢h大师,您这个帖子我都收藏过,可惜当时没看懂,,最近研究批处理,dos菜鸟大师的那个帖子研读多遍,就是因为没弄懂":~"能提取变量字符串才看不明白,,现百度好多才弄懂,,话说批处理中特殊符号之稀奇古怪用法太多了…
作者: 9zhmke    时间: 2024-2-24 17:17
批处理在字符串方面有很奇技,用好了程序精练高效,甚至自带加密感觉,但也是在字符串方面最难学难用的一个脚本语言了,相对来说VBS和AU3效率就高多了。
作者: likeyouli    时间: 2024-2-24 17:27
9zhmke 发表于 2024-2-24 17:17
批处理在字符串方面有很奇技,用好了程序精练高效,甚至自带加密感觉,但也是在字符串方面最难学难用的一个 ...

处理提取、查找字符方面,excel+vba+正则表达式我感觉没有敌手。
作者: AsuraX    时间: 2024-2-24 20:23
看看 学习
作者: yc2428    时间: 2024-2-24 23:12
谢谢分享
作者: wang1126    时间: 2024-2-25 10:42
谢谢分享经验
作者: 白云间    时间: 2024-2-25 10:56
感谢分享!




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3