Board logo

标题: [文本处理] 批处理截取字符串长度的问题 [打印本页]

作者: netdzb    时间: 2021-1-19 09:55     标题: 批处理截取字符串长度的问题

本帖最后由 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。我写了一个比较笨的写法,有没有优雅一点的写法?
作者: qixiaobin0715    时间: 2021-1-19 10:17

回复 1# netdzb
截取前10位:echo %ifo:~0,10%
截取后10位:echo %ifo:~-10%
作者: netdzb    时间: 2021-1-19 10:21

本帖最后由 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%
作者: qixiaobin0715    时间: 2021-1-19 10:31

  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
复制代码

作者: netdzb    时间: 2021-1-19 10:35

本帖最后由 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循环里面就无法实现了吗?
作者: qixiaobin0715    时间: 2021-1-19 10:50

call echo %%ifo:~%n%,10%%
作者: netdzb    时间: 2021-1-19 10:54

回复 6# qixiaobin0715

批处理好神奇啊,这是什么原理啊?
作者: qixiaobin0715    时间: 2021-1-19 10:56

回复 7# netdzb
好像是预处理机制,我也不太懂
作者: qixiaobin0715    时间: 2021-1-19 10:57

call实现临时变量延迟
作者: netdzb    时间: 2021-1-19 14:34

回复 9# qixiaobin0715

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

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

这个可以正则可以做到吗?
作者: terse    时间: 2021-1-21 15:28

本帖最后由 terse 于 2021-1-21 15:29 编辑
  1. set s=000007
  2. set s=!s:~-5!
  3. echo;!s!
复制代码
回复 10# netdzb
正则不行 只能补位
作者: terse    时间: 2021-1-21 17:44

回复 5# netdzb
不在FOR里的话 对调一下应该可行 !ifo:~%n%,10!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2