2012-03-20 3 views
0

새 파일을 생성하는 대신 원본 파일을 편집하려면 어떻게해야합니까? 또한이 스크립트를 한 번에 하나의 파일을 지정하는 대신 동일한 디렉토리의 모든 .html 파일에서 어떻게 실행하게 할 수 있습니까?원본 파일 일괄 처리

@echo off 
setlocal EnableDelayedExpansion 
call :processFile <template.html> final.html 
goto :EOF 

:processFile 
    set line=EOF 
    set /P line= 
    if "!line!" == "EOF" goto :EOF 
    set X= 
    set "lineNoGen=!line:Gen_1_=$!" 
    if "!lineNoGen!" neq "!line!" (
     for /F "tokens=1-3 delims=$" %%a in ("!lineNoGen:Gen.1.=$!") do (
     set "beforeGen=%%a" 
     set "betweenGens=%%b" 
     set "afterGen=%%c" 
     set "X=!betweenGens:~0,1!" 
     set /A Xm1=X-1, Xp1=X+1 
     echo !beforeGen!Gen_1_!Xm1!!betweenGens:~1!Gen.1.!Xm1!!afterGen:~1! 
    ) 
    ) 
    echo !line! 
    if defined X (
     echo !beforeGen!Gen_1_!Xp1!!betweenGens:~1!Gen.1.!Xp1!!afterGen:~1! 
    ) 
goto :processFile 

답변

0

내가 아는 한 Windows 배치에는 적절한 옵션이 없습니다. 난 그냥 임시 파일을 사용합니다 :

call :processFile <template.html> tmp_file 
move tmp_file template.html 

유닉스/리눅스 사용자가 답변에 관심이 있다면 :

가있다 콜린 왓슨의 sponge합니다 (moreutils 패키지에 데비안 포장) :

theConvertProgram < template.html | sponge template.html 

자세한 내용은 https://unix.stackexchange.com/a/29744/15241을 참조하십시오. 임시 파일과

솔루션 :

theConvertProgram <template.html> tmp_file 
mv tmp_file template.html 

개선 된 버전 mktemp와 :

TEMP_FILE="$(mktemp)" 
theConvertProgram <template.html> "$TEMP_FILE" 
mv "$TEMP_FILE" template.html 
+0

이 방법은 작동하지만 어떻게 당신이 자동으로 디렉토리에있는 모든 파일을 실행하기 위해 작성합니다. html 확장자는 "template.html"대신 구체적으로? – Blainer

+0

와일드 카드 사용? * .html –

+0

이 효과가 있습니까? '전화 :에는 processFile이 @Blainer * .html' – Blainer

관련 문제