.less 批处理中的编译 for-loop 过早地结束批处理脚本

Posted

技术标签:

【中文标题】.less 批处理中的编译 for-loop 过早地结束批处理脚本【英文标题】:.less compilation in batch for-loop ends batch script prematurely 【发布时间】:2013-03-14 09:00:37 【问题描述】:

我是批处理新手,但我发现在部署之前将我的网站的 .less 文件编译成 .css 是一种好方法。

不幸的是,在我在批处理文件中使用 for 循环来查找我的所有 .less 文件并将它们编译成它们的 .css 等效项后,即使在 for 循环之后我有更多命令,我的脚本也会停止执行.

我的批处理脚本包含以下内容:

@echo off
rmdir c:\code\releaseDirectory /s /q
echo d | xcopy /d c:\code\devDirectory c:\code\releaseDirectory /s
cd c:\code\releaseDirectory
for /r %%i in (*.less) do echo %%i
for /r %%i in (*.less) do lessc -x %%i > %%~pi%%~ni.css
echo reached the end of the batch script!

当我运行它时,输出显示所有正在发生的 .less 编译,但是“到达了批处理脚本的末尾!”字符串永远不会显示,因此我想在 .less 编译后采取的任何操作都不会发生。

为什么for循环中的less编译后没有任何脚本被执行?

【问题讨论】:

相关:Why does only the first line of this Windows batch file execute but all three lines execute in a command shell? 【参考方案1】:

我遇到了同样的问题,不得不将lessc 更改为call lessc,然后我的脚本过早地停止了结束。这是一个引导我尝试的 SO 链接:Why does calling a nested batch file without prepending "call" to the line exit the parent batch file? 基本上它说您需要在执行嵌套批处理文件时使用call,以便在子文件完成执行时将控制权返回给父文件。

【讨论】:

【参考方案2】:

你的路径中有lessc.bat吗?

如果有,需要CALL lessc...


有一个“奇怪”的文件名吗?正在处理?

也许...做 ECHO %%i& lessc -x %%i > %%~pi%%~ni.css

可能会透露更多...

【讨论】:

抱歉,不,lessc 是用于将 .less 文件编译成 .css 文件的 .Less 编译器。 lesscss.org/#usage 在添加额外的 echo 并将批处理脚本重定向到 .txt 文件后,for 循环的每一行的输出看起来像 c:\Code\releaseDirectory>echo c:\Code\releaseDirectory\styles\common.less & lessc -x c:\Code\releaseDirectory\styles\common.less 1>\Code\releaseDirectory\styles\common.css c:\Code\releaseDirectory\styles\common.less,除了 for 循环的第一次迭代,它只输出c:\Code\releaseDirectory\styles\about.less。第一次迭代是否只显示表明某种错误? 很有可能。我建议您尝试更改为 cd c:\code\releaseDirectory 并在提示符下尝试 lessc -x c:\Code\releaseDirectory\styles\about.less > \Code\releaseDirectory\styles\about.css 看看会发生什么。也许实际上删除了>... 部分,只是让输出出现在屏幕上。 顺便说一句 %%~pni.css%%~pi%%~ni 一样有效 输出按预期显示,因此似乎 about.less 文件没有任何问题。还有其他想法吗?【参考方案3】:

试试这个:

...
for /r %%i in (*.less) do lessc.exe -x "%%~i" "%%~dpni.css"
...

【讨论】:

认为它通常是“lessc.cmd”而不是 Windows 中的“lessc.exe”。但是,对于 /r %%i in (*.less) do lessc -x "%%~i" "%%~dpni.css" 将起作用。

以上是关于.less 批处理中的编译 for-loop 过早地结束批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章

批处理文件在 for-Loop 开始时看似随机崩溃

less入门

Less 编译工具

腾讯开源前端预处理器语言图形编译工具 Koala使用指南

8.9

LESS 编译错误