2015-11-04 85 views
0

我有一個文件report.txt具有像逗號分隔值(1,2,3,4)。我正在檢查文件是否爲空,然後爲文件中的值分配4個變量。但變量沒有設置。任何幫助爲什麼發生這種情況?爲什麼沒有設置變量

setlocal enabledelayedexpansion 

    for /f %%i in ("Report.txt") do set size=%%~zi 
    if %size% gtr 0 (

    for /F "tokens=1-4 delims=," %%A in ("Report.txt") do (
     set "var1=%%a" 
     set "var2=%%b" 
     set "var3=%%c" 
     set "var4=%%d" 

    ) 
    set var 
    ) 
    echo %var1% 
+1

如果你想在REPORT.TXT的內容閱讀,那麼你需要,因爲你必須在文件名括起來使用usebackq選項。 – Squashman

+1

或者,您可以簡單地從文件名中刪除引號。 – SomethingDark

+2

Doh !!!!區分大小寫FOR變量。 – Squashman

回答

0

您已啓用延遲擴展,但您沒有使用它。爲了使用延遲擴展,您需要使用!variable!而不是%variable%。此外,for循環中指定的變量區分大小寫,因此您需要將var1設置爲%%A或使用%%a作爲循環變量。

setlocal enabledelayedexpansion 

for /f %%i in ("Report.txt") do set size=%%~zi 
if %size% gtr 0 (

    for /F "tokens=1-4 delims=," %%a in (Report.txt) do (
     set "var1=%%a" 
     set "var2=%%b" 
     set "var3=%%c" 
     set "var4=%%d" 
    ) 
    set var 
) 
echo !var1! 
+0

感謝您的回覆。我曾嘗試過,但回波輸出是%a而不是預期的輸出,因爲1 – bob

+0

@bob如果您正在嘗試讀取Report.txt的內容,那麼您需要使用USEBACKQ選項,因爲您的文件名在引號。 – Squashman

+0

或者,您可以從文件名中刪除引號。 – SomethingDark

0
setlocal enabledelayedexpansion 

for /f %%i in ("Report.txt") do set size=%%~zi 
if %size% gtr 0 (

我改變了代碼如下,並開始工作。謝謝你們的時間。解釋它。

for /F "tokens=1-4 delims=," %%A in (%cd%\Report.txt) do (
    set "var1=%%A" 
    set "var2=%%B" 
    set "var3=%%C" 
    set "var4=%%D"  

) 
set var 
) 
echo !var1! 
+0

看起來好像更容易將FOR變量更改爲小寫,而不是更改所有SET語句;) – Squashman

+1

也可以更容易地接受我的答案而不是寫這是因爲它們幾乎完全相同。 – SomethingDark

+1

謝謝你們的幫助,並且花時間解釋這一切。我對批量編程非常陌生,但從所有這些帖子中學習。欣賞它。 – bob