2012-03-20 9 views
0

新しいファイルを生成するのではなく、元のファイルを編集するにはどうすればよいですか?また、一度に1つのファイルを指定する代わりに、同じディレクトリ内のすべての.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 

のUnix/Linuxのユーザーが答えに興味がある場合:

があるコリン・ワトソンのspongemoreutilsパッケージにはDebianのためにパック) :

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

は、このメソッドは動作しますが、どのようにあなたはそれが自動的にディレクトリ内のすべてのファイル上で実行されるように書くでしょう。 "template.html"の代わりにhtmlの拡張子を指定しますか? – Blainer

+0

ワイルドカードを使用しますか? * .html –

+0

この作品はありますか? 'call:processFile < *.html > tmp_file' ' move tmp_file * .html' – Blainer

関連する問題