对于批处理文件中的循环和delim

aru*_*sun 5 windows cmd batch-file

有人可以帮我理解命令文件的语法

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
) )
Run Code Online (Sandbox Code Playgroud)

我得到它首先检查INPUT_PATH变量是否为空,如果它是空的然后进入内部for循环,否则我将丢失

特别

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

dbe*_*ham 7

您需要的大部分信息都可以在内置帮助中找到,但如果您不熟悉批量编程,则可能会令人生畏.例如,键入HELP FORFOR /?从命令提示符获取有关FOR命令的帮助.

说明:

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

DIR命令列出路径中的所有*.TRX文件%TEST_RESULTS%.该/B选项提供简要格式(仅限文件名).该/O-D选项按上次修改日期降序(最新的第一个)对文件进行排序.

FOR/F命令有三种模式,具体取决于IN()子句的格式.IN()子句用单引号括起来的事实意味着FOR/F将内容视为命令,并一次处理一行命令的输出.该"delims="选项意味着没有解析成令牌(保持每个整条生产线).因此每行都迭代加载到%%i变量中.该%%i变量仅存在于FOR命令的上下文中.

SET INPUT_PATH=%TEST_RESULTS%\%%~ni
Run Code Online (Sandbox Code Playgroud)

我想你知道这个命令的大部分功能.唯一"不寻常"的方面是%%~ni语法.该语法仅将值扩展%%i为基本文件名,不带任何扩展名.

GOTO :DoneInputPath
Run Code Online (Sandbox Code Playgroud)

GOTO导致FOR循环在第一次迭代后中止.这意味着INPUT_PATH将被设置为最近修改过的*.trx文件的名称,因为它已排序到顶部.

如果GOTO不在那里,那么最终结果将是最旧的*.trx文件.