2014-12-22 2 views
0

디렉토리의 모든 사용자를 반복하고 SQL 테이블에 특정 데이터를 덤프하는 배치 파일로 실행중인 일부 파일이 있습니다. 나는 변수에 전달하는 시간 스탬프를 추가하고 sqlcmd를 사용하여 sqlcmd를 사용하여 문제를 추가하려고하면 해당 항목의 모든 관련 열을 추가하면 파일 이름을 전달해야합니다. SQL 테이블에 추가됩니다.findstr을 사용하여 변수에 전달

여기 잡기가 있습니다 ... sql 테이블에 추가되는 이름은 실제 파일 이름이 아니며 각 xml 파일에서 찾을 수있는 데이터베이스 이름입니다 (xml에 충분히 근접). 그래서 나는 그것이 어디 있는지 알고 모든 하나는이 abcdir (이름의 나머지 부분)처럼 보입니다. 여기서 abcdir은 모든 단일 데이터베이스를 시작하는 문자열입니다.

그래서 데이터베이스 이름을 얻기 위해 findstr 함수를 사용할 수 있다고 생각했지만 정규식에 대한 경험이 거의 없으며 태그를 파싱하고 이름 만 남겨 둘 수 있기를 원합니다. = abcdir (나머지 중 이름)

** * 특정 명령에 대한 질문 만하기 때문에 필자의 코드 중 실제로는 필요하지 않다고 생각했지만 그럴 수 없다면 알려 주시면 게시 해 드리겠습니다. * **

편집 : 좋아, 메모장에서 열면 각 파일에 이와 같은 내용이 표시됩니다.

<Name>ABCDir Sample Name</Name> 

또는

<Name>ABCDir Sample Name2</Name> 

내가 ABCDir 샘플 이름을 싶습니다이 배치 변수로 전달합니다. 그래서 findstr을 사용하려고 생각했습니다. 텍스트 파일에서 <Name>를 포함하는 라인을 긁어 드릴 것입니다, 그리고 for /f "delims=<>"는로 그 라인을 분할하게됩니다 나는 정규식의 거의 이해를하지만, 내가 위에서 주석으로 findstr >ABCDir[A-Za-z] \path\filename.ext

+0

'findstr'은 문자열을 포함하는 행을 찾는 데 유용하지만 일치 항목 만 * 반환하지는 않습니다. 항상 전체 행을 반환합니다. 'for/f "delims = <>"'또는 무엇인가로 행을 해석해야 할 수도 있습니다. 가장 쉬운 해결책은 대신 [gnuwin32 grep] (http://gnuwin32.sourceforge.net/packages/grep.htm)과'grep -Eio 'name = [^ "] +''또는 비슷한 것입니다. 가까운 예제 XML을 게시 할 수있을뿐만 아니라 성공하지 못한 코드를 게시 할 수 있다면 도움이 될 것이라고 생각하십시오. – rojo

+0

edit를 추가했습니다. findstr에서 한 가지 문제가 있습니다. 나는 하나의 단어 파일을 가지고 있지 않으며 findstr \ path \에 넣으면 보인다. 이것은 내 파일 이름 .ext이다. 'FINDSTR : 경로를 열 수 없다. FINDSTR : 이것을 열 수 없다. FINDSTR : 열 수 없다. 'and so on – David

답변

1

사용 findstr (또는 find)를 시도했습니다 부분 문자열. findstr /n으로 "tokens=3 delims=<>"을 찾고 <Name></Name> 사이의 문자열을 찾으십시오.

이 시도 :

@echo off 
setlocal 

set "file=temp.txt" 

for /f "tokens=3 delims=<>" %%I in ('findstr /n /i "<Name>" "%file%"') do (
    @echo %%I 
) 

을 내가 줄 번호를 삽입 findstr/n을 사용하고 있습니다. 숫자는 필요하지 않지만 스위치는 항상 <Name> 앞에 토큰이 있음을 보장합니다. 따라서 줄의 들여 쓰기 여부에 관계없이 원하는 문자열은 항상 tokens=3입니다. 그렇지 않으면 문자열은 들여 쓰기 된 경우 토큰 3이 될 수 있고 그렇지 않은 경우 토큰 2가 될 수 있습니다. 이것은 태그가 들여 쓰기되어 있는지 여부를 판단하는 것보다 쉽습니다.

+0

이것은 뚜렷하지만 나는 혼란 스럽다.나는'find'가 당신이 관련 테스트를 검색하는데 사용하고 있다고 가정하고 있지만 정확한 정보를 어떻게 검색하고 있습니까? – David

+0

'findstr'는'% file %'에서''을 포함하는 행만 표시합니다. 'for/f' 루프는'findstr'에 의해 출력 된 각 행을 처리합니다. – rojo

+0

몇 가지 부분을 설명 할 수 있습니까? ''% file = temp.txt % '',''''및''% file % "'? name과 % file %는 단지 소지자입니까? – David

관련 문제