批处理中的字符串到整数转换

时间:2016-12-21 07:47:05

标签: batch-file

  1. 脚本存储这些行以及找到“firstword”的行号,这些行号是从temp_onsetTime.txt中检索的。尝试从该行号检索第4行并将其写入另一个文件。
  2. line set var = %% g%set / a var =%var%+ 4,string var未转换为整数。
  3. 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 
    

1 个答案:

答案 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,因此setshow标记为值(任何值将执行),然后处理该文件。在第一个“命中”时,清除show中的值 - 它现在是未定义的,因此在下一个外循环开始之前不再进行处理。

[我显然无法测试]