2013-07-05 3 views
1

기본적으로 배치 파일을 작성하여 여러 파일에 일부 코드를 삽입하려고합니다. 다음은 내가 성취해야 할 사항에 대한 세부 사항입니다.
1. 입력 문자열은 test.txt 파일에서 가져옵니다.
2. 문자열을 대상 파일의 두 번째 줄로 삽입해야합니다.
3. 대상 파일은 모두 배치 파일과 동일한 방향의 .xml 파일입니다.Windows 쉘 스크립트에 여러 파일에 삽입

모든 .xml 파일을 검토하려면 FOR 루프를 사용해야한다고 가정합니다. 예를 들면

for /f %%i in ('dir /b *.xml') do() 

일부 튜토리얼과 게시물을 읽었지만 루프의 파일에 아무 것도 추가 할 수있는 방법을 찾을 수 없습니다. Echo 또는 TYPE을 사용하면 루프의 각 파일에 대해 작동하지 않는 것 같습니다. 루프에서 파일을 수정하려면 어떻게합니까?
또한 특정 수의 줄을 삽입하려면 파일을 변수에 넣어야한다고 말합니다. 하지만 내 파일은 꽤 커서 변수에 넣고 싶지 않습니다. 파일의 특정 줄에 다른 방법으로 삽입 할 수 있습니까?

+0

'문자열을 대상 파일의 두 번째 줄에 추가해야합니다.'무엇을 의미합니까? 연결하거나 삽입하거나 뭘 삽입할까요? 추가 할 파일이 단일 행 파일입니까? 그것은 라인 당 ~ 8K를 초과합니까? TPP 솔루션을 공개하십니까? – Magoo

+0

@PeterWright 여기에 삽입을 원하지만 실제로는 두 번째 줄에 쓸 수있는 모든 방법으로 충분합니다. 내 게시물을 더 명확하게 편집했습니다. – OckhamTheRazor

+0

XML 파일을 수정 하시겠습니까? –

답변

0
@ECHO OFF 
SETLOCAL 
FOR /f "delims=" %%i IN ('dir /b *.xml') DO (
SET line2=Y 
(
    FOR /f "usebackqdelims=" %%x IN ("%%i") DO (
    ECHO(%%x 
    IF DEFINED line2 TYPE Line2.txt 
    SET "line2=" 
) 
)>"%%~ni.lmx" 
) 
GOTO :EOF 

이 방법은 효과가 있지만 빈 줄은 삭제됩니다.

+0

SET line2 = Y의 Y는 무엇을 의미합니까? 또한 "%% ~ ni.lmx"가 역순으로 쓰는 이유는 무엇입니까? – OckhamTheRazor

+0

'line2'는 단순히 환경 변수입니다. 값을 임의로 설정하면 정의됩니다. 그런 다음 루프에서 XML의 첫 번째 행을 작성한 후'line2.txt'를 작성하십시오. 왜냐하면'line2'가 정의되어 있기 때문입니다. 'line2'는 길이가 0 인 문자열로 설정되어 지워 지므로 XML의 나머지 줄에서'line2.txt'는'line2'가 정의되지 않았기 때문에 출력되지 않습니다. 다음 파일 -'line2'를 다시 설정하고 처리하십시오 ...'%% ~ ni.lmx'는 입력 파일 ('%% ~ nx') + a .lmx 확장자 - 그냥 xml과 동일한 이름으로 출력 파일을 설정합니다 반대로. 현재 위치에 삽입 할 수 없으므로 새 파일이 작성됩니다. 이름 바꾸기가 필요합니다 .. – Magoo

+0

그것은 작동합니다! 감사. – OckhamTheRazor

0
@echo off 
set /P string=< test.txt 
for %%a in (*.xml) do (
    (for /F "usebackq tokens=1* delims=:" %%b in ('findstr /N "^" "%%a"') do (
     if %%b equ 2 echo %string% 
     set "line=%%c" 
     setlocal EnableDelayedExpansion 
     echo(!line! 
     endlocal 
    )) > "%%a.new" 
) 

새 파일의 확장자는 .xml.new입니다. 원래의 .xml 파일을 삭제하고 .xml.new 파일의 이름을 .xml으로 바꿀 수있는 몇 줄을 추가 할 수 있습니다.

관련 문제