2010-11-17 9 views
0

次のコードを使用しています。 Cmakefileで何かを変更するには:スペースが発生するまでtheresの1行上のスペースが、それだけでその行を取得する場合スペース上のバッチスクリプトのブレークライン?

for /f %%j in (CMakeLists.txt) do (
if "%%j"=="Extensions_AntTweakBar" (
    echo #Extensions_AntTweakBar >> temp.tmp 
) else (
    if "%%j"=="Extensions_Inspection" (
    echo #Extensions_Inspection >> temp.tmp 
) else (
     if "%%j"=="Extensions_InspectionBar" (
    echo #Extensions_InspectionBar >> temp.tmp 
    ) else (
    echo %%j >> temp.tmp 
    ) 
) 
) 
) 

動作しているようですが、つまり、それは、しかし、選択した行を変更しません。 例:

SET(PROJECT_NAME "MyProject") 

のみの文字列を取得します。

SET(

はどのようにして、その後、完全な文字列を取得することが出来るのですか?

答えて

1

コードでは、各行にスペースを追加します。

echo %%j[space]>> temp.tmp 

ここであなたがそれ(%% jにのみ動作します)を削除することができますが、通常、postfixの変異体は失敗する可能性があり、通常の変数と

>> temp.tmp echo %%j 

のように、接頭辞としてリダイレクトを設定することをお勧めします

set var=hallo2 
echo %var%>temp.tmp 

ので、唯一の標準エラー出力がリダイレクトされます、hallo2> TEMP.TMPやエコーハロー2> TEMP.TMPをエコーに展開されます。 次の問題はキーワードON OFF /?です。エコーがこれらの単語を解釈するため、ファイルにこのような単語が含まれていると、予期しない結果が発生します。

[EDIT:]あなたが使用することができ、これを解決するためエコー(

>>temp.tmp echo(%%j 

あなたは空行(または唯一の空白を持つ行を取得することができますが)、あなたは、単にそれらを前に付ける必要がある

for /f "delims=" %%a in ('findstr /n ".*" qut.bat') do (
    set var=%%a 
    setlocal EnableDelayedExpansion 
    echo(!var:*:=! 
    endlocal 
) 

DelayedExpansionのトグルを保持するためにneccessaryである「!」や「^」の文字

+0

私はそれを調べるつもりです:) – Skeen

1

デフォルトの区切り文字は、スペースとタブです。デフォルトの区切り文字を上書きした場合、それは私が@に設定

for /f "[email protected]" %%j in (CMakeLists.txt) do 

の間にスペースを持つ行全体を読む必要があり、それが区切り文字としてスペースを無視し、行全体を読み込みます。あなたはそれがテキストファイルにないことを知っているユニークな文字に設定することができます。

+0

私はちょっとLOVを行いますあなたは今、空の行を取得していませんか? – Skeen

+0

@Skeen:空の行は常に 'for'でスキップされます。あなたはバッチファイルでそれらを扱う方法がありません(少なくとも私が知っているものではありません)。 Eric: '' delims = @ ''に '' delims = @ ''だけを実行して、実際の区切り文字を持たない場合は、同じ効果に '' delims = "'を使うこともできます。入力に – Joey

+0

@ジョイ:良いポインタをありがとう。 –

関連する問題