中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教:如何从一个输入的完整路径名,分别取得盘符、目录
作者:
标题: 请教:如何从一个输入的完整路径名,分别取得盘符、目录 上一主题 | 下一主题
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『楼 主』:  请教:如何从一个输入的完整路径名,分别取得盘符、目录

请教:如何从一个输入的完整路径名,分别取得盘符、目录和文件。
比如,通过键盘输入"f:\12\3456\789.bat",赋给一个变量a,然后从a获得盘符给变量b,目录12\3456给c,789.bat给变量d。
这功能如何实现?谢谢。

2006-11-25 11:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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


@ECHO OFF
SET/P FILEPATH=请输入你的完整路径:
if not defined FILEPATH goto :EOF
for,/f,"tokens=*",%%i,in,(%FILEPATH%),do,(
                 set a=%%~di
                 set b=%%~pi
                 set c=%%~nxi
)
echo %a%
echo %b%
echo %c%
pause


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





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 3 楼』:  

多谢回复。可能是我没说清楚。
并不是硬盘上在我输入的完整路径上,存在那个文件。只是把输入的作为一个变量,然后分别获得盘符,路径及文件名赋给其它变量。
相当于 set a=e:\12\3456\789.bat
我想得到:b=e:
               c=\12\3456\
               d=789.bat

2006-11-25 11:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 4 楼』:  

多谢,可以了,我加了引号就行了。,(%FILEPATH%)改成,(“%FILEPATH%”)
再次感谢。
实在不好意思,这段代码我看不明白,能不能麻烦你给解释一下?

[ Last edited by lianjiang2004 on 2006-11-25 at 11:59 AM ]

2006-11-25 11:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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


  Re : lianjiang2004

  这段批处理工作原理:

  首先用"set/p"来接受用户的键盘输入,然后将其输入的值赋给变量"FILEPATH",再利用for命令来分析刚刚输入的字符串,即%FILEPATH%的值,依次将它的各个属性赋值给a、b、c,然后显示变量a、b、c的值。

  如果对for命令还不怎么熟悉,可以看看for的帮助文档,也可以搜索一下论坛里面的好文章,多看几遍。


   此帖被 +3 点积分     点击查看详情   
评分人:【 redtek 分数: +3  时间:2006-11-25 21:20


2006-11-25 13:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 6 楼』:  

感觉for好复杂,也很厉害。现在只知道点皮毛。目前只会象下面这种。一定好好学习。有问题,再请教。
--------------------
REM 根据设定文件的盘符+路径文件名(如e:\123\45\sys.gho),变成分区号+路径文件名(1:5:\123\45\sys.gho)。
    for /f "delims=: tokens=1,2" %%i in (tools\set.ini) do (
        set drive=%%i
        set "the_path=%%j"
    )

for /f "tokens=2-3" %%i in ('type c:\GHSTSTAT.TXT ^| find "Desc"') do (
        if /i "%%i"=="%drive%:" set partition=%%j
)
echo.
echo 当前设置为:%drive%:%the_path%  即%partition%:%the_path%

[ Last edited by lianjiang2004 on 2006-11-25 at 09:05 PM ]

2006-11-25 21:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 7 楼』:  

lxmxn兄的讲解真是热情、耐心,向lxmxn学习~:)
普天之下、cn-dos.net之上就需要像lxmxn兄这么热心的人,创造和谐社会、和谐论坛~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-25 21:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 8 楼』:  



  Quote:
cn-dos.net之上就需要像lxmxn兄这么热心的人,创造和谐社会、和谐论坛~:)

呵呵,其实 redtek 也很热心的嘛




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-11-26 01:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 9 楼』:  

赞!各位都是古道热肠。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-11-26 01:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yuan53770
初级用户





积分 67
发帖 40
注册 2007-11-5
状态 离线
『第 10 楼』:  

for命令真是要好好看看的,我也是刚看了

2010-10-3 00:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sxychxj
新手上路





积分 5
发帖 4
注册 2010-9-21
状态 离线
『第 11 楼』:  

看的迷糊

2010-10-5 10:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: