2013-10-22 2 views
0

cmd for 루프 내부에서 파이프 또는 리디렉션을 어떻게 사용합니까? 심지어 경우,for 루프 내부에 파이프 및 리디렉션 포함

for %%m in (**{list of individual program names}**) do (
tasklist /FI "IMAGENAME eq %%m" /NH ^| find /i "%%m" 
if "%errorlevel%" EQU "1" set /a err_count=%err_count%+1 
echo checking tasklist item %%m , count is %err_count% 
) 

내가 발견을 통해 파이프에 필요하거나 오류없이 작업 목록는 항상 완성 :

내 샘플 스크립트는 목적은 특정 프로그램/일련의 서비스가 실행되고 있는지 확인하는 것입니다 (이다 프로그램이 실행되고 있지 않습니다.

내가 루프에 |>을 탈출하는 생각할 수있는 모든 변화를 시도했습니다, 아무것도 지금까지 근무하지 않았다.

/f는 OPTI를 구분 기호 명령은 줄 1의 괄호 안에있는 경우에만 작동합니다.이 명령은 루프 안에 넣고 싶습니다.

+0

보고있는 오류나 잘못된 동작을 말하면 도움이됩니다. 파이프를 빠져 나오거나'for' 루프 안에서 재지향 할 필요가 없습니다. 에코를 켜면 배치 파일이 실행중인 명령을 확인할 수 있습니다. 이것은 잘 작동합니다 :'%% m for (chrome.exe abc.exe notepad ++. exe)에 대해 tasklist/fi "IMAGENAME eq %% m"/ nh |/i "%% m">> results.txt' – indiv

+0

또한 루프에서'err_count' 주변에서 지연된 확장을 사용해야합니다. 'setlocal EnableDelayedExpansion'을 쓴 다음 루프에서'! err_count! '를 사용하십시오. 명령 줄에 'help set'을 입력하거나 Google 검색을 통해 자세한 정보를 얻으십시오. – indiv

답변

0
for /f %%i in ('dir /b /s *_log.xml ^| find "abc" /i /v') do type "%%~i" >> main_log.xml 

탈출 | 탈출하지 마라. 이것은 이스케이프 처리되지 않은 파이프로 명령을 끝내기 때문입니다. > < >> 및 < <을 사용하여 프로그램의 STDIN 및 STDOUT의 의미를 변경하도록 운영 체제에 알리는 것입니다. 또한

+0

이것이 도움이 될 경우 올바른 답으로 표시해주세요. ;) – nephi12

0

지연된 팽창이! 변수와 루프 내의 변수를 사용하는 일반적인 방법이다 커맨드 라인에서 %%하지 % 사용! 통사론.

파이프는 루프 내에서 일반 문자 이스케이프 할 필요가 없습니다.

@echo off 
setlocal enabledelayedexpansion 
for %%m in (**{list of individual program names}**) do (
tasklist /FI "IMAGENAME eq %%m" /NH | find /i "%%m" 
if errorlevel 1 set /a err_count+=1 
echo checking tasklist item %%m , count is !err_count! 
) 
1

이유를 묻지는 않지만 파이프 표시 만 이스케이프해야합니다.