dos batch从字符串中提取字符

时间:2012-11-28 19:47:51

标签: batch-file dos

我正在文件中阅读第一列,其中包含0002C10002C20003C10004C1

仅提取前4位数字并将它们放入变量中。

FOR /F "tokens=1" %i IN (export.txt) DO (

  echo %i

  set s=%i:~0,4%

  echo %s%

)

在输出中,echo % i的结果是正确的,提取数字似乎也正常工作(当我尝试一个条目时,结果是正确的)但是s的值似乎没有改变! 有人能看出问题所在吗?

以下是我收到的输出:

0002C1
%s%
0002C2
%s%
0003C1
%s%
0004C1
%s%

2 个答案:

答案 0 :(得分:0)

首先:您需要使用 SETLOCAL ENABLEDELAYEDEXPANSION 命令扩展变量...

第二:你试图“削减”一个特殊的var(%i:~0,1%),你不能。

我的解决方案:

@Echo OFF

:: By Elektro H@cker

FOR /F %%# IN (export.txt) DO (
  Call Set "Token=%%#"
  Call Set "Token=%%Token:~0,4%%"
  Call Echo %%Token%%
)

Pause&Exit

答案 1 :(得分:0)

您的脚本存在一些问题,只需要进行一些调整,效果很好。

您需要使用延迟扩展来访问您在for循环中创建的变量。

setlocal enabledelayedexpansion
FOR /F "tokens=1" %%i IN (export.txt) DO (
  echo %%i
  set x=%%i
  set s=!x:~0,4!
  echo !s!
)

唯一的区别是您将%替换为!,告诉cmd使用延迟扩展而不是读取变量。

当您使用批处理文件时,您需要为%变量使用双for个。

您还需要将%%i分配给某个内容,以便在其两侧使用变量符号,在这种情况下,我使用了x