中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何在批处理文件内返回正在执行的批处理文件的地址
作者:
标题: 如何在批处理文件内返回正在执行的批处理文件的地址 上一主题 | 下一主题
yhsean
初级用户





积分 90
发帖 26
注册 2005-12-5
状态 离线
『楼 主』:  如何在批处理文件内返回正在执行的批处理文件的地址

假设在D:\HELLOW\有一文件    my.bat

如何在运行  my.bat 时候返回 MY.BAT的地址 D:\HELLOW\my.bat 供MY.BAT使用

2005-12-21 18:19
查看资料  发送邮件  发短消息 网志  OICQ (81422171)  编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

echo %cd%\my.bat

2005-12-21 19:31
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 3 楼』:  

批处理中用 %0 代表批处理自身。
%~f0 扩展到一个完整的路径名。



  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2005-12-21 20:03
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
yhsean
初级用户





积分 90
发帖 26
注册 2005-12-5
状态 离线
『第 4 楼』:  

re  bagpipe

兄的代码有局限性,批处理被另一个程序调用,同时被另一个程序将工作目录改为了它自己的工作目录

奈何兄可以说是扶着我走的,简直太感谢了,每进步一次都与奈何和斑竹分不开

在此感谢

2005-12-21 20:19
查看资料  发送邮件  发短消息 网志  OICQ (81422171)  编辑帖子  回复  引用回复
yhsean
初级用户





积分 90
发帖 26
注册 2005-12-5
状态 离线
『第 5 楼』:  

以上问题提出的背景是为了一次完成AWK程序,特贴出代码,将AWK脚本置于批处理文本中,无须单独建立AWK脚本

gawk "BEGIN{FS=\"\n\"};!(/gawk/||/:/||/^$/){print $1 }"  %~f0 > yh.awk

gawk -f yh.awk aa.TXT  &  del yh.awk&goto END


::AWK脚本定义
BEGIN { FS="\n"}
{
if ($1!~/R\|/) {
        if($1!~/T[0-9]+/){temp = (temp  $1 "\n")}

        }
else {
#                搜索第一块数字域  域开始值  域跨度值
        print match($1,/\|[0-9]+\|/),RSTART,RLENGTH
        name=substr($1,RSTART+1,RLENGTH-2)
        print match($1,/\|\..*Min.*\|/),RSTART,RLENGTH
        TIME=substr($1,RSTART+1,RLENGTH-2)
        print TIME
        sub("TIME",TIME,temp)
        print temp>name".txt"
        temp = ""
        }
}
::AWK脚本定义


:END

希望大家发表更好的办法

[ Last edited by yhsean on 2005-12-21 at 21:02 ]

2005-12-21 20:27
查看资料  发送邮件  发短消息 网志  OICQ (81422171)  编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 6 楼』:  

很高兴的看到咱们 DOS 联盟有了一批 AWK 的爱好者。

to yhsean

你的这个主意真的不错,用 AWK 创建自身需要的脚本。代码可否做一下以修改增加其通用性。
1、将 AWK 脚本设置开始、结束标示,方便解析。
2、调用脚本使用绝对路径
gawk "/^::AWK脚本定义开始/,/^::AWK脚本定义结束/{if ($0!~/^::AWK脚本定义(开始|结束)/)print $0 }"  "%~f0" > yh.awk
gawk -f "%~dp0yh.awk" aa.TXT &  del "%~dp0yh.awk"
goto END

::AWK脚本定义开始
BEGIN { FS="\n"}
{
if ($1!~/R\|/) {
        if($1!~/T[0-9]+/){temp = (temp  $1 "\n")}
        }
else {
#                搜索第一块数字域  域开始值  域跨度值
        print match($1,/\|[0-9]+\|/),RSTART,RLENGTH
        name=substr($1,RSTART+1,RLENGTH-2)
        print match($1,/\|\..*Min.*\|/),RSTART,RLENGTH
        TIME=substr($1,RSTART+1,RLENGTH-2)
        print TIME
        sub("TIME",TIME,temp)
        print temp>name".txt"
        temp = ""
        }
}
::AWK脚本定义结束

:END
[ Last edited by 无奈何 on 2005-12-21 at 21:42 ]



  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2005-12-21 21:39
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
yhsean
初级用户





积分 90
发帖 26
注册 2005-12-5
状态 离线
『第 7 楼』:  

个问题我研究过,对于"%~f0"中的双引号,将被CMD忽略   [刚发现需要这样写"”%~f0“"]
关于AWK脚本使用绝对路径,因为CMD脚本运行时是被另一个程序调用,同时被另一个程序将工作目录带到事先无法知道的目录上去,(在这个时候CMD已将这个目录视为当前目录,所以产生的AWK脚本方便的被GAWK找到),不过引用绝对路径,使程序更加符合人的思维习惯(感觉就是可靠)

另外,在引用%~f0参数的时候,最好用一个变量将其保持(色set p=%~f0,因为实际中,可能调用多个bat程序,调用第二个时候,%~f0将被第二个bat程序的位置取代,使得程序引用%~f0出现错误

[ Last edited by yhsean on 2005-12-22 at 12:35 ]

2005-12-22 09:27
查看资料  发送邮件  发短消息 网志  OICQ (81422171)  编辑帖子  回复  引用回复

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


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



论坛跳转: