有人可以帮我理解命令文件语法
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变量是否为空并且如果它是空的然后进入内部for循环,否则我将丢失
具体地
FOR /F "delims=" %%i in ('dir /O-D /B "%TEST_RESULTS%\*.trx"')
SET INPUT_PATH=%TEST_RESULTS%\%%~ni
答案 0 :(得分:7)
您需要的大部分信息都可以在内置帮助中找到,但如果您不熟悉批量编程,则可能会令人生畏。例如,从命令提示符处键入HELP FOR
或FOR /?
以获取有关FOR命令的帮助。
<强>解释强>
FOR /F "delims=" %%i in ('dir /O-D /B "%TEST_RESULTS%\*.trx"') ...
DIR命令列出*.TRX
路径中的所有%TEST_RESULTS%
个文件。 /B
选项提供简要格式(仅限文件名)。 /O-D
选项按上次修改日期降序(最新的第一个)对文件进行排序。
FOR / F命令有三种模式,具体取决于IN()子句的格式。 IN()子句用单引号括起来的事实意味着FOR / F将内容视为命令,并一次处理一行命令的输出。 "delims="
选项表示不解析标记(保留每一行)。因此每行都迭代加载到%%i
变量中。 %%i
变量仅存在于FOR命令的上下文中。
SET INPUT_PATH=%TEST_RESULTS%\%%~ni
我想你知道这个命令的大部分功能。唯一“不寻常”的方面是%%~ni
语法。该语法仅将%%i
的值扩展为基本文件名,不带任何扩展名。
GOTO :DoneInputPath
GOTO导致FOR循环在第一次迭代后中止。这意味着INPUT_PATH将被设置为最近修改的*.trx
文件的名称,因为它已排序到顶部。
如果GOTO不存在,那么最终结果将是最早的*.trx
文件。
答案 1 :(得分: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"
)