.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 过早地结束批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章