这是我的代码:
FOR /F "delims=" %%1 IN (COAFN1T_N1E827682.BST) DO (
SET TempRecord=%%1
echo %TempRecord%
SET Strat=%TempRecord:~254,8%
SET VCNum=%TempRecord:~263,4%
goto EndWHile
)
:EndWhile
这是我运行时的样子。你可以看到我回复TempRecord时它是空白的。
Z:\CLIENTS\COAF\NewUsed\BIN\BAT\test>(
SET TempRecord=201404 xxxxxxxx xxxxxx xxxx xxxxxxx
Rd. xxxxx TX xxxxx
xxx_x_V7 xxx_V2 N1E_V1 NUB_C_V8 2.39
05/24/2014 4102014 VC01 03/31/2014
echo
SET Strat=~254,8
SET VCNum=~263,4
goto EndWHile
)
ECHO已开启。
答案 0 :(得分:1)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}
因此,FOR ... DO (block)
将在遇到IF (something) else (somethingelse)
时使用%variables%
的值执行。
解决此问题的两种常见方法是1)使用IF
并使用setlocal enabledelayedexpansion
代替!var!
来访问已更改的%var%
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。
%n,其中n是var
到0
是指提供给过程的参数号(例如,来自命令行)您必须使用a..z或A..Z对于循环控制变量(也有一些其他字符,但只记录字母) - 这是CaSe-SeNsItIvE,
这样:
9
应该适合你 - 我还没有测试过它。