中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问如何实现一个bat调用另一个bat中函数,谢谢。
作者:
标题: 请问如何实现一个bat调用另一个bat中函数,谢谢。 上一主题 | 下一主题
leson
初级用户





积分 35
发帖 15
注册 2007-12-9
状态 离线
『楼 主』:  请问如何实现一个bat调用另一个bat中函数,谢谢。

一直很疑惑,
难道在批处理中使用函数就只能够在本bat中使用吗?
不可以像Shell Script里面的.或source导入一样重用,
或者至少可以call lib.bat func args
这样使用吧?

请高手指点,谢谢。

2008-9-15 13:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

一个.bat
@echo off
call 另一个.bat hello
另一个.bat
@echo off
echo %1
pause




2008-9-15 14:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
leson
初级用户





积分 35
发帖 15
注册 2007-12-9
状态 离线
『第 3 楼』:  

是希望调用另一个bat中的函数,
也就是想实现函数库bat,将一些常用函数定义放里面。
然后以后需要在独立应用中用到函数时,直接导入定义或直接调用即可。

不知道有没有这种实现?
谢谢。

2008-9-15 14:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 4 楼』:  

1.bat
@echo off
call 2.bat call :a
pause
2.bat
@echo off
%*
goto :eof

:a
echo aaaaaaaaa
goto :eof

:b
echo bbbbbbbbb
goto :eof


   此帖被 +1 点积分    点击查看详情   
评分人:【 leson 分数: +1  时间:2008-9-15 15:18




正在潜水修练的批处理小白
2008-9-15 15:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
leson
初级用户





积分 35
发帖 15
注册 2007-12-9
状态 离线
『第 5 楼』:  

当前也只能使用下面这种walk-around方案了。
如果大家还有更好的方法,请不吝赐教,谢谢。

func_lib.bat:
@echo off

:: main entry
set "func=%~1"
shift
goto %func%
goto:EOF

:: functions definitions show below
:bannerPingPong varref -- moves text in varref one step left or right and updates title
::                     -- varref [in,out] - variable name with banner text, format: "Banner Text------"
SETLOCAL ENABLEDELAYEDEXPANSION
set s=!%~1: =-!
if "!s:~-1!" NEQ "-" if "!s:~-1!" NEQ "+" set s=!s!--------
set d=!s:~-1!
if "!s:~0,1!" NEQ "-" set d=+
if "!s:~-2,1!" NEQ "-" set d=-
if "!d!"=="+" (set s=-!s:~0,-2!+) ELSE (set s=!s:~1,-1!--)
TITLE !s!
(ENDLOCAL & REM RETURN VALUES
    IF "%~1" NEQ "" SET %~1=%s%
)
goto:EOF
app.bat:
@echo off
set "text=hi    -"
for /l %%C in (1,1,15) do (
    call func_lib.bat :bannerPingPong text
    call echo.'%%text%%'
)
app.bat执行结果:
D:\root\rove\batch>.\app.bat
'-hi---+'
'--hi--+'
'---hi-+'
'----hi+'
'---hi--'
'--hi---'
'-hi----'
'hi-----'
'-hi---+'
'--hi--+'
'---hi-+'
'----hi+'
'---hi--'
'--hi---'
'-hi----'

2008-9-15 15:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
leson
初级用户





积分 35
发帖 15
注册 2007-12-9
状态 离线
『第 6 楼』:  

4楼的方法真是太厉害了,
完全是思路上的层次啊,
非常感谢。
应该是解决了,困扰我好久的问题了,谢谢。

2008-9-15 15:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: