中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-09 18:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问如何实现一个bat调用另一个bat中函数,谢谢。 查看 1,128 回复 5
楼 主 请问如何实现一个bat调用另一个bat中函数,谢谢。 发表于 2008-09-15 13:56 ·  中国 上海 浦东新区 电信
初级用户
积分 35
发帖 15
注册 2007-12-09 10:55
18年会员
UID 105123
性别 男
状态 离线
一直很疑惑,
难道在批处理中使用函数就只能够在本bat中使用吗?
不可以像Shell Script里面的.或source导入一样重用,
或者至少可以call lib.bat func args
这样使用吧?

请高手指点,谢谢。
2 发表于 2008-09-15 14:21 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
一个.bat
@echo off
call 另一个.bat hello

另一个.bat
@echo off
echo %1
pause
3 发表于 2008-09-15 14:39 ·  中国 上海 浦东新区 电信
初级用户
积分 35
发帖 15
注册 2007-12-09 10:55
18年会员
UID 105123
性别 男
状态 离线
是希望调用另一个bat中的函数,
也就是想实现函数库bat,将一些常用函数定义放里面。
然后以后需要在独立应用中用到函数时,直接导入定义或直接调用即可。

不知道有没有这种实现?
谢谢。
4 发表于 2008-09-15 15:08 ·  中国 广东 广州 白云区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
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-09-15 15:18
正在潜水修练的批处理小白
5 发表于 2008-09-15 15:12 ·  中国 上海 浦东新区 电信
初级用户
积分 35
发帖 15
注册 2007-12-09 10:55
18年会员
UID 105123
性别 男
状态 离线
当前也只能使用下面这种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 - 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----'
6 发表于 2008-09-15 15:15 ·  中国 上海 浦东新区 电信
初级用户
积分 35
发帖 15
注册 2007-12-09 10:55
18年会员
UID 105123
性别 男
状态 离线
4楼的方法真是太厉害了,
完全是思路上的层次啊,
非常感谢。
应该是解决了,困扰我好久的问题了,谢谢。
论坛跳转: