2014-01-25 57 views
0

文本文件包含值。這些值將被用作可執行文件的參數。 我嘗試以下,看我如何從一個文件中使用的輸入(逐行):讀取文本文件中的值和後續處理

@echo off 
for /f "tokens=*" %%i in (test.txt) do (
set n1=%%i 
echo %n1% 
echo "done" 
) 

的test.txt包含數字:防爆。

0.1 
0.002 
3 
20 

設定批處理命令的批處理文件處理的輸出是:

20 
"done" 
20 
"done" 
20 
"done" 
20 
"done" 

出了什麼問題嗎?

回答

2

要訪問的變量,你需要delayed expansion一個代碼塊中:

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION 
for /f "DELIMS=" %%i in (test.txt) do (
    set "n1=%%~i" 
    echo !n1! 
    echo "done" 
) 

請注意:延遲擴展型變量需要exclams而不是百分比。


在這部分代碼,如果你使用的循環參數%%i爲「可變」你不需要delayed expansion

@ECHO OFF &SETLOCAL 
for /f "DELIMS=" %%i in (test.txt) do (
    echo %%i 
    echo "done" 
) 

但你不能做出這樣set "n1=!n1:.0=.!"字符串轉換與%%i

+0

聽起來正確...這裏的一些討論http://stackoverflow.com/questions/6679907/setlocal-and-enabledelayedexpansion-usage-question – kenny

+0

這是有效的。我明白!n1!是爲每次迭代獲得修改後的值。爲什麼〜? 此外,它試圖執行乘法 - set/a n2 =!n1!* 10 echo!n2! 。結果是我得到了0.1和0.002以及一個'失蹤運算符'。其他兩個值的結果是好的(30和200) – umayfindurself

+0

'cmd'不知道十進制數。您只能使用整數。 – Endoro