2016-12-21 1 views
0
  1. 스크립트는 줄 번호와 함께 줄을 저장하여 "firstword"가있는 곳이면 temp_onsetTime.txt에서 줄 번호를 검색합니다. 해당 줄 번호에서 네 번째 줄을 검색하여 다른 파일에 씁니다.
  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에 액세스합니다). set /a var=%%g이 더 좋습니다 (%%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...에서의 값으로 대체되며, 루프 내에서 수정 된 값이 아니라.

네 번째 문제 : 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이 아니어야합니다. 값이 0이면 %%n이므로 set 플래그 show을 값 (모든 값이 적용됨)으로 변환 한 다음 파일을 처리합니다. 첫 번째 "히트"에서 show의 값을 지우십시오 - 이제 정의되지 않았으므로 다음 외부 루프가 시작될 때까지 더 이상의 처리가 수행되지 않습니다.

[분명히 테스트 할 수 없음]

관련 문제