标题: [文本处理] BAT批处理截取字符串为何无法获得结果? [打印本页]
作者: tangtian 时间: 2014-1-24 13:00 标题: BAT批处理截取字符串为何无法获得结果?
本帖最后由 tangtian 于 2014-1-24 14:23 编辑
- @echo off & SETLOCAL enabledelayedexpansion
- (
- SET str=12345679
-
- SET n=6
-
- echo !str!
- echo !str:~0,%n%!
-
- )
- echo -------------------------------------
- echo %str%
- 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
- @echo off
- setlocal enabledelayedexpansion
- set str=12345679
- set n=6
- echo %str%
- set strNEW=!str:~0,%n%!
- echo -------------------------------------
- echo %strNEW%
复制代码
作者: tangtian 时间: 2014-1-24 15:02
DAIC 发表于 2014-1-24 14:41
谢谢,我是要在FOR循环里用,所以还是要看看在括号里究竟怎么写的!
作者: 飞翔的小鸟 时间: 2014-1-24 15:04
如果这样把setlocal放在括号内- SET str=12345679
- set n=5
- setlocal enabledelayedexpansion
- echo !str!
复制代码
可以echo出结果,但是如果执行过,再要更换n值,那就要运行第2次才会取得正确的结果.你自己再试试吧
作者: DAIC 时间: 2014-1-24 15:14
回复 6# tangtian
把完整代码贴出来。直接说你想实现什么功能。
作者: xxpinqz 时间: 2014-1-24 15:28
- @echo off & SETLOCAL enabledelayedexpansion
- (
- SET str=12345679
-
- SET n=6
-
- echo !str!
- for %%a in (!n!) do echo,!str:~0,%%a!
-
- )
- echo -------------------------------------
- echo %str%
- echo !str:~0,%n%!
复制代码
作者: tangtian 时间: 2014-1-24 15:36
本帖最后由 tangtian 于 2014-1-24 15:42 编辑
- @ECHO OFF & SETLOCAL enabledelayedexpansion
- FOR /F %%i in ('dir 20*.txt /b') DO (SET str=%%i
- FOR /F "tokens=*" %%j in (%%i) DO (SET str=%%j
-
- IF "!str:~0,10!" == "tablename=" SET str1=!str:~10!
- IF not "!str:~0,10!" == "tablename=" SET str2=!str!
-
- )
-
- set strlen=0
- for /l %%i in (0,1,30) do (
- if "!str1:~%%i,1!"=="" (if !strlen!==0 set strlen=%%i)
- )
-
- echo !str2:strlen,100!
- )
复制代码
从str2中变量的起始位置,读取字符
作者: DAIC 时间: 2014-1-24 17:16
回复 10# tangtian - @echo off
- setlocal enabledelayedexpansion
- for /f %%i in ('dir /b 20*.txt') do (
- set str=%%i
- for /f "tokens=*" %%j in (%%i) do (
- set str=%%j
- if "!str:~0,10!" == "tablename=" (
- set str1=!str:~10!
- ) else (
- set str2=!str!
- )
- )
- set strlen=0
- for /l %%i in (0,1,30) do (
- if "!str1:~%%i,1!"=="" (
- if !strlen!==0 (
- set strlen=%%i
- )
- )
- )
- call echo %%str2:~!strlen!,100%%
- )
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |