找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27835|回复: 11

[文本处理] 批处理截取字符串长度的问题

[复制链接]
发表于 2021-1-19 09:55:09 | 显示全部楼层 |阅读模式
本帖最后由 netdzb 于 2021-1-21 14:51 编辑
  1. @echo off
  2.   set ifo=d6b278efc3f372ece0c93d2b7526510b
  3.   echo %ifo:~0,10%
  4.   echo %ifo:~1,10%
  5.   echo %ifo:~2,10%
  6.   echo %ifo:~3,10%
  7.   echo %ifo:~4,10%
  8.   echo %ifo:~5,10%
  9.   echo %ifo:~6,10%
  10.   echo %ifo:~7,10%
  11.   echo %ifo:~8,10%
  12.   echo %ifo:~9,10%
  13.   echo %ifo:~10,10%
  14.   echo %ifo:~11,10%
  15.   echo %ifo:~12,10%
  16.   echo %ifo:~13,10%
  17.   echo %ifo:~14,10%
  18.   echo %ifo:~15,10%
  19.   echo %ifo:~16,10%
  20.   echo %ifo:~17,10%
  21.   echo %ifo:~18,10%
  22.   echo %ifo:~19,10%
  23.   echo %ifo:~20,10%
  24.   echo %ifo:~21,10%
  25.   echo %ifo:~22,10%
  26. pause
复制代码
================

截取字符串的长度,保持字符串的长度为10。我写了一个比较笨的写法,有没有优雅一点的写法?
发表于 2021-1-19 10:17:58 | 显示全部楼层
回复 1# netdzb
截取前10位:echo %ifo:~0,10%
截取后10位:echo %ifo:~-10%
 楼主| 发表于 2021-1-19 10:21:13 | 显示全部楼层
本帖最后由 netdzb 于 2021-1-19 10:22 编辑

回复 2# qixiaobin0715

对字符串进行截取,
set startPath=F:\AntiqueDetective\Dataset
set  firstPath=%startPath:~0,5%
想把截取0-5位数字改为截取0-n位数字,也就是用变量来表示,请问该如何写?

我的问题别人也提过,就是能否传递变量进去,我试过好像不行啊。

下面的代码无法通过啊

  set/a n+=1
  echo %n%
  echo %ifo:~!n!,10%
发表于 2021-1-19 10:31:37 | 显示全部楼层
  1. @echo off
  2. set ifo=d6b278efc3f372ece0c93d2b7526510b
  3. setlocal enabledelayedexpansion
  4. for /l %%a in (0,1,22) do (
  5. echo !ifo:~%%a,10!
  6. )
  7. pause
复制代码
 楼主| 发表于 2021-1-19 10:35:17 | 显示全部楼层
本帖最后由 netdzb 于 2021-1-19 10:44 编辑

回复 4# qixiaobin0715

@echo off
set n=8
  set ifo=d6b278efc3f372ece0c93d2b7526510b
  echo %ifo:~0,10%
  set/a n+=1
  echo %n%
  echo %ifo:~!n!,10%
pause
最后一行代码帮看一下,如何修改?不在for循环里面就无法实现了吗?
发表于 2021-1-19 10:50:01 | 显示全部楼层
call echo %%ifo:~%n%,10%%
 楼主| 发表于 2021-1-19 10:54:54 | 显示全部楼层
回复 6# qixiaobin0715

批处理好神奇啊,这是什么原理啊?
发表于 2021-1-19 10:56:33 | 显示全部楼层
回复 7# netdzb
好像是预处理机制,我也不太懂
发表于 2021-1-19 10:57:37 | 显示全部楼层
call实现临时变量延迟
 楼主| 发表于 2021-1-19 14:34:43 | 显示全部楼层
回复 9# qixiaobin0715

1-4位的数字正则替换怎么写

7    ===>  00007
27   ===>  00027
389  ===>  00389
4568 ===>  04568

这个可以正则可以做到吗?
发表于 2021-1-21 15:28:22 | 显示全部楼层
本帖最后由 terse 于 2021-1-21 15:29 编辑
  1. set s=000007
  2. set s=!s:~-5!
  3. echo;!s!
复制代码
回复 10# netdzb
正则不行 只能补位
发表于 2021-1-21 17:44:48 | 显示全部楼层
回复 5# netdzb
不在FOR里的话 对调一下应该可行 !ifo:~%n%,10!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 10:39 , Processed in 0.020635 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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