t
- js-ou t putfile <!/ H3>
我有这个PowerShell脚本:
cls
$jsFiles = @();
Get-ChildItem | Where {$_.PsIsContainer} | Foreach {
$dir = $_.FullName;
$jsFile = $dir + "\" + $_.Name + ".js";
if (Test-Path ($jsFile)) {
$jsFiles += $jsFile;
}
}
$wd = [System.IO.Directory]::GetCurrentDirectory();
# Build Closure Compiler command line call
$cmd = @("-jar $wd\..\ClosureCompiler\compiler.jar");
Foreach ($file in $jsFiles) {
# Both insert a newline!
$cmd += "--js $file";
#$cmd = "$cmd --js $file";
}
$cmd = "$cmd --js_ouput_file $wd\all.js";
Invoke-Expression "java.exe $cmd"
问题是每个+=
或$cmd = "$cmd str"
来电都会插入换行符!
Echoargs给了我这个输出:
Arg 0 is <-jar>
Arg 1 is <S:\ome\Path\compiler.jar>
Arg 2 is <--js>
Arg 3 is <S:\ome\Path\script1.js>
Arg 4 is <--js>
Arg 5 is <S:\ome\Path\script2.js>
...
Arg 98 is <--js_ouput_file>
Arg 99 is <S:\ome\Path\all.js>
(可能)因此,我从java.exe
得到了一些错误:
java.exe : "--js_ouput_file" is not a valid option
At line:1 char:1
+ java.exe -jar ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ("--js_ouput_file" is not a valid option:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
答案 0 :(得分:2)
尝试重写为更简单的版本:
cls
$wd = [System.IO.Directory]::GetCurrentDirectory();
# Build Closure Compiler command line call
$cmd = "-jar $wd\..\ClosureCompiler\compiler.jar";
$arrayOfJs = Get-ChildItem -Recurse -Include "*.js" | % { "--js $_.FullName" };
$cmd += [string]::Join(" ", $arrayOfJs);
Invoke-Expression "java $cmd --js_ouput_file $wd\all.js"
答案 1 :(得分:1)
当你这样做时
$cmd = @(...);
您正在创建一个数组,因此其后面的+=
将元素附加到数组,而不是字符串连接。只需将其作为字符串,或在使用$ cmd之前。做类似的事情:
$cmd -join " "
将元素连接到一个以空格分隔的字符串中。默认情况下,当数组被强制转换为字符串时,您将在元素之间看到新的行。