2014-10-06 68 views
0

這裏對批處理腳本比較新,我一直在尋找答案,只是找不到任何東西。在變量中使用引號的批量問題

以下是我有一個批處理腳本到目前爲止..

@echo off 

set addtext="text to add includes spaces" 

for /f "delims=" %%l in (file.txt) do (
    echo %%l %addtext% >> tmpfile.txt 
) 

我期待一行文本添加到該文件中的每一行,但我的問題開始與雙引號。我不希望引號與文本一起顯示。
我只在那裏有引號,因爲在我想要添加到每一行的文本字符串中有空格。

回答

3
@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set "addtext=text to add includes spaces" 

    for /f "delims=" %%l in (file.txt) do (
     >> tmpfile.txt echo %%l %addtext% 
    ) 

這應該有效。只是不要在變量的值中包含引號,而是使用它們來包裝賦值。

在該字符串可以包含多個問題的字符的情況下,這是一個更安全的版本

@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set "addtext=text to add includes spaces, > redirections & more problems !" 

    (for %%a in ("%addtext%") do for /f "delims=" %%l in (file.txt) do (
     echo %%l %%~a 
    )) >> tmpfile.txt 
  1. 報價不包含在價值,但包裹分配
  2. 爲了防止問題訪問變量,它被包裹在引號中,存儲在for可替換參數(%%a)中,並且在請求回顯時沒有引號(%%~a
  3. 只是爲了獲得更好的性能(也應該在第一個代碼中使用),而不是打開/寫入/關閉每行的輸出文件(重定向每個echo),重定向處理的完整for命令。
+1

@jeb,我已經複製並粘貼了答案中的代碼(延遲擴展*禁用*),它的工作原理。爲了讓它按照你的意思工作,驚歎號需要在我不想做的變量定義上轉義。而且,在啓用延遲擴展的情況下,如果源文件的數據中包含'!',則輸出將會出錯。 – 2014-10-06 13:28:12

+0

你說得對,我讀'enabledelayedexpansion',但是你寫了'enableextension' ... – jeb 2014-10-06 20:29:02