我想创建一个脚本,通过打开ij并告诉ij运行setup.sql脚本来初始化apache derby数据库。
我设法打开了ij,但是如何从脚本窗口将命令传递给ij窗口?我相信这可以在linux中使用这里的文档,但据我所知,这在Windows命令提示符下是不可能的。
编辑:我用这一行打开ij。
"C:\Program Files\Java\jdk1.8.0_101\db\bin\ij.bat"
我希望这行在上一个命令打开的窗口内执行:
run 'setup.sql'
答案 0 :(得分:0)
这是愚蠢但应该工作...我的想法是你只是在批处理文件中放置其他代码,告诉它实际上键入它进入窗口。这通常使用SendKeys完成。更多关于密钥here。
所以这就是剧本:
@if (@CodeSection == @Batch) @then
@echo off
start "C:\Program Files\Java\jdk1.8.0_101\db\bin\ij.bat"
set SendKeys=CScript //nologo //E:JScript "%~f0"
timeout /t 3
%SendKeys% "run 'setup.sql'"
%SendKeys% "{ENTER}"
Goto:eof
@end
// JScript section
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));
看起来很大但是相当无害;)
@if (@CodeSection == @Batch) @then
和
@end
需要将批处理脚本与键入键的魔法分开; JScript。
@echo off
将简单地阻止批处理文件为每个命令打印的任何输出
下一行启动您自己启动另一个命令行应用程序的批处理文件
设置变量SendKeys
不是100%需要,但是更容易阅读,它保存字符串以激活JScript-Section( - >击键模拟)以使其更易于使用。
根据您的需要更改超时值。我不知道ij需要多长时间才能开始
下一行将愚蠢地写出角色的命令字符(不用担心......你什么都看不见!)
在阅读JScript并全部抛出错误之前,需要Goto:eof
来停止批处理脚本。
我不是100%肯定,因为我没有测试它,但您可能需要通过命令行本身启动批处理文件,如下所示:
start /min <your batch-file here>
这将启动文件最小化以确保它将键入正确的窗口。
随意提问!
答案 1 :(得分:0)
所以我的sql文件将如下所示:
CONNECT 'jdbc:derby://<my_hostname>:1527/<database_name>;create=true;user=akshay;password=akshay';
RUN 'C:\Users\akshay_chopra\Downloads\db-script\derby\derby_ddl.sql';
RUN 'C:\Users\akshay_chopra\Downloads\db-script\derby\derby_dml.sql';
让此sql文件名为derby_config.sql
现在,制作一个批处理文件并添加以下行:
@echo off
cls
java -cp D:\derby\db-derby-10.14.2.0-bin\db-derby-10.14.2.0-bin\lib\* org.apache.derby.tools.ij "C:\Users\akshay_chopra\Desktop\derby_config.sql"
cmd /k
以上命令的格式为
java -cp
\ lib \ * org.apache.derby.tools.ij “ ”
D:\ derby \ db-derby-10.14.2.0-bin \ db-derby-10.14.2.0-bin \ lib \ *代表可以在其中找到ij java类的jars。这些罐子可以在\ lib文件夹中找到。最后的*表示它将搜索所有jar文件以查找ij类。