run('command test.bat')是不是要指定路径?(在PB里运行)

fallstone 2001-11-08 02:25:45
为什么run('test.bat')可以找到当前的路径,而象标题那样写的就提示错误呢?
错误:specified COMMAND search directory bad
而且上面的错误是在开始菜单里运行得到的,在PB里则得到运行失败返回值-1.

这到底该怎么解决,请用过的高手指教.

...全文
307 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fallstone 2001-11-13
  • 打赏
  • 举报
回复
to lesni(乐S你)
我还是没弄明白怎么用(太B的啦~~~)
一。其中的w_filecopy是怎么来的?系统定义?不对吧?
二。你贴的整个都是函数定义么?那么定义好了后是不是可以直接调用函数,然后赋值fs_fun???呵呵,看来我这个问题很难弄好。我是水平太凹的了。
ifrank 2001-11-12
  • 打赏
  • 举报
回复
我手头没有pb,也好久没用了。也没测试就告诉你,抱歉。
ifrank 2001-11-09
  • 打赏
  • 举报
回复
兄弟,怎么还没搞完啊
lesni 2001-11-09
  • 打赏
  • 举报
回复
给你一个我的afx_run例子吧:

先定义api函数:Function long ShellExecuteA (long hwnd, string lpOperation ,String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library "shell32.dll"
Function long FindWindowA (String lpClassName , String lpWindowName ) Library "user32.dll"
Function boolean IsWindow (Long hwnd ) Library "user32.dll"

函数Afx_run(string fs_run) return none

Long ll_file

ll_file = fileopen('c:\temp\run.bat',StreamMode!, Write!, LockWrite!, Replace!) //--建一批处理文件

FileWrite ( ll_file,fs_run)
fileclose(ll_file)

ulong ll_handle,lu_return
string ls_path

//设置鼠标指针
SetPointer(HourGlass!)
//运行DOS批处理命令的快捷键方式,并将其窗口隐藏
lu_return = ShellExecutea(handle(w_filecopy), "open", "c:\temp\run.bat", "", ls_path, 0)
//最后一个参数改为 4,可以显示执行情况,0为隐藏窗口
String ls_classname
if lu_return>32 then
ll_handle = 0
//循环至DOS窗口打开
Do While ll_handle = 0
setnull(ls_classname)
ll_handle = FindWindowA(ls_classname,'C:\WINNT\System32\cmd.exe')
// If ib_Close Then Exit
yield()
loop
//等待DOS窗口关闭
Do While isWindow(ll_handle)
// If ib_Close Then Exit
Yield()
Loop
// 应用执行完成
end if
fallstone 2001-11-09
  • 打赏
  • 举报
回复
是啊,还没搞完,我试试看,这两天不大有空,老跑出去~~~
liyc 2001-11-09
  • 打赏
  • 举报
回复
在test.bat最后加一句exit
fallstone 2001-11-08
  • 打赏
  • 举报
回复
to lesni(乐S你) 
你把API发个给我?我要执行完自动关闭的哦.(所以才在前面加个COMMAND嘛)

to tangdaqu(T-男孩) 
你这么写怎样让它执行完自动关闭呢?
tangdaqu 2001-11-08
  • 打赏
  • 举报
回复
不要这么麻烦,用run("start.exe test.bat")是最好的方式。
lesni 2001-11-08
  • 打赏
  • 举报
回复
用API执行你的批处理文件吧,不会有DOS窗口,执行过程中可以用yield()函数。
lesni 2001-11-08
  • 打赏
  • 举报
回复
为什么前面要加一个command?
执行COPY、DELETE之类的要run('command.com /COPY ...')
其他的要有完整路径run('c:\temp\test.bat')
fallstone 2001-11-08
  • 打赏
  • 举报
回复
还没解决,怎么换个方式啊?我想不出,水平凹~~~批处理还是别人告诉我可以的,因为在PB里好象对整个数据库的操作,比如CREATE等会出错的,别的可以.但我就是要创建数据库,而且不用ODBC,所以我现在就想怎么在执行完关闭这窗口.
因为如果让别人用的时候要等批处理完后手动关闭DOS窗口实在不好!
killerdanny 2001-11-08
  • 打赏
  • 举报
回复
你的问题还没有解决呀!换个方式不行吗》?!
fallstone 2001-11-08
  • 打赏
  • 举报
回复
run("command ***.***")是不是一定要运行C:\WINDOWS\COMMAND下的东西?但我把批处理拷过来也不对啊.

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧