2017-03-18 1 views
0
@echo off 
setlocal EnableDelayedExpansion 
for /f "delims=; tokens=1-5" %%i in ('type listing.csv') do (
    echo %%k | find "CNSHA" > nul 
    if !errorlevel!==0 echo Searched_Value "CNSHA" was found in %%i: %%j:%%k 
) 
pause 

listing2.txt 외부 listing.csv 파일과 txt 파일에 삽입 결과 >>에서 정렬 후 나는 다른 파일 listing2.txt에 검색 결과를 저장하고 싶습니다. 어떤 코드 라인을 코드 수식 >> listing2.txt에 포함 시키면 정렬 결과를 저장할 수 있습니까? 가능한 이전 파일 listing2.txt을 가정하면파일 <code>listing.csv</code>으로

screenshot

+0

내가 포맷 한 코드가 있지만, 거기 당신이 출력 헤더를하지 않으려면이 같은에 Export-Csv 문을 변경 올바르게 보이지 않는 것처럼 보입니다. 잠재 응답자가 그렇게 할 수있는 경우 틀린 경우 적절하게 편집하십시오. – Compo

+2

외부 리소스에 대한 링크는 게시하지 마십시오. 콘텐츠가 귀하의 질문과 관련이있는 경우 : 콘텐츠를 질문에 넣으십시오. 그렇지 않으면 링크를 전혀 게시하지 않아도됩니다. –

+0

완료 - 방금지도를 삭제했습니다 - 감사의 말을 –

답변

0

그냥 사용할 수없는 이유가 있습니까 :

Find "CNSHA"<"listing.csv">"listing2.txt" 
+0

당신이 언급 한이 줄을 코드에 추가 할 곳을 알게 될 것입니다. 그 해결책이지만, %% i- % % z 열까지 더 많은 항목을 확장하려고 노력할 것입니다. 아무리해도 많은 제안에 감사드립니다. –

0

덮어 쓰기해야합니다

@echo off 
setlocal 
(for /f "delims=; tokens=1-5" %%i in (
    'find /i "CNSHA" listing.csv' 
) do echo Searched_Value "CNSHA" was found in %%i: %%j:%%k 
) >listing2.txt 
pause 

Otherwse 더블 >>

+0

수정 해 주셔서 감사합니다. 이 마지막 라인)> listing2.txt /) >> listing2.txt 결과 (솔루션)를 저장하는 것은 수정 없이는 사용할 수 없습니다. 불필요하게 사용했습니다. 라인 if! errorlevel! == 0 echo Searched_Value "CNSHA"가 %% 및 %% j %% k에서 발견되었습니다 - 레코드를 txt에 손상시킬 수 있습니다. 다시 한번 감사하고 즐거운 주말 보내십시오. –

2

로 리디렉션 당신은 같은 루프 내부의 파일에 추가 할 수있는 > 이 :

for ... %%i in (...) do (
    echo something >> output.txt 
    echo or other 
) 

위의 내용은 출력 파일에 "무언가"행만 넣고 "또는"행은 콘솔에 출력합니다.

또한 루프 외부 리디렉션 연산자를 넣어 파일에 전체 루프 출력을 쓸 수 있습니다 : 출력 파일에 "무엇인가"와 "기타"라인을 모두 넣어 것입니다

for ... %%i in (...) do (
    echo something 
    echo or other 
) >> output.txt 

.당신은 자르거나 이미 존재하는 파일을 제거하는 데 필요한 APPEND 리디렉션 연산자 ( >>)를 사용할 때 루프 이전에 존재 컨텐츠를 보존하지 않으려면 것을

참고 :

type nul> output.txt 

당신 쓰기 리디렉션 연산자 (>)를 사용하여이 추가 단계를 피할 수 있지만, 당신은 괄호 안에 전체 루프 둘 필요가 있습니다 : BTW

(for ... %%i in (...) do (
    echo something 
    echo or other 
)) > output.txt 

을, 당신은 또한 처음에 리디렉션 연산자를 넣을 수 있습니다 (당신은 또한 두 가지 방법을 혼합 할 수 물론

for ... %%i in (...) do (
    >>output.txt echo something 
    echo or other 
) 

또는

>>output.txt for ... %%i in (...) do (
    echo something 
    echo or other 
) 

내부 리디렉션 : 라인, 그것은과는 무의식적으로 출력 라인에 후행 공백을 추가하는 것을 피한다 때문에 이렇게하는 것이 좋습니다입니다 다른 하나 개의 파일에 약간의 출력과 출력의 휴식을 얻을 수 있도록 루프 외부) :

>>output1.txt for ... %%i in (...) do (
    >>output2.txt echo something 
    echo or other 
) 

당신이 출력으로 CSV에서 필터링 기록을하려는 경우, 당신은 연구 필요 하지만, 출력 라인을 econstruct :

>>output.csv echo %%~i;%%~j;%%~k 

를 특정 시나리오에서는 그냥 대신 루프 작업의 find를 사용하는 것이 더 쉬울 수 있습니다 당신은 또한 귀하의 질문에 태그 때문에

>output.csv (type input.csv | find ";CNSHA") 

난 그냥 좋은 측정을 위해,뿐만 아니라 PowerShell을 용액에 던질거야 :

$headers = 'foo', 'bar', 'baz' 
Import-Csv 'input.csv' -Delimiter ';' -Header $headers | Where-Object { 
    $_.baz -eq 'CNSHA' 
} | Export-Csv 'output.csv' -NoType 

위의 코드는 세 번째 필드의 값이 "CNSHA"인 모든 레코드를 새 파일에 씁니다. 입력 된 CSV에 헤더가 포함되어있는 경우 -Header $headers을 삭제하십시오.

... | ConvertTo-Csv -NoType | Select-Object -Skip 1 | Set-Content 'output.csv' 
+0

매우 귀중한 제안입니다. 내일 나는 똑같이하려고 노력할 것이다. 그러나 루프없이 단지 명령을 찾는다. 도와 주셔서 감사합니다. –

+0

나는이 설명을 좋아합니다!+1 그냥 몇 가지 _standard handles_ :'for ... %% i in (...) do ('&')를 사용하여 루프 외부의 하나의 (보다 효율적인) 리다이렉션으로 다른 파일로 출력을 재지향 할 수 있다고 덧붙인다. echo something'&'> 2 echo & other'&')> output1.txt 2> output2.txt' – Aacini

+1

전체 루프를 괄호 안에 넣을 때만 리다이렉트 할 수 있습니다 :'(for %% I in (...) do (...))> file.ext' – aschipfl