2010-11-17 102 views
0

我正在使用下面的一段代碼;改變一些東西在Cmakefile:空間上的批處理腳本breakline?

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)的,但通常是更好的設置重定向爲前綴,像

>> temp.tmp echo %%j 

與正常的變量後綴的變體可能會失敗

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

擴展到回聲hallo2> temp.tmp或回波喂2> temp.tmp,因此只有標準錯誤會重新定向。 接下來的問題是關鍵字ON OFF /?,如果你的文件包含這樣的詞你會得到意想不到的結果,因爲echo會解釋這些詞。

[編輯:爲了解決這一點,你可以使用回聲(

>>temp.tmp echo(%%j 

你可以得到空行(或只有空格行),你只需要前綴他們

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

DelayedExpansion的切換必須保留「!」和「^」字符

+0

我會試着看看:) – Skeen 2010-11-19 06:36:00

1

默認的分隔符是空格和製表符。如果您覆蓋默認的分隔符,它應該讀與空格

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

我將它設置爲@整條生產線,而忽略空格作爲分隔符,並讀取整條生產線。您可以將其設置爲您知道不會出現在文本文件中的唯一字符。

+0

我確實有點lov現在,你呢,但是它沒有得到空行? – Skeen 2010-11-18 00:48:12

+0

@Skeen:空行總是*用'for'跳過。你無法在批處理文件中處理它們(至少不是我所知道的)。 Eric:如果你使用''「delims = @」'只有沒有實際的分隔符,你可以使用'「delims =」'來達到同樣的效果 - 並且你不需要考慮一個不會出現的字符在輸入中。 – Joey 2010-11-18 02:22:22

+0

@Joey:謝謝你的指點。 – 2010-11-18 03:06:58