我需要使用python命令执行一组.txt文件(使用机器人框架编写的测试脚本)。每个测试脚本都放在一个文件夹中,所有这些子文件夹都放在名为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:\SmokeTestResults\TestResults_%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
答案 0 :(得分:2)
@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:\SmokeTestResults\TestResults_%date:~10,4%%date:~4,2%%date:~7,2%...
endlocal
)
popd
)
要使用延迟扩展,您需要先启用它。
请注意,当延迟扩展处于活动状态时,文件名称或路径中存在感叹号会成为问题,因为批处理解析器将在set
命令中删除或重新解释它们。如果您确定您的文件永远不会在其名称/路径中包含感叹号,则可以在脚本开头直接启用延迟扩展,并删除包含的内部setlocal enabledelayedexpansion / endlocal
行以处理指示的问题。 / p>
无论如何,如果不需要变量,也就是说,你只需要它的值而不是存储在变量中的值,不要使用延迟扩展并直接使用你使用的for
可替换参数变量引用。