中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 怎样在批处理文件里分别取得盘符和路径?谢谢!
« [1] [2] »
作者:
标题: 怎样在批处理文件里分别取得盘符和路径?谢谢! 上一主题 | 下一主题
Sororal
初级用户




积分 35
发帖 13
注册 2006-7-10
状态 离线
『楼 主』:  怎样在批处理文件里分别取得盘符和路径?谢谢!

打开批处理文件 book.bat 的路径是  E:\Tools\pub3

怎样获得这个  E:\Tools\pub3

又怎样从中取得  E:  和  Tools\pub3  

谢谢啦!

2006-11-16 09:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
0451lym
高级用户





积分 760
发帖 357
注册 2005-10-10
状态 离线
『第 2 楼』:  

有个小命令好象是DIRT.COM可以满足你的要求!

2006-11-16 12:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 3 楼』:  


  如果是CMD批处理文件的话,可以在文件中加入以下代码试试:
echo 此文件的完整路径是: %cd%\
echo 此文件所在盘符为: %cd:~0,2%
echo 此文件的路径为: %cd:~3%
pause


2006-11-16 16:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Sororal
初级用户




积分 35
发帖 13
注册 2006-7-10
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by lxmxn at 2006-11-16 16:16:

  如果是CMD批处理文件的话,可以在文件中加入以下代码试试:
[code]
echo 此文件的完整路径是: %cd%\
echo 此文件所在盘符为: %cd:~0,2 ...

谢谢 lxmxn 兄!

在 XP 系统中通过,

在 MS-DOS 中,显示是空的。我是想在纯 DOS 中使用。

请再想想办法,谢谢啦!

2006-11-16 22:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Sororal
初级用户




积分 35
发帖 13
注册 2006-7-10
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by 0451lym at 2006-11-16 12:51:
有个小命令好象是DIRT.COM可以满足你的要求!

谢谢 0451lym 兄!

没搜索到 DIRT.COM ,

给发一个好吗  Sororal@21cn.com

谢谢啦!

2006-11-16 22:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 6 楼』:  

如果批处理在搜索路径中(而不是当前目录下),恐怕lxmxn兄的解决方案也是无效的。

纯dos环境有一个fpath的命令,就是用来查找当前命令所在的路径。但对其结果还要再进行处理才能分离出其中的盘符和路径。

http://nufans.net/clone/dostools/fpath.com



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-11-16 22:46
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
Sororal
初级用户




积分 35
发帖 13
注册 2006-7-10
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by Climbing at 2006-11-16 22:46:
如果批处理在搜索路径中(而不是当前目录下),恐怕lxmxn兄的解决方案也是无效的。

纯dos环境有一个fpath的命令,就是用来查找当前命令所在的路 ...

谢谢 解兄!

还得麻烦您教我具体的用法。谢谢啦!

2006-11-16 23:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 8 楼』:  

如果不考虑复杂情况的话,你的这个问题可以说就是一个字符串处理的问题。可以用 4DOS 的 @instr 变量函数

@instr[0,2,E:\Tools\pub3]
提取出 "E:" 字符串

@instr[3,,E:\Tools\pub3]
提取出 "Tools\pub3" 字符串



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-11-17 00:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Sororal
初级用户




积分 35
发帖 13
注册 2006-7-10
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by DOSforever at 2006-11-17 00:16:
如果不考虑复杂情况的话,你的这个问题可以说就是一个字符串处理的问题。可以用 4DOS 的 @instr 变量函数

@instr[0,2,E:\Tools\pub3]
提取出 "E:" � ...

谢谢 DOSforever 兄!

不过,Book.bat 不一定就在 E:\Tools\pub3 中,也可能在其他目录里,

所以,E:\Tools\pub3 要先求得。

2006-11-17 01:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 10 楼』:  

如果这样的话,那我还没明白你的要求。你到底要干什么?你的意思是说要让一个 BATCH 自动去找到 Book.bat 所在的 E:\Tools\pub3 或其它目录的路径?



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-11-17 02:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
0451lym
高级用户





积分 760
发帖 357
注册 2005-10-10
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by Sororal at 2006-11-16 22:21:


谢谢 0451lym 兄!

没搜索到 DIRT.COM ,

给发一个好吗  Sororal@21cn.com

谢谢啦!

DIRT使用说明如下:




Dirt.COM FileName.Ext                   (Ver 1.15)
        [/D:[+|-]([YYYY-MM-DD]|[(+|-days)])] [/T:[+|-]HH:MM:SS] [/L:NN] [/W] [/Q]
        [/DIR:DirName] [/Out2Env] [/Time:(furthest|latest)] [/ClearEnv]


注意:本程序的设置环境变量的功能,在下面这些系统中无法正常运行。

        winXP,win2000,还有在Virtual PC中虚拟的任何系统



    无论是否找到符合条件的文件,Dirt.COM在退出的时候,都会设置
环境变量DirtRet:Fail表示没有找到文件,Success表示找到文件。


=====================================================
Ver 1.15
更新日期  2005-11-07


升级说明:

(1)、修正上一版本在“不带路径和文件名”搜索时直接从根目录
        查找的错误。

(2)、给原先的参数[/D:[+|-]YYYY-MM-DD]增加自动计算日期的功能。

例子:

Rem 找昨天修改过的所有文件
dirt *.* /d:(-2)


在最后面那个有点长的例子,因为现在增加了“自动计算日期”的功能,
所以可以简化成下面这样:

@echo off
rem ============================================
rem 这个批处理的作用是删除d:\datafile里面
rem 最后一次修改是7天之前(不包括7天)的
rem 所有文件(包括所有子目录里的文件)
rem ============================================

attrib/s d:\datafile\*.* -h -r -s
:Loop
dirt.com /d:-(-7) d:\datafile\*.* /q
if %DirtRet%==Fail goto end
del %FPath%\%FName%
goto Loop

:end
=====================================================
Ver 1.14
更新日期  2005-10-29


升级说明:

(1)、修正上一版本在根目录搜索时找不到任何文件的错误。

(2)、给[/DIR:DirName]的功能增加带返回码退出的功能。
        这样就能在2000或xp中使用该功能。目录存在,返回1,
        不存在,返回0。

例子:

判断是否存在d:\aa,如果不存在就建立,并进入

@echo off
dirt /dir:d:\aa
if errorlevel 1 goto exist
echo make d:\aa
md d:\aa

:exist
cd d:\aa

=====================================================
Ver 1.13
更新日期  2005-10-14


升级说明:

(1)、修正上一版本中对“*.*”的错误分析。


(2)、增加参数[/Out2Env]

        将找到的前10个文件保存下面的环境变量中
        O2E_DriverX,O2E_PathX,O2E_FNameX
        分别保存盘符、路径、文件名,其中最后的X是序号,
        由0至9代替,如果查找的是目录,则不会设置O2E_FNameX

(3)、增加参数[/Time:(furthest|latest)]

        在查找到的文件或目录里,一个找出时间是最早或最晚的,
        并保存下面的环境变量中,FPath,FName
        furthest是查找时间是最早的文件或目录
        latest则相反

(4)、增加参数[/ClearEnv]
        Dos系统的主环境变量列表的长度有限,因此,要学会清理垃圾。
        该功能就是清除由该程序产生的所有环境变量。

        (注:由该程序产生的环境变量,无法用Dos的Set命令
        清除或修改,因为Set命令不支持带有小写字母的变量名)

例子:

rem 查找D:下修改时间最晚的文件,并显示出来
dirt d:\*.* /time:latest
echo %FPath%\%FName%

rem 查找D:下创建时间最早的目录,并显示出来
dirt d:\*.*\ /time:furthest
echo %FPath%

=====================================================
Ver 1.12
更新日期  2005-09-22


升级说明:

(1)、改正“搜索路径分析”中一些错误。


(2)、增加文件夹搜索的功能。支持除[/DIR:DirName]之外的
        所有参数。

        但它找的是目录的“创建时间”,跟查找文件不同(查找文件是
        按文件的“修改时间”),所以当目录被改名后,它的创建时间
        不会改变。

        在快捷模式[/Q]中,将向环境变量FPath中写入包含要搜索
        的文件夹在内的全路径,而不会设置FName

        用法是:在路径最后加上斜杆,具体方法看下面的例子

例子:

dirt d:\ghost8\ /q
在D盘搜索一个叫“ghost8”的文件夹,如果找到就进入

@echo off
rem 注意ghost8后面一定要加上\
rem 不然就会变成是搜索文件
dirt d:\ghost8\ /q
if [%DirtRet%]==[Fail] goto notexist
cd %FPath%
goto end

:notexist
echo        没有找到该目录

:end
=====================================================
Ver 1.11
更新日期  2005-09-18


新增功能介绍:

[/DIR:DirName]
判断某个文件夹是否存在,并设置环境变量Dir:Exist表示存在,
NotExist表示不存在

例子:

判断是否存在d:\aa,如果不存在就建立,并进入

@echo off
dirt /dir:d:\aa
if [%Dir%]==[Exist] goto exist
md d:\aa

:exist
cd d:\aa



=====================================================
Ver 1.1

新增功能介绍:

无论是否找到符合条件的文件,Dirt.COM在退出的时候,都会设置
环境变量DirtRet:Fail表示没有找到文件,Success表示找到文件。

在该版本中,还修正了1.0版中参数位置不能随意改变的错误。


[/W]
作用跟dir命令的/w一样,每行显示5个文件名。


[/Q]
开启快捷模式,只要找到有一个符合条件的文件,立即结束查找。
并且会在环境变量FPath和FName中,分别写进文件路径和文件名。


另外,该程序现在编译成.com文件,它的体积比原先的dirt.exe
小了一半。
=====================================================
例子:

找出D盘中的Tc.exe文件,如果找到就直接运行,并打开D盘
根目录下的文件try.c,如果没有找到就显示提示信息。

@echo off
Dirt d:\tc.exe /Q
if %DirtRet%==Fail goto NoFind

d:
cd %fpath%
%fname% d:\try.c
goto quit

:NoFind
echo.
echo.
echo                        在D盘没有找到tc.exe

:quit



=====================================================
Ver 1.0 的功能:

[/D:[+|-]YYYY-MM-DD]
指定日期,必须够位数,如:
/d:2004-05-01  不能写成  /d:2004-5-1
里面的[+|-] 是只比该日期更晚或更早
如:/d:-2004-05-01  搜索2004-05-01以前的文件

[/T:[+|-]HH:MM:SS]
参考日期格式

时间和日期可以一起使用


[/L:NN]
搜索子目录的最多的层数,最多为两为数(即99),
/L:0 不搜索子目录
默认为所有层





====================================================
另一个例子:


@echo off

rem ============================================
rem 这个批处理的作用是删除d:\datafile里面
rem 最后一次修改是7天之前(不包括7天)的
rem 所有文件(包括所有子目录里的文件)
rem ============================================



rem ============================================
rem 得到7天前的日期
rem 如果今天是8月25,则7天前是日期是 8月18日
rem ============================================
GetInfo.COM /d:-7
set theDay=%year%-%mon%-%day%



rem ============================================
rem   这是在D:\datafile中搜索8天前(含8天)修改过的文件
rem  即8月17日 及 之前 修改的文件
rem ============================================
attrib/s d:\datafile\*.* -h -r -s
:Loop
dirt.com /d:-%theDay% d:\datafile\*.* /q
if %DirtRet%==Fail goto end
del %FPath%\%FName%
goto Loop

:end

附件 1: Dirt.zip (2006-11-17 04:48, 15.92 K, 下载附件所需积分 1 点 ,下载次数: 41)
2006-11-17 04:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
0451lym
高级用户





积分 760
发帖 357
注册 2005-10-10
状态 离线
『第 12 楼』:  

另外一个同一作者的小软件非常实用,但是可惜的是不能清除变量!

GetInfo.COM [/T] [/C] [/D:+|-days] [/G:n,filename] [/Cmp:x,y]      ver 1.2

/T   Get current date and time.
     And It will modify follow environment variable.
     year,mon,day,wday
     hour,min,sec

/C   Get the first CDRom.
     And It will modify follow environment variable.
     CDRom

/D   It will modify follow environment variable.
     year,mon,day,wday

/G:n,filename
     Get the String from the text file.
     The String must be short then 2048 Byte!
     It will modify follow environment variable.
     GetString,TheString

/Cmp:x,y
     x=y  return 0
     x<y  return 1
     x>y  return 2


=====================================================
版本 1.2        更新日期:2005-10-16

功能介绍:

[/Cmp:x,y]
        比较两个数,并返回一个数值
        x=y  return 0
        x<y  return 1
        x>y  return 2

例子:


比较12和13,并显示结果
@echo off
getinfo /cmp:12,13
if errorlevel 2 goto big
if errorlevel 1 goto small
if errorlevel 0 goto equ
goto end

:big
echo x bigger than y
goto end

:small
echo x smaller than y
goto end

:equ
echo x = y

:end



判断今天的日期是否跟设定的日期相同
@echo off
getinfo /t
set today=%Year%%Mon%%Day%
getinfo /cmp:%today%,20051016
if errorlevel 2 goto big
if errorlevel 1 goto small
if errorlevel 0 goto equ
goto end

:big
echo 已过了设定的日期
goto end

:small
echo 还没有到设定的日期
goto end

:equ
echo 今天就是设定的日期

:end




=====================================================
版本 1.1        更新日期:2005-06-24

功能介绍:


[/T]
取得当前系统的日期和时间,并设置下列环境变量。
year:年     mon:月     day:日      wday:星期几(星期天是7)
hour:时     min:分     sec:秒


[/C]
取得第一个光驱的盘符,并设置环境变量CDRom。
如果有光驱,设置为光驱的盘符。
如果没有光驱,设置为NoCDRom


[/D:+|-days]
将当前系统的日期与所指定的days进行计算,得到另一个日期,并设置下列环境变量。
year:年     mon:月     day:日      wday:星期几(星期天是7)

例子:
GetInfo.com /d:-1        得到昨天的日期
GetInfo.com /d:+1        得到明天的日期


[/G:n,filename]
从指定的文本文件里面,取得第n行的内容,将内容保存在TheString中,
如果该行的字符串长度大于2048个字符,就只取2048个字符。
成功时GetString=TRUE,否则,GetString=FALSE

例子:
GetInfo.com /g:5,D:\A.TXT        得到D:\A.TXT中第5行的内容



另外,该程序现在编译成.com文件,它的体积比原先的GetInfo.exe
小了一半。

附件 1: Getinfo.zip (2006-11-17 04:52, 13.14 K, 下载附件所需积分 1 点 ,下载次数: 23)
2006-11-17 04:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Sororal
初级用户




积分 35
发帖 13
注册 2006-7-10
状态 离线
『第 13 楼』:  

谢谢 0451lym 兄!

认真学习学习。

2006-11-17 05:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lizaoyou
中级用户




积分 210
发帖 85
注册 2007-1-14
来自 广东广州
状态 离线
『第 14 楼』:  

GetInfo 1.21 已能清除自建变量

http://www.sendsong.cn/soft/

2007-1-30 12:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zybird
中级用户




积分 240
发帖 53
注册 2005-1-21
状态 离线
『第 15 楼』:  

dirt.com

Ver 1.16  (只是一点点改进,没有增加功能)
更新日期  2007-01-01


升级说明:

当dirt工作时,按Esc,马上退出。

我在实际使用中,很多次,当dirt在搜索文件或目录时,我突然想到解决问题的方法,
想立即终止dirt当前的工作,但用Ctrl+C,或Ctrl+Break都没有效果,很郁闷。
在windows中的Dos命令行使用,则随时可以用Ctrl+Break终止,而纯dos则不行。

所以,我给dirt.com增加了随时退出的功能。



下载网址
http://www.sendsong.cn/soft/

2007-2-1 01:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: