[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 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%!
复制代码

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

请教下为什么上面的截取字符串无法获得结果

TOP

好像是括号的问题

TOP

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

我的本意是括号里的类似的功能应该怎么写
要截取的长度是变量。

TOP

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

TOP

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



    谢谢,我是要在FOR循环里用,所以还是要看看在括号里究竟怎么写的!

TOP

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

TOP

回复 6# tangtian


    把完整代码贴出来。直接说你想实现什么功能。

TOP

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

评分人数

    • tangtian: 这个也不失为一种好方法技术 + 1
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 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中变量的起始位置,读取字符

TOP

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

TOP

返回列表