【问题标题】:For loop and delims in batch files批处理文件中的 for 循环和分隔符
【发布时间】:2013-08-19 14:38:55
【问题描述】:

谁能帮我理解命令文件的语法

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

【问题讨论】:

  • 如果您希望其他人阅读,请正确格式化您的代码。

标签: windows batch-file cmd


【解决方案1】:

您需要的大部分信息都可以在内置帮助中找到,但如果您是批处理编程的新手,这可能会让人望而生畏。例如,在命令提示符下键入 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 文件。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多