1

我正在读取文件中的第一列,其中包含 0002C1, 0002C2, 0003C1,0004C1

仅提取前 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%
4

2 回答 2

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!
)

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

当您使用批处理文件时,您需要对变量使用%double for

您还需要分配%%i一些东西,以便您可以在它的任一侧使用变量符号,在这种情况下,我使用了x.

于 2012-11-29T08:54:38.220 回答
0

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

第二:你试图“剪切”一个特殊的变量(%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
于 2012-11-28T20:30:47.017 回答