批处理中的.less编译会提前结束批处理脚本

3

我对批处理不是很熟悉,但我发现这是将我网站上的.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编译过程,但是"reached the end of the batch script!"字符串从未被显示,因此,在.less编译之后我想要执行的任何操作都没有发生。
为什么在for循环中.less编译之后的任何脚本都没有被执行?

3个回答

4

3

你的路径中是否有lessc.bat文件?

如果是,你需要使用CALL lessc...


是否处理了一个奇怪的文件名?

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

可能会揭示更多细节...


抱歉,lessc是用于将.less文件编译为.css文件的.Less编译器。http://lesscss.org/#usage - James J
在添加额外的回显并将批处理脚本重定向到.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。第一次迭代只显示这个是否表明存在某种错误? - James J
很有可能。我建议您尝试切换到 cd c:\code\releaseDirectory 并在提示符下尝试 lessc -x c:\Code\releaseDirectory\styles\about.less > \Code\releaseDirectory\styles\about.css,看看会发生什么。也许实际上删除 >... 部分,只是让输出显示在屏幕上。顺便说一句,%%~pni.css 将像 %%~pi%%~ni 一样有效。 - Magoo
输出结果符合预期,因此看起来about.less文件没有任何问题。还有其他想法吗? - James J

1

试试这个:

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

通常在Windows中使用的是"lessc.cmd"而不是"lessc.exe"。但是,对于/ r %%i in (*.less) do lessc -x "%%i" "%%dpni.css"将起作用。 - Stephen Simpson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接