2013-08-19 89 views
3

是否有人可以幫助我瞭解的命令文件的語法For循環和delims在批處理文件

IF "%INPUT_PATH%"=="" (
    echo Searching for latest test results in: %TEST_RESULTS% 
    FOR /F "delims=" %%i in ('dir /O-D /B "%TEST_RESULTS%\*.trx"') DO (
     SET INPUT_PATH=%TEST_RESULTS%\%%~ni 
     GOTO :DoneInputPath 
)) 

我得到它首先檢查是否INPUT_PATH變量是空的,如果它是空的,然後進入內部進行循環,我迷路了,否則

專門

  1. FOR /F "delims=" %%i in ('dir /O-D /B "%TEST_RESULTS%\*.trx"')
  2. SET INPUT_PATH=%TEST_RESULTS%\%%~ni
+0

如果您希望其他人閱讀,請正確格式化您的代碼。 – njzk2

回答

5

你最需要的信息是在內置的幫助可用,但如果你是新的批處理編程它可以是艱鉅的。例如,從命令提示符鍵入HELP FORFOR /?以獲取有關FOR命令的幫助。

說明:

FOR /F "delims=" %%i in ('dir /O-D /B "%TEST_RESULTS%\*.trx"') ... 

dir命令可以列出所有%TEST_RESULTS%路徑中的*.TRX文件。 /B選項提供簡要格式(僅限文件名)。 /O-D選項按上次修改日期降序對文件進行排序(最新的第一個)。

FOR/F命令有三種模式,具體取決於IN()子句的格式。 IN()子句用單引號引起的事實意味着FOR/F將內容視爲命令,並且一次處理一行命令的輸出。 "delims="選項意味着不解析令牌(保留每一行)。因此每行都會迭代加載到%%i變量中。變量只存在於FOR命令的上下文中。

SET INPUT_PATH=%TEST_RESULTS%\%%~ni 

我想你知道這個命令的大部分功能。唯一的「不尋常」方面是%%~ni語法。該語法只將%%i的值擴展爲基本文件名,不帶任何擴展名。

GOTO :DoneInputPath 

GOTO導致FOR循環在第一次迭代後中止。這意味着INPUT_PATH將被設置爲最近修改的*.trx文件的名稱,因爲它排在最前面。

如果GOTO不在那裏,那麼最終結果將是最早的*.trx文件。

0

試試這個,解釋是在註釋:

IF NOT DEFINED INPUT_PATH (
    echo Searching for latest test results in: %TEST_RESULTS% 
    REM dir /OD means older files first and the youngest last, the last remains in INPUT_PATH; use "%%~nxi" for file name + file extension 
    FOR /F "delims=" %%i in ('dir /OD /B "%TEST_RESULTS%\*.trx"') DO SET "INPUT_PATH=%TEST_RESULTS%\%%~ni" 
)