2016-08-09 2 views
0

에서 마지막 열을 촬영하는 방법 : i가 636 값을 얻을 필요가배치 스크립트 - 내가 라인을 포함하는 텍스트 파일 데 텍스트 라인

08-09 15:39:38.236 D/MVSDKTutorialBasicOpenCloseFileLoop(12054): availableMemory = 636 

을하고 경작한다을 지금까지 나는이 사용하던 :

for /f "tokens=6-8" %%i in (D:\Roey\Jen2\OpenCloseFileLoop\Results\Logcat\firstline.txt) do set revision=%%i 

문제는 somtimes 라인에 여분의 공간이 있습니다 (2054) - 그리고 그것은 (나 = =), 항상 마지막 열을 얻는 방법을지고 있어요?

답변

3

마지막 요소 라인에 :

for /F "delims=" %%a in (file.txt) do for %%b in (%%a) do set "revision=%%b" 
+0

위대한 작품, 감사합니다 !! 간단한 1 라인 솔루션 ... –

2

가 현명하게 delims를 선택

이 경우
for /f "tokens=2 delims==" %%a in (file.txt) do set revision=%%a 
REM remove any spaces: 
set revision=%revision: =% 
+0

내 실수는, 그것도 큰 .. 감사합니다! –

0

사전에 구분 된 항목의 수를 모른다, 당신은 어떤 글로벌 와일드 카드 문자를 포함하지 않는 텍스트 파일을 가정하여, 다음과 같은 코드를 사용할 수 *? :

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem /* Define constants here: */ 
set "FILE=D:\Roey\Jen2\OpenCloseFileLoop\Results\Logcat\firstline.txt" 
set "DELIM= " & rem // (define a single character here only) 

rem // Walk through the text file line by line: 
for /F usebackq^ delims^=^ eol^= %%L in ("%FILE%") do (
    set "LINE=%%L" 
    rem // Toggle delayed expansion to avoid loss of `!`: 
    setlocal EnableDelayedExpansion 
    rem // Double each `"` intermittently: 
    set "LINE=!LINE:"=""!^" & rem " 
    rem /* Enclose the entire line string within `""` and replace 
    rem each delimiter by `"` + SPACE + `"`; this results in a 
    rem SPACE-delimited list with each item enclosed within `""`: */ 
    set "LINE="!LINE:%DELIM%=" "!"" 
    rem /* Iterate through the built list using a standard `for` loop; 
    rem this works only in case no `*` or `?` occur in the string, 
    rem because `for` would consider them as global wildcards and 
    rem access the file system and through file-not-found errors: */ 
    for %%I in (!LINE!) do (
     endlocal 
     rem /* Save item in variable (overwrite previous one, so 
     rem last item is retrieved), and remove surrounding `""`: */ 
     if not "%%~I"=="" set "LAST=%%~I" 
     setlocal EnableDelayedExpansion 
    ) 
    rem // Return last item per line, revert doubling `"`: 
    if defined LAST echo(!LAST:""=^"! 
    endlocal 
) 

rem // Return last item of last line, revert doubling `"`: 
setlocal EnableDelayedExpansion 
if defined LAST echo(!LAST:""=^"! 
endlocal 

endlocal 
exit /B 
+0

나는 코드를 피곤하게 만들었지 만 단순한 경우에는 작동하지만 다른 사람들은 다시 "="를 받았다. ... –

+0

입력 데이터로 인해 내 스크립트가 실패하게 만든다. – aschipfl

+0

this one : "08-09 15 : 39 : 38.236 D/MVSDKTutorialBasicOpenCloseFileLoop (12054) : availableMemory = 636 ", 임의로 공백을 추가하여 테스트 해보십시오. –

관련 문제