折腾了大半个晚上,总算找着了这个问题的解决方案。
答案看上去是非常简单的,只要对dos命令略有研究的人应该很容易想到,可是对于我这样头次正面接触dos的人而言,可是花了九牛二虎之力!
要从一个完整的路径,比如/a/b/c/d/name.txt中获得其中的name.txt字段,其实只需要用到call 或for 命令独有的参数解析功能即可。我自己用的是call命令,如下所示:
Rem:full_name是完整路径,name是所要提取的文件名字段
call :getname %full_name
:getname
set name=%~n1
:getname
set name=%~n1
看上去非常简单,对于call和for命令而言,可以将输入给它们的参数做一些特殊的解析。对该功能的演示有更好的例子:
@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
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
该批处理例子示范了如何从一个输入的完整路径名,分别取得盘符、目录和文件名。