|
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
状态 离线
|
|
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 |
|
|
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
状态 离线
|
|
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 |
|