我正在文件中阅读第一列,其中包含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%
答案 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
。