Windows10下SBT调用xcopy复制任务报错:参数数量无效
解决SBT中调用xcopy出现"Invalid number of parameters"的问题
我来帮你搞定这个问题!先说说问题根源:你直接用字符串拼接的方式调用Process(s"xcopy /i ..."),在Windows环境下,SBT的Process模块会错误地解析命令与参数的边界,导致xcopy接收到的参数格式不符合要求——这就是为啥你在CMD里能正常运行,但SBT里报错返回码4(这个返回码对应的是初始化错误,本质就是参数传递出了问题)。
正确的修改方案
别把命令和参数拼成一个字符串传给Process,改用命令+参数列表的形式调用,这样SBT能精准地把每个参数原样传递给xcopy。修改后的代码如下:
val copyCommonFilesInPublicKey = taskKey[Int]("Copies files in ../common/css and ../common/javascripts in public/stylesheet/common and public/javascripts/common") copyCommonFilesInPublicKey := { val copyCSS = Process("xcopy", Seq("/i", "../common/css", "public/stylesheets/common")).!< println(s"copy CSS returned ${copyCSS}") val copyJS = Process("xcopy", Seq("/i", "../common/javascripts", "public/javascripts/common")).! println(s"copy JS returned ${copyJS}") copyJS }
为啥这样改就有效?
当你用字符串形式传递命令时,Process会尝试按空格拆分命令和参数,但Windows的命令行解析逻辑和Unix差异很大,这种拆分很容易出错(如果路径里包含空格,问题会更突出)。而Process(command, parametersSeq)的形式,会直接把每个参数独立传递给xcopy,完全避免了解析错误的问题。
另外你之前怀疑的/i参数没问题,它的作用是当目标目录不存在时自动创建,这个参数的用法是正确的,问题根本不在这儿~
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

