以下是我的代码:
task encodeFile(type: Exec) {
workingDir dirName
def files = file(dirName).listFiles()
files.each { File file ->
if (file.isFile()) {
println " *** $file.name *** "
def tmpName = "tmp$file.name"
println " === $tmpName"
commandLine "cmd", "/c native2ascii $file.name $tmpName"
commandLine "cmd", "/c del $file.name"
commandLine "cmd", "/c move $tmpName $file.name"
// commandLine "cmd", "/c move $file.name $tmpName"
println " === $file.name is moved"
println "----------------------------------"
// """executable "native2ascii" "$file.name" "$tmpName""""".execute()
}
}
}
我正在尝试对指定文件夹下的所有文件进行编码以进行本地化。但是当我运行上面的代码时,只有最后一个文件按预期更改。我打印了一些消息,所有文件都被迭代了。
有谁知道这里发生了什么?
答案 0 :(得分:0)
是的,每个在文件对象上调用的最后一次迭代都会设置配置并获胜 - 您可以更改传递的文件的顺序来验证它。
默认情况下, native2ascii
任务是内置的gradle,您可以尝试例如:
task n2a {
doLast {
ant.native2ascii(
src : project.file('n2a-src'),
dest : project.file('n2a-dest')
)
}
}
似乎没有必要通过Exec
任务来完成。
答案 1 :(得分:-1)
对我而言,这是正常的:
processResources {
"*.properties, *.txt".split(",").each {pattern ->
filesMatching ("**/" + pattern.trim ()) {
filter {
it
.replace ('${projectVersion}', project.version)
.replace ('${projectName}', project.name)
}
}
}
doLast {
if (file (processResources.destinationDir).exists()) {
ant.native2ascii (
src: "${processResources.destinationDir}",
dest: "${processResources.destinationDir}/../ascii",
includes: '**/*.properties',
)
copy {
from "${processResources.destinationDir}/../ascii"
into processResources.destinationDir
}
}
}
}