windows 批处理文件中的For循环和分隔符

fdx2calv  于 2023-01-31  发布在  Windows
关注(0)|答案(2)|浏览(185)

有人能帮我理解命令文件语法吗

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循环,否则我会迷路
具体地说

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

dddzy1tm1#

您需要的大部分信息都可以在内置帮助中找到,但如果您是批处理编程的新手,这可能会让您望而却步。例如,在命令提示符下键入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变量中。%%i变量只存在于FOR命令的上下文中。

SET INPUT_PATH=%TEST_RESULTS%\%%~ni

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

GOTO :DoneInputPath

GOTO会导致FOR循环在第一次迭代后中止。这意味着INPUT_PATH将被设置为最近修改的*.trx文件的名称,因为它排序在顶部。
如果GOTO不存在,则最终结果将是最旧的*.trx文件。

gcuhipw9

gcuhipw92#

试试这个,解释是在评论:

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"
)

相关问题