无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2471|回复: 12
打印 上一主题 下一主题

[分享] 浅举例批处理bat中冒号波浪号:~的截取

  [复制链接]
跳转到指定楼层
1#
发表于 2024-2-24 14:05:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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
   具体规律,大家自行总结吧,实则是不太好表述啊



2#
 楼主| 发表于 2024-2-24 14:14:32 | 只看该作者
本帖最后由 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,否则报错。
.

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

.





回复

使用道具 举报

3#
发表于 2024-2-24 14:45:54 | 只看该作者
不错 谢谢
回复

使用道具 举报

4#
发表于 2024-2-24 15:08:24 | 只看该作者

不错哦 谢谢
回复

使用道具 举报

5#
发表于 2024-2-24 15:11:43 | 只看该作者
有什么用吗
回复

使用道具 举报

6#
发表于 2024-2-24 15:59:22 | 只看该作者

点评

谢谢h大师,您这个帖子我都收藏过,可惜当时没看懂,,最近研究批处理,dos菜鸟大师的那个帖子研读多遍,就是因为没弄懂":~"能提取变量字符串才看不明白,,现百度好多才弄懂,,话说批处理中特殊符号之稀奇古怪用  详情 回复 发表于 2024-2-24 16:15
回复

使用道具 举报

7#
 楼主| 发表于 2024-2-24 16:15:59 来自手机 | 只看该作者
hilsonma 发表于 2024-2-24 15:59
可以对照一下我的表述:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=438623

谢谢h大师,您这个帖子我都收藏过,可惜当时没看懂,,最近研究批处理,dos菜鸟大师的那个帖子研读多遍,就是因为没弄懂":~"能提取变量字符串才看不明白,,现百度好多才弄懂,,话说批处理中特殊符号之稀奇古怪用法太多了…
回复

使用道具 举报

8#
发表于 2024-2-24 17:17:37 | 只看该作者
批处理在字符串方面有很奇技,用好了程序精练高效,甚至自带加密感觉,但也是在字符串方面最难学难用的一个脚本语言了,相对来说VBS和AU3效率就高多了。

点评

处理提取、查找字符方面,excel+vba+正则表达式我感觉没有敌手。  详情 回复 发表于 2024-2-24 17:27
回复

使用道具 举报

9#
 楼主| 发表于 2024-2-24 17:27:38 来自手机 | 只看该作者
9zhmke 发表于 2024-2-24 17:17
批处理在字符串方面有很奇技,用好了程序精练高效,甚至自带加密感觉,但也是在字符串方面最难学难用的一个 ...

处理提取、查找字符方面,excel+vba+正则表达式我感觉没有敌手。
回复

使用道具 举报

10#
发表于 2024-2-24 20:23:43 | 只看该作者
看看 学习
回复

使用道具 举报

11#
发表于 2024-2-24 23:12:00 | 只看该作者
谢谢分享
回复

使用道具 举报

12#
发表于 2024-2-25 10:42:26 | 只看该作者
谢谢分享经验
回复

使用道具 举报

13#
发表于 2024-2-25 10:56:33 | 只看该作者
感谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-25 13:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表