我有一个 Kotlin 脚本,它使用 println() 创建文件并输出一些日志消息。当我从 IntelliJ 运行脚本时,它按预期工作,创建文件并在控制台中显示输出。但是,当我使用批处理文件运行脚本时,不会创建文件,而且我在命令提示符中也看不到任何输出。
这是我的 Kotlin 代码:
import java.io.File
fun main(args: Array<String>) {
println("Starting main function")
println("Hello World!")
createFile("C:\\0_Scripts\\CSV_ To proper format\\👽hi_there.txt", textToFile = "Hello there)")
createFile("C:\\0_Scripts\\CSV_ To proper format\\11111.txt", textToFile = "Hello there)")
createFile("C:\\0_Scripts\\CSV_ To proper format\\\uD83D\uDE08hi_there.txt", textToFile = "Hello there)")
println("File created")
println("Program is Finished)")
}
fun createFile(absolutePathToFileWithExtension: String, textToFile: String) =
File(absolutePathToFileWithExtension).writeText(textToFile)
这是我用来编译和运行 Kotlin 脚本的批处理脚本:
cd C:\Users\user\IdeaProjects\TestScript
kotlinc src\main\kotlin\Main.kt -d bin
java -cp bin MainKt
pause
当我运行批处理脚本时,我看到以下输出,但没有日志消息或创建的文件:
C:\0_Scripts\CSV_ To proper format>test.bat
src\main\kotlin\Main.kt:4:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
^
C:\Users\user\IdeaProjects\TestScript>
什么可能导致这个问题,我该如何解决:
.1。查看控制台输出 .2.从批处理文件运行 IntelliJ 项目时操作文件?
但是调用
java
您正在调用不加载 kotlin 库和依赖项的 java jvm。
你应该用
java
代替kotlin
的使用。
所以命令是:
cd C:\Users\user\IdeaProjects\TestScript
kotlinc src\main\kotlin\Main.kt -d bin
kotlin -cp bin MainKt
pause
据我所知,您可以像调用
kotlin
二进制文件一样调用 java
二进制文件。
当您在命令行上调用
kotlinc
时,您正在运行文件.../kotlinc/bin/kotlinc.bat
。当您从另一个批处理文件运行一个批处理文件时,控制权将转移到新的批处理文件并且永远不会返回到调用批处理文件(即它更像是一个goto
而不是一个call
)。所以,发生的事情是你的批处理文件运行 kotlinc 然后没有其他事情发生,因为 kotlinc.bat 不会返回到你的脚本,而是返回到命令行。
要解决此问题,您需要替换此行:
kotlinc src\main\kotlin\Main.kt -d bin
与:
call kotlinc src\main\kotlin\Main.kt -d bin
此外,您需要按照 Fox2Code 在另一个答案中所说的进行操作(使用
call kotlin
而不是 java
运行您的应用程序)。