2016-12-05 2 views
1

현재 텍스트 파일을 통해 배열 파일로 각 행을 배열에 배치 파일이 있습니다. 루프를 반복하고 배열의 모든 값에서 특정 수의 문자를 제거하고 싶습니다. 가능한가요?배치 파일에서 배열의 문자열 조작?

@ECHO off 

findstr /C:"number" /C:"type" testFile.txt > oneresult.txt 
set "file=oneresult.txt" 
set /A i=0 
timeout /t 1 
echo ---------------Results--------------- > results.txt 
for /f "tokens=*" %%x in (oneresult.txt) do (
call echo %%x >> results.txt 
call set array[%i%]=%%x 
set /A i+=1 
) 

call echo %i% files received >> results.txt 
del "oneresult.txt" 

그래서 지금은 testFile.txt에서 검색된 문자열을 인쇄 한 다음 결국 result.txt에 저장됩니다. testFile.txt의 모든 문자열에 처음 10자를 제거하고 싶습니다. 더 쉬운 방법이 있으면 알려주세요. 지금까지 이것이 내가 찾은 것입니다. 그러나 나는 또한 일괄 처리 멍청이입니다.

그냥 배열없이 파악하고 미래에 검색 할 수있다 다른 사람에 대한 답변을 게시 :

@ECHO off 

findstr /C:"number" /C:"type" testFile.txt > oneresult.txt 
set /A i=0 
timeout /t 1 
echo ---------------Results--------------- > results.txt 

for /f "tokens=*" %%x in (oneresult.txt) do (
setlocal enabledelayedexpansion 
call set print=%%x 
call set newprint=!print:~32! 
call echo !newprint! >>results.txt 
endlocal 
set /A i+=1 
) 

call echo %i% files received >> results.txt 
del "oneresult.txt" 
+1

모든 어레이 관리 세부 사항을 RESULTS.TXT을 리디렉션 할 수 있습니다 [이 답변] (http://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script/10167990#10167990)에서 설명합니다. 예를 들어, : set array [! i!] = %% x' 그리고 for %% i in (! i!)는 echo! array [%% i] : ~ 32! ' – Aacini

답변

0
  • 당신은 당신의 코드에서 여러 통화의를 사용하여 이러한 pseudo calls 것을 이해 한없이를 일반적으로 setlocal enabledelayedexpansion이 필요하지 않은 다른 종류의 지연된 확장에 사용되지만 백분율 기호는 두 배입니다.
  • 중간 파일 oneresult는 필요하지 않으며 findstr의 출력을 구문 분석하는 데/f가 충분합니다. 모든 출력 라인을 둘러싸는 괄호
  • 한 세트의 배치 파일에서

@ECHO off 
set /A i=0 
(
    echo ---------------Results--------------- 
    for /f "tokens=*" %%x in (
    'findstr /C:"number" /C:"type" testFile.txt' 
) do (
    set print=%%x 
    call echo:%%print:~32%% 
    set /A i+=1 
) 
    call echo %%i%% files received 
) > results.txt 

setlocal enabledelayedexpansion와 다음 코드는 기능과 동일

@ECHO off&Setlocal EnabledelayedExpansion 
set /A i=0 
(
    echo ---------------Results--------------- 
    for /f "tokens=*" %%x in (
    'findstr /C:"number" /C:"type" testFile.txt' 
) do (
    set print=%%x 
    echo:!print:~32! 
    set /A i+=1 
) 
    echo !i! files received 
) > results.txt 
+0

@N입니다. Spivs 당신이 먼저 내 대답을 확인한 후 관심을 보이지 않은 경우 : 내 배치에 결함이 있습니까? 아니면 추가 질문이 있습니까? – LotPings