batch-file - for循环中的延迟扩展

标签 batch-file cypress

延迟扩展在我的 for 循环中表现得很奇怪。在第一次迭代中定义了 study,在第二次迭代中延迟扩展似乎不起作用(延迟扩展只是用来去掉冒号,因为那将是目录的名称)。就是这样cypress命令破坏了一些东西。这与 cypress CLI 的工作方式有某种关系,还是我的脚本有问题?

@echo off
setlocal EnableExtensions EnableDelayedExpansion    

:parse
IF "%~1"=="" GOTO endparse
IF "%~1"=="-s" SET studies=%~2
SHIFT
GOTO parse
:endparse


for %%a in ("%studies:,=" "%") do (
set tmp=%%~na
set study=!tmp::=!
echo study %%~a delayedExString: !study!
npx cypress run -study=%%~a --config videosFolder=cypress/videos/!study! --headless --spec "cypress/integration/*"
)

例子:

myscript.bat -s "firstStudy:Chap1,secondStudy:Chap3"

控制台输出:

study firstStudy:Chap1 delayedExString firstStudyChap1
[...cypress log...]


study secondStudy:Chap3 delayedExString !study!
[...cypress log...]

如您所见,在第二次迭代中研究没有展开。

最佳答案

后续迭代中不同行为的一个根本原因是批解析器退出到命令行解析器。

这发生在循环内部,通过在没有 CALL 的情况下启动另一个批处理文件。
我想你的情况是 npx

要解决这个问题,只需添加CALL

call npx cypress run ...

在没有 call 的情况下启动另一个批处理文件会导致将执行上下文传输到另一个批处理文件而不返回。
通常这会在第二个批处理文件结束并返回到命令行上下文后结束。
但是在一个循环中,循环还是会完成。

对此行为的简单检查是添加一个虚拟函数调用。

for %%a in ("%studies:,=" "%") do (
   call :dummy
   ....
)

:dummy
exit /b

第一个循环有效,但随后发生错误:

Invalid attempt to call batch label outside of batch script.

关于batch-file - for循环中的延迟扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67886745/

相关文章:

windows - 特殊字符的cmd字符串替换

windows - 捕获输出命令CMD

Cypress - 新测试文件未显示在 cypress UI 中

typescript - 如何让 cypress.io 向左滑动 ionic ion-item-sliding?

api - Cypress cy.wait 带别名

javascript - 如何修复 "Cannot find module ' fs-extra' - 错误“将 cypress 文件部署到 jenkins 中时?

c++ - 从对其他进程(如 cmds)可见的 C++ 代码设置当前用户环境变量

windows - 将声音输出到音频设备

sql-server - 无法通过批处理文件使用 SQLCMD 连接到 SQL Server

testing - 在基于 cypress 的图像容器中 headless 运行时,Cypress XHR 请求被中止