2012-07-06 74 views
0

的線我有一個for循環迭代。相反,它將打印logPath
這是代碼:for循環不通過是應該打印文本文件的每一行的文本文件

set enabledelayedexpansion 

    for %%G in (C:\ExecutionSDKTest_10.2.2\*.properties) DO (
     Set fileName=%%~nxG 
     ... 
    set logPath="C:/ExecutionSDKTest_10.2.2/Logs/!fileName!.log" 
     ...   
     For /f "tokens=*" %%B in (!logPath!) Do (
     echo Inside the for loop for printing each line!! 
     set logLine=%%B 
     print !logLine! REM this prints the logPath instead of each logLine and jumps out of this for loop after the 1st iteration! 
    ) 
) 

任何幫助嗎?

回答

0
echo off 
For %%G in (C:\ExecutionSDKTest_10.2.2\*.properties) DO (  
     FOR /F "tokens=*" %%i in (%%G) do @echo %%i 
) 
0

你不告訴我們這行發出「無效開關」錯誤消息,但我看到一些潛在的問題:

  1. 使用!variables!需要啓用延遲擴展

    SetLocal EnableDelayedExpansion 
    
  2. 不使用文件名'/',更改爲'\'

    set logPath="C:\ExecutionSDKTest_10.2.2\Logs\!fileName!.log" 
    
  3. print命令發送一個文本文件到打印機。將其更改爲echo

    echo !logLine! 
    
+0

Windows接受斜槓_和_反斜槓。 – 2012-07-07 10:56:23

+0

你說得對,Windows API可以接受反斜槓或反斜槓,但約定是使用反斜槓,並且返回路徑的Microsoft API使用反斜槓。許多程序和庫不接受斜槓。所以,我編輯的答案狀態*潛在問題*,因爲我們不知道還有什麼其他程序中SO的BAT文件運行。 – 2012-07-07 17:45:41

+0

問題是:這些斜槓是否會導致錯誤。我不這麼認爲。 – 2012-07-07 18:59:29

0

使用反斜槓而不是正斜槓。

set "logPath=C:\ExecutionSDKTest_10.2.2\Logs\!fileName!.log" 

雖然通常你可以在Windows交替使用它們,cmd是正斜槓用於開關和選項的內置命令的特殊情況。它的解析器經常在斜槓上絆倒。不過,您通常可以安全地將這些路徑傳遞給外部命令。

+0

我剛剛添加了另一個猜測。從他們寫的東西中,無論如何,沒有人能夠真正弄清楚什麼是錯的;-) – Joey 2012-07-07 15:14:36