2017-09-05 1 views
0

배치 파일과 관련하여 도움이 필요합니다.텍스트를 .txt 파일에서 가져 오기 일괄

특정 문자열을 검색하지만 다음 단계에서 문제가 생겼습니다 .log 파일이 있습니다. 다른 문자열을 검색해야하고 배치 사이에서 문자열을 사용해야합니다. " 이것이 확실한가요?

예 : 만들기 환경 "EnvironmentName"

EnvironmentName 내가 배치 파일에서 사용해야하는 문자열입니다

set findtext="text2find" 
set findfile="text.log" 

findstr %findtext% %findfile% 

if %errorlevel% == 0 (
findstr "Creating Environment " %findfile% 
if %errorlevel% == 0 (
set Environment=[Text from log file] 
) 
) 

로그 파일은 라인이 포함되어 있습니다.

이것은 가능합니까?

미리 감사드립니다.

+0

예. 'FOR/F' 명령을 사용하여'FIND' 또는'FINDSTR' 명령의 출력을 파싱 할 수 있습니다. – Squashman

+0

블록 (괄호 안의 연속 된 줄) 안에서,'% anyvariable %'는 변수의 초기 값으로 평가됩니다. 따라서'% errorlevel %'는 두번째'findstr' 뒤에'0'으로 대체 될 것입니다. 여기서의 일반적인 해결책은'만약 errorlevel 1이''현재 errorlevel이 1이 아니고 1보다 크다 '라는 것을 의미하는'if not errorlevel 1'을 사용하는 것이고, 따라서 정상적인 환경에서는'0'이다. 참고 : '%'는 포함되어 있지 않습니다. – Magoo

답변

1
set "environmentname=" 
for /f "tokens=1,2*delims= " %%a in (%findfile%) do (
if /i "%%~a%%~b"=="creatingenvironment" set "environmentname=%%~c" 
) 
if defined environmentname (
echo environment name=%environmentname% 
) else (
echo environment name was not found 
) 

데이터를 가져와야합니다. 이미 findfile을 적절하게 설정했다고 가정했습니다.

for /f "tokenises"는 파일에서 읽는 각 줄입니다.

token3을 구분 기호token2 token1 구분 기호 구분 기호

로 선은 ... 해석됩니다 (이 경우, 공간)을 delims 옵션의 =를 다음 문자의 집합으로 정의된다

구획 문자.

tokens=...은 선택할 토큰을 정의합니다. 이 경우 token1과 token2가 선택되고 *은 "가장 높은 토큰 번호 이후의 모든 것"을 의미하므로 token3 과 나머지 줄이 세 번째 선택 항목이됩니다.

첫 번째 선택 항목은 정의 된 metavariable (이 경우 %%a)으로 지정됩니다. 다음은 %%b 등으로 지정됩니다. 이 metavariables은 대소 문자를 구분합니다.

그래서, 문제의 라인, %%acreating를 얻을, (난 당신이 사용한 경우에 더주의를 지불하지 이유입니다) %%benvironment을 얻고 %%cif /i이 경우 소문자를 구별 비교 "EnvironmentName"

을 가져옵니다. ~은 메타 변수의 내용을 둘러싼 모든 인용 부호를 제거하므로 %%~a%%~b은 대상 행의 경우 creatingenvironment이됩니다. 해당 행이 감지되면 줄 바꿈 따옴표 (%%~c)의 나머지 부분을 변수에 할당하십시오.

파일이 처리 된

, 변수가 설정되어 있는지 여부를 확인하고 명시 적으로 파일이 처리되기 전에 아무것도로 설정 한 이유입니다 (그 내용이나가 설정되어 있지 않은 것을 하나를보고합니다.

나는 지금 막 입력했는데, 테스트하지는 않았다.오류가있을 수 있습니다 - 왜 variablenames에 대한 전쟁과 평화는 단점입니다. Variablenames는 대소 문자를 구분하지 않습니다. 당신의 파일 이름에 공백이 포함되어 있으면

, 당신은해야 할 것

for /f "usebackqtokens=1,2*delims= " %%a in ("%findfile%") do (

(즉도 물론 공백없이 파일 이름에 대해 작동합니다 -하지만 즉시 설명 할 필요가없는 추가 요소를 소개합니다 필요한 데이터를 감지하는 컨텍스트)

관련 문제