无法使用%%符号递归设置文件路径和读取批处理文件中的文件名



我需要使用python命令执行一组.txt文件(使用robot框架编写的测试脚本)。每个测试脚本都放在一个文件夹中,所有这些子文件夹都放在名为TestFolder的主文件夹下。每个子文件夹下的脚本文件看起来像这样-

   Test_Data.txt
   Sign_In.txt
   Registration.txt

我正在使用一个批处理文件来触发此测试。我的代码如下:-

@echo off
D:
cd .TestFolder
Echo Current dir: "%CD%"
echo.***        Running Test suite in Chrome       ***
For /r %%i in (*.txt) do ( 
  set SuitePath=%%i (--- I would like to get full file name)
  echo Suite path : !SuitePath!
  set SuiteName=%%~ni    (-- to get name of file without ext)
  echo Suite name : !SuiteName!
CALL pybot --variable Browser:Chrome -d D:SmokeTestResultsTestResults_%date:~10,4%%date:~4,2%%date:~7,2%... 
)

当我从命令行执行此操作进行初始测试时,我得到了以下错误:

----
Current dir: D:TestFolder
***        Running Test suite in Chrome       ***
Suite path : !SuitePath!
Suite name : !SuiteName!
[ ERROR ] Parsing '!SuitePath!' failed: Data source does not exist.
Try --help for usage information.
Suite path : !SuitePath!
Suite name : !SuiteName!
[ ERROR ] Parsing '!SuitePath!' failed: Data source does not exist.
 .... ..... .......  ......

请注意,测试脚本文件夹位于D驱动器中,批处理文件能够正确打印当前目录。。但无法设置套件路径或套件名称

  • 如果我需要更改批处理命令,请帮助我。。我需要设置这个套件,以便为日常构建进行持续集成

谢谢。Ishwar

@echo off
    setlocal enableextensions disabledelayedexpansion
    set "folder=d:TestFolder"
    pushd "%folder%" && (
        for /r %%i in (*.txt) do (
            set "SuitePath=%%~fi"
            set "SuiteName=%%~ni"
            setlocal enabledelayedexpansion
                echo Suite Path = "!SuitePath!"
                echo Suite Name = "!SuiteName!"
                CALL pybot --variable Browser:Chrome -d D:SmokeTestResultsTestResults_%date:~10,4%%date:~4,2%%date:~7,2%... 
            endlocal 
        )
        popd
    )

要使用延迟扩展,您需要首先启用它。

请注意,当延迟扩展处于活动状态时,文件的名称或路径中是否存在感叹号将成为一个问题,因为批处理解析器将在set命令中删除或重新解释它们。如果您确信文件的名称/路径中永远不会包含感叹号,则可以在脚本开始时直接启用延迟扩展,并删除用于处理指示问题的内部setlocal enabledelayedexpansion / endlocal行。

无论如何,如果不需要变量,也就是说,你只需要它的值,而不是存储在变量中的值,不要使用延迟扩展,在使用变量引用的地方直接使用for可替换参数。

最新更新