2012-12-18 2 views
2

시스템에서 0 일간의 Java Exploit을 발견하고 각 사용자 프로파일에서 Java .idx 파일을 검토합니다. 의심스러운 URL이 0 일 위협을 가리킬 수 있습니다. 배치 파일을 사용하여 키워드의 각 인스턴스에 대한 개행을 작성하십시오.

나는이 시작 :

for /d %%A in ("C:\Documents and Settings\*") do (
findstr /S "http://" "%%A\Application Data\Sun\Java\Deployment\cache\6.0\*" >> C:\temp\javaurls.txt) 

이는 URL의 가득한 파일을 생성하지만 그들은 확실히 제어 정보와 다른 재미 많은 재료와 혼합하고 있습니다. 내가하고 싶은 것은 발견 된 "http : //"의 모든 소문자 인스턴스에 대해 생성 된 개행 문자를 가지는 것입니다. 누구든지 배치 파일의 명령 줄을 사용하여이 작업을 수행 할 수있는 방법을 알고 있습니까?

+1

Perl이나 Grep을 설치하고 사용합니다. 고통을 즐기지 않는 한. – dan1111

+0

@AndyG Perl을 설치하지 않으려면 대신 [Sed] (http://www.grymoire.com/Unix/Sed.html)를 사용할 수 있습니다. regexp 기반 검색/교체 작업을위한 훌륭한 명령 줄 도구입니다. [Here] (http://gnuwin32.sourceforge.net/packages/sed.htm)에서는 Windows 용 무료 버전을 다운로드 할 수 있으며 dan1111의 regexp 문자열 만 사용할 수 있습니다. 결과는 동일합니다. –

답변

0

"그냥 다른 도구를 사용하십시오!" 대답은 성가신 일이 될 수 있습니다. 그러나 Windows 배치 파일/명령 줄 유틸리티는 너무 나빠서 이러한 종류의 작업을 많이 수행해야하는 경우 다른 옵션을 살펴볼 필요가 있다고 생각합니다. undocumented, non-standard, broken regular expressionsneeding hacky solutions for even the most basic functionality을 알아내는 즐거움을 제외하면 그것은 그렇습니다.

일부 옵션 :

  • Perl
  • Grep for Windows

    이 (더 나은 상응하는 FINDSTR하는)
  • Cygwin (Windows 용 전체 리눅스와 같은 쉘 환경은, 그렙 포함). 여기

는 각 http:// 전에 줄 바꿈을 추가 배치 파일에 추가 할 수 펄의 한 줄입니다 : 내가 처음부터 시작 된 경우

perl -pi.bak -e "s|(http://)|\n$1|g" C:\temp\javaurls.txt 

을, 나는 모든 일을 할 것 배치 파일을 사용하는 대신 펄에서.

0

나는 일반적으로 다른 사람들이 표현한 정서에 동의합니다. 배치는 텍스트 처리가 어렵습니다. 다른 언어 나 도구를 사용하는 것이 좋은 생각입니다.

그러나 단순히 각 html:// 전에 줄 바꿈 삽입

:-) 일괄 수행 할 수 있습니다 그렇게 어려운 일이 아니다

@echo off 
setlocal disableDelayedExpansion 
:: The first FOR loop loads a quoted linefeed into %%L 
:: The blank line within the IN() clause is critical. Do not remove. 
for %%L in (^"^ 

^") do (
    for /d %%A in ("C:\Documents and Settings\*") do (
    for /f "eol=: delims=" %%B in (
     'findstr /S "http://" "%%A\Application Data\Sun\Java\Deployment\cache\6.0\*"' 
    ) do (
     set "line=%%B" 
     setlocal enableDelayedExpansion 
     echo(!line:http://=%%~Lhttp://! 
     endlocal 
    ) 
) 
) >c:\temp\javaurls.txt 

그러나 http://로 시작하며 이름을 유지에만 결과 라인을 유지 주소가 진짜 고통이되기 전에 각 파일의.

@echo off 
setlocal disableDelayedExpansion 
:: The first FOR loop loads a quoted linefeed into %%L 
:: The blank line within the IN() clause is critical. Do not remove. 
for %%L in (^"^ 

^") do (
    for /d %%A in ("C:\Documents and Settings\*") do (
    for /f "tokens=1* delims=:" %%B in (
     'findstr /S "http://" "%%A\Application Data\Sun\Java\Deployment\cache\6.0\*"' 
    ) do (
     set "line=%%C" 
     setlocal enableDelayedExpansion 
     set "line=!line:http://=%%~Lhttp://!" 
     for /f "delims=" %%D in (
     '"cmd /v:on /c echo(^!line^!|findstr http://"' 
    ) do (
     if "!!" equ "" endlocal 
     echo %%B: %%D 
    ) 
    ) 
) 
) >c:\temp\javaurls.txt 
exit /b 
+0

감사합니다.// %% A에 대한 ("C : \ Documents and Settings \ *")의 경우 :findstr/S "http : //" "%% A \ Application Data \ C : \ temp \ javaurls.txt) perl -pi.bak -e "| (http : //) | \ n $ 1 | g"C : \ temp \ javaurls.txt 필자는 perl 사용 방법을 배워야 할 것으로 생각합니다. dbenham : 대부분의 경우 cmd 라인이 작동했지만 perl은 출력이 훨씬 낫습니다. – AndyG

관련 문제