2016-12-21 30 views
0
  1. スクリプトは、「firstword」が見つかったところで行番号と共に行を保存します。これらの行番号はtemp_onsetTime.txtから取得されます。その行番号から4行目を取り出して別のファイルに書き込もうとしています。
  2. 行セットvar = %% g%set/var =%var%+ 4、string varは整数に変換されません。
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

問題1:set var=%%g%が正しくありません。 set var=%%gがより近い(%%gは、メタバリアブル%%gにアクセスする)。 (%%gが明らかに整数であるため)set /a var=%%gがより良いです。

問題2:delayed expansionについて学ぶ必要があります。ここには何百もの参考文献があります。したがって、それが実行されていないとき

set /a = var + 4 

は4でvarの値が増加します - - それはforループがを解析されたときに立つと、バッチは、その値を持つすべての%var%を置き換えますが、その後

を使用する必要がありますあなたが拡張遅れ を使用していない場合

call echo %%var%% 
var変更値にアクセスします。

AAMOIが、これは

set /a var=%%g+4 

第三の問題と等価である - まだdelayedexpansion問題 - ループ内で変更されるよう%var%値、for...%%g...が解析された時点で、その値によるものに置き換えられます。

第4の問題:ラベルはblock statement(括弧で囲んだ一連のステートメント)内では許可されません。

ここset varを使用してフォーマットvar=99varを開始現在環境値の一覧が表示されますことをここ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 
)   

注のない治療法です。 =の最初のトークン(%%m)はvarでなければならず、var1またはそれ以外のものでなければなりません。そうである場合、その値は%%nであるため、setフラグshowを値に設定して(任意の値にする)、ファイルを処理します。最初の "ヒット"でshowの値をクリアする - それは今や未定義であるため、次の外側ループが始まるまでそれ以上の処理は行われない。

[私は明らかにこれをテストできません]

関連する問題