中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [请教]如何获取绝对路径中文件名的最后一部分?[已解决]
« [1] [2] »
作者:
标题: [请教]如何获取绝对路径中文件名的最后一部分?[已解决] 上一主题 | 下一主题
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『楼 主』:  [请教]如何获取绝对路径中文件名的最后一部分?[已解决]

不会编程,对dos的批处理也不是很熟.想写个脚本真难.又遇到一个新问题:
我现在想获取包含绝对路径的文件名的最后一部分,请问批处理如何写?
比如:a:\c\E\b.txt(路径长度不固定,可能有很多层目录),现在我想建一个变量,让这个变量的值为b.txt,请问如何用批处理解决?

[ Last edited by yardian on 2006-10-19 at 11:24 ]

2006-10-19 01:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 2 楼』:  


@echo off
    set file=c:\abc\efg\xxx.xxx
    call :Print "%file%"
pause
goto :eof

:Print
    echo %~nx1
goto :eof
代码直接在回贴里面写的,未测试...

2006-10-19 01:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 3 楼』:  

谢谢!要的就是这种效果!

2006-10-19 02:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  3742668的代码可以简化一下:
@echo off
set file=c:\abc\efg\xxx.xxx
for /f "delimes=" %%i in ("%file%") do echo %%~nxi
pause
  发现了一个小bug,修正了一下,可以适应路径名为空格的情形。

[ Last edited by namejm on 2006-10-19 at 06:24 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-19 06:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lanlaila
新手上路





积分 6
发帖 3
注册 2006-10-18
状态 离线
『第 5 楼』:  

这里学习气氛真好,我要好好学习了

2006-10-19 06:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 6 楼』:  

真不错!

3742668版主是把文件路径用call转化成%1的变量, 为扩充到文件名和后缀名做准备.

而namejm版主直接使用for将文件路径转化成可替换变量, 再执行扩充.

2006-10-19 06:10
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 7 楼』:  


@echo off
    set file=x:\xxx\xxx\xxx.xxx
    set file=%file:\=\\%
    wmic datafile where "caption='%file%'" get filename,extension
pause

@echo off
    set file=x:\xxx\xxx\xxx.xxx
    set str=%file%
:loop
    set str=%str:*\=%
    echo %str% | findstr /i "\\" >nul && goto loop
    echo %file% ---^> %str%
pause
以上代码均未测试...

2006-10-19 07:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 8 楼』:  

大家都厉害,还是这里气氛好啊,多谢各位了

2006-10-19 07:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  

  7F的第二段代码可能是最通用的。把它扩展一下,就可以获取指定层次的文件夹名了。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-19 08:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 10 楼』:  


@echo off
    set file=x:\xxx\xxx\xxx.xxx
    set file=%file:\=" "%
    call :Get "%file%"
pause
goto :eof

:Get
    for %%i in (%*) do echo %%~i
goto :eof
通用还是要用上面的.

2006-10-19 08:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  

  10F的不能正确处理带空格的路径,而7F的可以处理;如果要获取指定层次的文件夹名的话,10F的更简洁一点,而7F的也可以实现,只是代码会长一点。如果从通用性上考虑的话,我还是觉得7F的才是真正的通用。

————————————————————————————————————
  经过再次测试证明,以上蓝色内容中关于10F的代码不能处理空格的言论严重失实,看来10F的才是真正的通用的。

  附上我的测试代码(意图:获取路径中第二层文件夹名;结果:不能正确获取指定层次的文件夹名):
@echo off
    set file=c:\ab c\def\gh .exe
    set file=%file:\=" "%
    call :Get "%file%"
pause
goto :eof

:Get
    for /f "tokens=2" %%i in (%*) do echo %%~i
goto :eof
[ Last edited by namejm on 2006-10-21 at 06:13 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-19 08:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  

Try...

2006-10-20 08:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 13 楼』:  

  呵呵,测试过了,确实能处理带空格的路径,但是不能正确获取空格路径中指定层次的文件夹名。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-21 01:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 14 楼』:  

NO What Is Cann't...(Chinese English)
@echo off
    set file=c:\ab c\def\gh .exe
    set file=%file:\=" "%
    call :Get 4 "%file%"
pause
goto :eof

:Get
    for /l %%i in (1,1,%1) do shift
    echo %~1
goto :eof


2006-10-21 01:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

  呵呵,版主表演得精彩……
  
  学习了。。。


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


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



论坛跳转: