2013-02-04 177 views
0

下面是我的代碼簡單的代碼片段:變量未嵌套for循環設置 - Windows批處理

@echo off  
setlocal enabledelayedexpansion 
    for /f %%f in ('%pomFiles%') do (
     findstr "var" %%f > nul 
     if errorlevel 0 if not errorlevel 1 (
      cd "%%~dpf" 
      for /f "usebackq" %%i in ('%%~dpftree.out') do (set size=%%~zi && echo !size!) 
      if !size! gtr 0 (
        //do stuff 
      ) 
     ) 
    ) 

似乎是!size!變量沒有被設定。如果我做echo !size!,它會打印!size!。我怎樣才能確保!size!評估?

+0

可能重複http://stackoverflow.com/questions/14684074/batch-file-printing- out-commands-with-echo-off) – Vicky

+0

當您回答問題時,您可以更好地編輯原始問題,而不是發佈全新的問題。 – Vicky

+0

@Vicky,我已經解決了打印命令的問題,因爲你的建議,如果你發佈它,我會標記爲答案。但我覺得這是一個完全不同的問題...... – Alex

回答

1

這是因爲您正在使用for /f,它是讀取文件的內容,因此問題是您正在嘗試獲取變量%%i的大小,該變量被設置爲文件中的第一行。

你只需要一個普通for循環

for %%i in ("%%~dpftree.out") do (set size=%%~zi && echo !size!) 
if !size! gtr 0 (
    //do stuff 
) 
[批處理文件打印出來與@echo命令關閉](的
+0

感謝您的建議巴厘島C,但即使這個代碼改變它似乎仍然打印出'!size!'而不是價值。如果我寫'echo %%〜zi'的大小確實打印... – Alex

+0

嗯,你已經啓用延遲擴展不是嗎?我知道這是你的例子,但聽起來像你沒有。我剛剛測試過它,它適合我嗎? –

+0

是的,它是第一個for循環之前的第一行,如我的示例所示。這應該啓用內部循環的延遲擴展以及右?鑑於你提出的新的陳述,是否足夠把'if!size! gtr 0'在for循環體中,並改變'!size!'爲'%%〜zi'?這個循環只會每運行一次,對吧? – Alex