cls
break>ontset_time.txt
break>temp_ontsetTime.txt
set firstword="stimuli\1200.wav"
set secondword="MainScreen.OnsetTime"
findstr /l /I /n %firstword% "C:\Users\BHAVYA\Desktop\AudOdd.txt">>temp_ontsetTime.txt
for /F " delims=: tokens=1 " %%g in ( C:\Users\BHAVYA\Desktop\temp_ontsetTime.txt ) do (
echo %%g
echo.
set var=%%g%
set /a var=%var% + 4
echo %var%
for /F " delims=: tokens=1,2 skip= %var%" %%h IN ( ' findstr /l /I %secondword% "C:\Users\BHAVYA\Desktop\AudOdd.txt" ' ) do (
echo %%h %%i
echo %%i%>>ontset_time.txt
goto loop_end
)
:loop_end
echo loop ended
)
pause
答案 0 :(得分:0)
问题1:set var=%%g%
不正确; set var=%%g
更接近(%%g
访问元变量%%g
); set /a var=%%g
更好(因为%%g
显然是整数)。
问题2:你需要了解delayed expansion
- 这里有数以百计的参考资料。当%var%
循环解析时,批量替换每个for
及其值,而不是当它被执行时,因此
set /a = var + 4
会将var
的值增加4 - 然后您需要使用
call echo %%var%%
如果您未使用延迟展开,则访问var
的已更改值。
AAMOI,这相当于
set /a var=%%g+4
第三个问题 - delayedexpansion
问题 - %var%
仍然会被解析for...%%g...
时的值替换,而不是循环中修改的值。
第四个问题:block statement
(带括号的系列语句)中不允许使用标签。
这是一种没有delayed expansion
for /F " delims=: tokens=1 " %%g in ( C:\Users\BHAVYA\Desktop\temp_ontsetTime.txt ) do (
echo %%g
echo.
set /a var=%%g + 4
call echo %%var%%
for /f "tokens=1,2delims==" %%m in ('set var') do if /i "%%m"=="var" (
echo var is %%n
set "show=Y"
for /F " delims=: tokens=1,2 skip=%%n" %%h IN ( ' findstr /l /I %secondword% "C:\Users\BHAVYA\Desktop\AudOdd.txt" ' ) do if defined show (
echo %%h %%i
set "show="
echo %%i%>>ontset_time.txt
)
)
echo loop ended
)
请注意,使用set var
将列出以var
格式开始var=99
的当前环境值。我们在=
上标记,第一个标记(%%m
)必须为var
,而不是var1
或其他任何标记。如果是,则其值为%%n
,因此set
将show
标记为值(任何值将执行),然后处理该文件。在第一个“命中”时,清除show
中的值 - 它现在是未定义的,因此在下一个外循环开始之前不再进行处理。
[我显然无法测试]