Board logo

标题: [文本处理] BAT批处理截取字符串为何无法获得结果? [打印本页]

作者: tangtian    时间: 2014-1-24 13:00     标题: BAT批处理截取字符串为何无法获得结果?

本帖最后由 tangtian 于 2014-1-24 14:23 编辑
  1. @echo off & SETLOCAL enabledelayedexpansion
  2. (
  3. SET str=12345679
  4. SET n=6
  5. echo !str!
  6. echo !str:~0,%n%!
  7. )
  8. echo -------------------------------------
  9. echo %str%
  10. echo !str:~0,%n%!
复制代码

作者: tangtian    时间: 2014-1-24 13:16

12345679
ECHO 处于关闭状态。
-------------------------------------
12345679
123456

请教下为什么上面的截取字符串无法获得结果
作者: 飞翔的小鸟    时间: 2014-1-24 14:14

好像是括号的问题
作者: tangtian    时间: 2014-1-24 14:16

本帖最后由 tangtian 于 2014-1-24 14:17 编辑

我的本意是括号里的类似的功能应该怎么写
要截取的长度是变量。
作者: DAIC    时间: 2014-1-24 14:41

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=12345679
  4. set n=6
  5. echo %str%
  6. set strNEW=!str:~0,%n%!
  7. echo -------------------------------------
  8. echo %strNEW%
复制代码

作者: tangtian    时间: 2014-1-24 15:02

DAIC 发表于 2014-1-24 14:41



    谢谢,我是要在FOR循环里用,所以还是要看看在括号里究竟怎么写的!
作者: 飞翔的小鸟    时间: 2014-1-24 15:04

如果这样把setlocal放在括号内
  1. SET str=12345679
  2. set n=5
  3. setlocal enabledelayedexpansion
  4. echo !str!
复制代码
可以echo出结果,但是如果执行过,再要更换n值,那就要运行第2次才会取得正确的结果.你自己再试试吧
作者: DAIC    时间: 2014-1-24 15:14

回复 6# tangtian


    把完整代码贴出来。直接说你想实现什么功能。
作者: xxpinqz    时间: 2014-1-24 15:28

  1. @echo off & SETLOCAL enabledelayedexpansion
  2. (
  3. SET str=12345679
  4. SET n=6
  5. echo !str!
  6. for %%a in (!n!) do echo,!str:~0,%%a!
  7. )
  8. echo -------------------------------------
  9. echo %str%
  10. echo !str:~0,%n%!
复制代码

作者: tangtian    时间: 2014-1-24 15:36

本帖最后由 tangtian 于 2014-1-24 15:42 编辑
  1. @ECHO OFF & SETLOCAL enabledelayedexpansion
  2. FOR /F %%i in ('dir 20*.txt /b') DO (SET str=%%i
  3. FOR /F "tokens=*" %%j in (%%i) DO (SET str=%%j
  4. IF "!str:~0,10!" == "tablename=" SET str1=!str:~10!
  5. IF not "!str:~0,10!" == "tablename=" SET str2=!str!
  6. )
  7. set strlen=0
  8. for /l %%i in (0,1,30) do (
  9. if "!str1:~%%i,1!"=="" (if !strlen!==0 set strlen=%%i)
  10. )
  11. echo !str2:strlen,100!
  12. )
复制代码
从str2中变量的起始位置,读取字符
作者: DAIC    时间: 2014-1-24 17:16

回复 10# tangtian
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('dir /b 20*.txt') do (
  4.     set str=%%i
  5.     for /f "tokens=*" %%j in (%%i) do (
  6.         set str=%%j
  7.         if "!str:~0,10!" == "tablename=" (
  8.             set str1=!str:~10!
  9.         ) else (
  10.             set str2=!str!
  11.         )
  12.     )
  13.     set strlen=0
  14.     for /l %%i in (0,1,30) do (
  15.         if "!str1:~%%i,1!"=="" (
  16.             if !strlen!==0 (
  17.                 set strlen=%%i
  18.             )
  19.         )
  20.     )
  21.     call echo %%str2:~!strlen!,100%%
  22. )
复制代码





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