中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-10 05:51
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]有没有变量是可以直接获得当前目录名(不含路径) 查看 1,084 回复 10
楼 主 [已结]有没有变量是可以直接获得当前目录名(不含路径) 发表于 2008-07-03 09:01 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 38
发帖 14
注册 2007-03-27 01:30
19年会员
UID 83007
性别 男
状态 离线
请问有没有变量是可以直接获得当前目录名(不含路径)

[ Last edited by HAT on 2008-10-28 at 21:01 ]
2 发表于 2008-07-03 09:08 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
set curpath=%~p0
set curpath=%curpath:\=%
echo %curpath%
3 发表于 2008-07-03 11:33 ·  IANA 局域网IP(Private-Use)
初级用户
积分 65
发帖 29
注册 2008-03-24 12:17
18年会员
UID 113853
性别 男
状态 离线
啊。。。看了HAT的代码才知道 %0 也可以直接拿来这样扩展的,受教了。

不过HAT的代码似乎对于二级以上的路径有问题,会把整个路径里面的\去除后连在一起。

我之前搞过一个剥取当前路径的批处理,代码比较啰嗦,不知道有没有更简洁的方法:

@echo off
set curpath=%~p0

:loop
for /f "tokens=1* delims=\" %%i in ('echo %curpath%') do (
set a=%%i
set b=%%j
)
set curpath=%b%
echo %b% | find /i "\" > nul
if errorlevel 1 goto ok
if errorlevel 0 goto loop
:ok
echo %a%
4 发表于 2008-07-03 11:33 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
直接的变量没有,必须进行处理。

@echo off
call :loop "%~dp0"
pause
:loop
for /f "tokens=1* delims=\" %%a in ("%~1") do (
if "%%b"=="" (echo %%a) else call :loop "%%b"
)
goto :eof



@echo off
set "var=%cd%"
:loop
set "var1=%var:*\=%"
set "var=%var1%"
if not "%var1%"=="%var:\=%" goto loop
echo %var1%
pause


[ Last edited by 26933062 on 2008-7-3 at 11:47 AM ]
致精致简!
5 发表于 2008-07-03 12:03 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
for %%a in ("%~f0\..") do echo 文件的父文件夹 %%~nxa
6 发表于 2008-07-03 12:07 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
5楼的方法在根目录下会没有显示
致精致简!
7 发表于 2008-07-03 12:46 ·  中国 安徽 马鞍山 电信
中级用户
★★
拟谷盗
积分 312
发帖 108
注册 2007-01-21 11:36
19年会员
UID 77238
性别 男
状态 离线
for /f "delims=" %a in ("%cd%") do echo %~na
FLOSS
8 发表于 2008-07-03 13:12 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 38
发帖 14
注册 2007-03-27 01:30
19年会员
UID 83007
性别 男
状态 离线
多谢各位前辈
9 发表于 2008-07-03 15:26 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@echo off
for /f "delims=" %%a in ("%cd%") do if "%%~na"=="" (echo %%~dpa)else echo %%~na
pause
简单!简单!再简单!
10 发表于 2008-07-05 00:19 ·  中国 河南 郑州 联通
初级用户
★★
积分 161
发帖 56
注册 2007-10-01 00:42
18年会员
UID 98672
性别 男
状态 离线
@echo off
echo %~nx0
pause
11 发表于 2008-10-28 18:56 ·  中国 广东 茂名 电信
初级用户
积分 42
发帖 23
注册 2006-02-13 04:23
20年会员
UID 50270
状态 离线
cls
setlocal enabledelayedexpansion
for /f "tokens=1,2* delims=\" %%i in ('echo %~p0') do (
set pathtemp=%%i
if not "%%j"=="" set pathtemp=%%j
echo !pathtemp!
)

处理两层路径的代码 需要再改
我是allyesno 帐号忘记密码了 妈的
论坛跳转: