标题: 怎样在批处理文件里分别取得盘符和路径?谢谢!
[打印本页]
作者: Sororal
时间: 2006-11-16 09:02
标题: 怎样在批处理文件里分别取得盘符和路径?谢谢!
打开批处理文件 book.bat 的路径是 E:\Tools\pub3
怎样获得这个 E:\Tools\pub3
又怎样从中取得 E: 和 Tools\pub3
谢谢啦!
作者: 0451lym
时间: 2006-11-16 12:51
有个小命令好象是DIRT.COM可以满足你的要求!
作者: lxmxn
时间: 2006-11-16 16:16
如果是CMD批处理文件的话,可以在文件中加入以下代码试试:
echo 此文件的完整路径是: %cd%\
echo 此文件所在盘符为: %cd:~0,2%
echo 此文件的路径为: %cd:~3%
pause
作者: Sororal
时间: 2006-11-16 22:10
Quote: |
Originally posted by lxmxn at 2006-11-16 16:16:
如果是CMD批处理文件的话,可以在文件中加入以下代码试试:
[code]
echo 此文件的完整路径是: %cd%\
echo 此文件所在盘符为: %cd:~0,2 ... |
|
谢谢 lxmxn 兄!
在 XP 系统中通过,
在 MS-DOS 中,显示是空的。我是想在纯 DOS 中使用。
请再想想办法,谢谢啦!
作者: Sororal
时间: 2006-11-16 22:21
Quote: |
Originally posted by 0451lym at 2006-11-16 12:51:
有个小命令好象是DIRT.COM可以满足你的要求! |
|
谢谢 0451lym 兄!
没搜索到 DIRT.COM ,
给发一个好吗
Sororal@21cn.com
谢谢啦!
作者: Climbing
时间: 2006-11-16 22:46
如果批处理在搜索路径中(而不是当前目录下),恐怕lxmxn兄的解决方案也是无效的。
纯dos环境有一个fpath的命令,就是用来查找当前命令所在的路径。但对其结果还要再进行处理才能分离出其中的盘符和路径。
http://nufans.net/clone/dostools/fpath.com
作者: Sororal
时间: 2006-11-16 23:10
Quote: |
Originally posted by Climbing at 2006-11-16 22:46:
如果批处理在搜索路径中(而不是当前目录下),恐怕lxmxn兄的解决方案也是无效的。
纯dos环境有一个fpath的命令,就是用来查找当前命令所在的路 ... |
|
谢谢 解兄!
还得麻烦您教我具体的用法。谢谢啦!
作者: DOSforever
时间: 2006-11-17 00:16
如果不考虑复杂情况的话,你的这个问题可以说就是一个字符串处理的问题。可以用 4DOS 的 @instr 变量函数
@instr[0,2,E:\Tools\pub3]
提取出 "E:" 字符串
@instr[3,,E:\Tools\pub3]
提取出 "Tools\pub3" 字符串
作者: Sororal
时间: 2006-11-17 01:51
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 要先求得。
作者: DOSforever
时间: 2006-11-17 02:04
如果这样的话,那我还没明白你的要求。你到底要干什么?你的意思是说要让一个 BATCH 自动去找到 Book.bat 所在的 E:\Tools\pub3 或其它目录的路径?
作者: 0451lym
时间: 2006-11-17 04:48
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)
作者: 0451lym
时间: 2006-11-17 04:52
另外一个同一作者的小软件非常实用,但是可惜的是不能清除变量!
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)
作者: Sororal
时间: 2006-11-17 05:59
谢谢 0451lym 兄!
认真学习学习。
作者: lizaoyou
时间: 2007-1-30 12:42
GetInfo 1.21 已能清除自建变量
http://www.sendsong.cn/soft/
作者: zybird
时间: 2007-2-1 01:44
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/
作者: chujiafu
时间: 2007-2-1 23:11
没搞懂楼主要干什么?
作者: zybird
时间: 2007-2-2 08:06
@echo off
Dirt e:\book.bat /Q
if %DirtRet%==Fail goto NoFind
echo "book.bat" is at %fpath%
goto quit
:NoFind
echo.
echo.
echo book.bat not found at E:
:quit
作者: llztt
时间: 2007-2-7 04:07
这个问题楼上几位误解了
举个例子,都知道设置好了PATH路径后,任意位置就可以键入某个在PATH路径范围内的批处理时就可以运行之,如何修改这个批处理,添加一个功能,在这个批处理运行时首先显示其自己的路径???
楼上几位都用搜索功能来找出这个批处理然后得出其路径,如果有几个同名文件呢,那就不好搞了吧。。
作者: 0451lym
时间: 2007-2-7 06:02
cls
ECHO 正在搜索文件......
DIRT /CLEARENV>NUL
:00
IF "%CZFQ%" == "" set CZFQ=C>NUL
GOTO CZ
:c
set CZFQ=D>NUL
GOTO CZ
:D
set CZFQ=E>NUL
GOTO CZ
:E
set CZFQ=F>NUL
GOTO CZ
:F
set CZFQ=G>NUL
GOTO CZ
:G
set CZFQ=H>NUL
GOTO CZ
:H
set CZFQ=I>NUL
GOTO CZ
:I
set CZFQ=J>NUL
GOTO CZ
:J
set CZFQ=K>NUL
GOTO CZ
:K
set CZFQ=L>NUL
GOTO CZ
:L
set CZFQ=M>NUL
GOTO CZ
:M
set CZFQ=N>NUL
GOTO CZ
:N
set CZFQ=O>NUL
GOTO CZ
:O
set CZFQ=P>NUL
GOTO CZ
:P
set CZFQ=Q>NUL
GOTO CZ
:Q
set CZFQ=R>NUL
GOTO CZ
:R
set CZFQ=S>NUL
GOTO CZ
:S
set CZFQ=T>NUL
GOTO CZ
:T
set CZFQ=U>NUL
GOTO CZ
:U
set CZFQ=V>NUL
GOTO CZ
:V
set CZFQ=W>NUL
GOTO CZ
:W
set CZFQ=>NUL
GOTO TC
:cz
dirt %CZFQ%:\%CZWJ% /L:%ZML% /Out2Env>NUL
IF "%O2E_FName0%" == "" GOTO %CZFQ%
:CZ1
IF not "%O2E_FName0%" == "" GOTO WJBL0
IF not "%O2E_FName1%" == "" GOTO WJBL1
IF not "%O2E_FName2%" == "" GOTO WJBL2
IF not "%O2E_FName3%" == "" GOTO WJBL3
IF not "%O2E_FName4%" == "" GOTO WJBL4
IF not "%O2E_FName5%" == "" GOTO WJBL5
IF not "%O2E_FName6%" == "" GOTO WJBL6
IF not "%O2E_FName7%" == "" GOTO WJBL7
IF not "%O2E_FName8%" == "" GOTO WJBL8
IF not "%O2E_FName9%" == "" GOTO WJBL9
GOTO %CZFQ%
:WJBL0
SET WJBL=%O2E_Driver0%\%O2E_Path0%\%O2E_FName0%
myset O2E_Driver0=>NUL
myset O2E_Path0=>NUL
myset O2E_FName0=>NUL
GOTO CZ2
:WJBL1
SET WJBL=%O2E_Driver1%\%O2E_Path1%\%O2E_FName1%
myset O2E_Driver1=>NUL
myset O2E_Path1=>NUL
myset O2E_FName1=>NUL
GOTO CZ2
:WJBL2
SET WJBL=%O2E_Driver2%\%O2E_Path2%\%O2E_FName2%
myset O2E_Driver2=>NUL
myset O2E_Path2=>NUL
myset O2E_FName2=>NUL
GOTO CZ2
:WJBL3
SET WJBL=%O2E_Driver3%\%O2E_Path3%\%O2E_FName3%
myset O2E_Driver3=>NUL
myset O2E_Path3=>NUL
myset O2E_FName3=>NUL
GOTO CZ2
:WJBL4
SET WJBL=%O2E_Driver4%\%O2E_Path4%\%O2E_FName4%
myset O2E_Driver4=>NUL
myset O2E_Path4=>NUL
myset O2E_FName4=>NUL
GOTO CZ2
:WJBL5
SET WJBL=%O2E_Driver5%\%O2E_Path5%\%O2E_FName5%
myset O2E_Driver5=>NUL
myset O2E_Path5=>NUL
myset O2E_FName5=>NUL
GOTO CZ2
:WJBL6
SET WJBL=%O2E_Driver6%\%O2E_Path6%\%O2E_FName6%
myset O2E_Driver6=>NUL
myset O2E_Path6=>NUL
myset O2E_FName6=>NUL
GOTO CZ2
:WJBL7
SET WJBL=%O2E_Driver7%\%O2E_Path7%\%O2E_FName7%
myset O2E_Driver7=>NUL
myset O2E_Path7=>NUL
myset O2E_FName7=>NUL
GOTO CZ2
:WJBL8
SET WJBL=%O2E_Driver8%\%O2E_Path8%\%O2E_FName8%
myset O2E_Driver8=>NUL
myset O2E_Path8=>NUL
myset O2E_FName8=>NUL
GOTO CZ2
:WJBL9
SET WJBL=%O2E_Driver9%\%O2E_Path9%\%O2E_FName9%
myset O2E_Driver9=>NUL
myset O2E_Path9=>NUL
myset O2E_FName9=>NUL
GOTO CZ2
:CZ2
IF "%WJ1%" == "" GOTO WJ1
IF "%WJ2%" == "" GOTO WJ2
IF "%WJ3%" == "" GOTO WJ3
IF "%WJ4%" == "" GOTO WJ4
IF "%WJ5%" == "" GOTO WJ5
IF "%WJ6%" == "" GOTO WJ6
IF "%WJ7%" == "" GOTO WJ7
IF "%WJ8%" == "" GOTO WJ8
IF "%WJ9%" == "" GOTO WJ9
IF "%WJ10%" == "" GOTO WJ10
GOTO TC
:WJ1
SET WJ1=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:WJ2
SET WJ2=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:WJ3
SET WJ3=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:WJ4
SET WJ4=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:WJ5
SET WJ5=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:WJ6
SET WJ6=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:WJ7
SET WJ7=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:WJ8
SET WJ8=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:WJ9
SET WJ9=%WJBL%
SET WJBL=>NUL
GOTO CZ1
GOTO %CZFQ%
:WJ10
SET WJ10=%WJBL%
SET WJBL=>NUL
GOTO CZ1
:TC
DIRT /CLEARENV>NUL
SET CZWJ=>NUL
SET ZML=>NUL
set CMDLINE=>NUL
作者: 0451lym
时间: 2007-2-7 06:54
千万别照搬,因为有个小小的错误,是使用上的.
这个.........
作者: zybird
时间: 2007-2-8 11:34
Quote: |
Originally posted by llztt at 2007-2-7 04:07 AM:
楼上几位都用搜索功能来找出这个批处理然后得出其路径,如果有几个同名文件呢,那就不好搞了吧。。 |
|
dirt.com最大的特点就是支持用文件的”创建/修改的日期“或”创建/修改的时间“来搜索指定的文件,
所以,如果你要找的批处理文件名和“时间或日期”知道的话,就可以用dirt的日期或时间搜索功能,这样搞错的几率非常低
作者: llztt1
时间: 2007-2-8 12:11
很遗憾,这个功能需要的是通用性,针对泛泛类的,千万别指望记住这批处理的属性。。。
作者: jzzys
时间: 2007-4-9 05:27
标题: dirt.com ,dos下判断目录路径的好工具
我正需要这样的软件和教程,感谢0451lym这位仁兄
作者: jeffery319
时间: 2007-6-28 10:20
学习一下,正好要用到这个功能
作者: shaojun
时间: 2007-7-2 22:08
标题: 希望能够下载dirt.com.and getinfo.com tools for me
希望能够下载dirt.com.and getinfo.com tools for me
作者: zjd713
时间: 2010-2-24 01:23
GetInfo 1.21下载不了啊