以下是一个程序应该作为VS中的预构建事件运行。它直接从命令行工作,但不在VS中工作。
@echo off
:: Direct From cmd.exe
:: "G:Google Drive\GitHub\toolset\Site\pre-build.bat" Release "G:Google Drive\GitHub\toolset\Site\Web"
:: From Visual Studio Pre-Build Event
:: "$(SolutionDir)pre-build.bat" $(ConfigurationName) "$(ProjectDir)"
if %1==Release (
if exist %2 (
set location=%2
set dotlessVersion=v1.3.1.0
:: Compress Less Files
for /r %location% %%a in (*.less) do (
"%~dp0..\SharedLibs\dotless\%dotlessVersion%\dotless.Compiler.exe" -m -r "%%a" "%%~da%%~pa%%~na.min.css"
)
:: Minify js Files
for /r %location% %%a in (*.closure.js) do (
set newFilename=%%a
call java -jar "%~dp0..\SharedLibs\Closure Compiler\compiler.jar" --js "%%a" --js_output_file "%%newFilename:.closure.js=.min.js%%"
)
)
)
答案 0 :(得分:1)
它与visual studio无关,它是标准的批量初学者bug 如您所料,百分比扩展在括号中不起作用 在解析完整块之前,在执行任何行之前,它会扩展。
所以%location%
被扩展为空,它进入块之前的值
在cmd行,它以相同的方式工作,但是如果你开始批次两次,它似乎可以工作,但你只看到正确的值,因为它仍然设置。
如何解决? 不要使用它(扩展百分比),而是使用延迟扩展!
setlocal EnableDelayedExpansion
if %1==Release (
if exist %2 (
set location=%2
echo !location!
....