Board logo

标题: 批处理获取当前目录名 [打印本页]

作者: foxJL    时间: 2008-3-27 14:09     标题: 批处理获取当前目录名

如本批处理所在的当前目录是:"C:\Documents and Settings\All Users"
要求只显示当前目录名:All Users
作者: 梦想种子    时间: 2008-3-29 16:09

  1. @echo off
  2. call :get "%cd%"
  3. pause>nul
  4. exit
  5. :get
  6. echo %~n1
复制代码

[ 本帖最后由 梦想种子 于 2008-3-29 20:55 编辑 ]
作者: foxJL    时间: 2008-3-29 21:11

参考二楼兄弟的思路:
  1. @echo off
  2. for %%i in ("%cd%") do echo %%~ni
  3. pause
复制代码
笨方法:
  1. @echo off
  2. set a=%cd: =:%
  3. set a=%a:\= %
  4. for %%j in (%a%) do (set a=%%j)
  5. set a=%a::= %
  6. echo %a%
  7. pause
复制代码

作者: youxi01    时间: 2008-3-29 21:29

呵呵,笨办法还有
  1. @echo off
  2. set "path=C:\Documents and Settings\All Users"
  3. for /l %%i in (1 1 10) do call set "path=%%path:*\=%%"
  4. echo %path%
  5. pause>nul
复制代码

作者: youxi01    时间: 2008-3-29 21:33     标题: 再来一个

  1. @echo off
  2. set "path=C:\Documents and Settings\All Users"
  3. set "path=%path: =#%"
  4. set "path=%path:\= %"
  5. for %%i in (%path%) do set "path=%%i"
  6. echo %path:#= %
  7. pause>nul
复制代码

作者: 随风    时间: 2008-3-29 21:45

这么热闹,我也来一个
:
  1. @echo off
  2. call :loop "c:\1334 \459sdf fdh8\40958345\aaa.bbb.ccc"
  3. echo %a%
  4. pause&exit
  5. :loop
  6. for /f "tokens=1* delims=\" %%a in ("%~1") do (
  7.   set a=%%a
  8.   if not "%%b"=="" call :loop "%%b"
  9. )
  10. goto :eof
复制代码

作者: youxi01    时间: 2008-3-29 21:45     标题: 还有更“蠢”的

注:以下“函数”并不完善,请勿随便套用!
  1. @echo off  & setlocal enabledelayedexpansion
  2. set "path=C:\Documents and Settings\All Users"
  3. call :GetTheStr "%path%"
  4. echo %res%
  5. pause>nul
  6. :GetTheStr str
  7. set "var=%~1"
  8. if not "%var:~-1%"=="\" (
  9.    set path=%var:~0,-1%
  10.    set res=%var:~-1%%res%
  11.    call :GetTheStr "!path!"
  12. )
复制代码

作者: youxi01    时间: 2008-3-29 21:47

呵呵,搞的跟 随风兄的机理一样了!

不过比你的还“傻”,哈哈
作者: foxJL    时间: 2008-3-29 21:54

呵呵,好热闹啊.
作者: fastslz    时间: 2008-3-30 14:02

补充2楼不足之处
  1. @echo off
  2. call :get "%cd%.tmp"
  3. pause&exit
  4. :get
  5. echo %~n1
复制代码

作者: 梦想种子    时间: 2008-3-30 14:32     标题: 回复 10楼 的帖子

噢,对...否则遇到名字类似“bathome.files”的文件夹时就会错误输出。
作者: a5417871    时间: 2009-3-30 06:09

学习学习中。嘿
作者: zqz0012005    时间: 2009-3-30 09:35

回复 4楼 的帖子
path是系统环境变量,不要随便用它作为一般变量名哦,小心无意中惹出麻烦来而难以检测(当然只是影响这个bat,不会改变系统设置)


回复 10楼 的帖子
无需%cd%.tmp,下面可以直接用echo %~nx1
作者: keen    时间: 2009-3-30 22:51

  1. @echo off
  2. set "a=%cd%"
  3. :loop
  4. set "v=%a:~0,1%"
  5. if "%v%"=="\" set /a n+=1
  6. set a=%a:~1%
  7. if "%a%"=="" goto xianshi
  8. goto loop
  9. :xianshi
  10. set /a n+=1
  11. for /f "tokens=%n% delims=\" %%i in ("%cd%") do echo %%i&pause>nul
复制代码

作者: lxb1117    时间: 2009-4-20 19:51

C:\1\2\3\
for %%i in (.) do @echo %%~ni
pause
取3

for %%i in (..) do @echo %%~ni
pause
取2
作者: lj314338817    时间: 2009-8-29 23:07

突然要用到这个命令,没有学批处理,只好学习了,突然觉得批处理很重要啊。
作者: wangqi0077    时间: 2011-9-16 11:00

回复 14# keen


    不能显示根目录的...
作者: vampirexi    时间: 2016-5-11 23:05

学习学习啦~~好开心
作者: taofan712    时间: 2017-2-28 09:38

现在才懂,《一日一教学》和《for入门到精通》是详细生动地讲命令格式、用途,新手练功区才是讲如何灵活运用、组合命令。 有必要将练功区所有的帖子全部翻遍
@echo off & for /f  "delims=" %%a in ("%~dp0.") do set/p=%%~na<nul&pause>nul
作者: 懒虫阿布    时间: 2018-7-26 22:32

学习,长知识了。
作者: sms512    时间: 2018-7-29 12:48

非常感谢楼主分享,下载收藏、学习
作者: gao19851998    时间: 2018-12-28 09:54

新人学习中,请多关照
作者: cyh1818    时间: 2019-1-21 15:35

回复 4楼 的帖子
path是系统环境变量,不要随便用它作为一般变量名哦,小心无意中惹出麻烦来而难以检测(当 ...
zqz0012005 发表于 2009-3-30 09:35



echo a=%~nx0

这个是最简单了的吧
作者: qhmpv    时间: 2019-6-4 20:47

各位大神,你们编了能不能后面给个解释,不然我们想学但是奈和看不懂啊。。
作者: miqilaosu    时间: 2019-6-10 11:24

回复 23# cyh1818
这个好像是获取当前文件名吧
作者: impk    时间: 2019-7-30 21:47

  1. @echo off
  2. for %%i in ("%cd%") do echo %%~ni
  3. pause
复制代码

作者: 唯尘    时间: 2022-10-28 08:56

@echo off
set a=%cd%
set a=%a: =#%
set a=%a:\= %
for %%i in (%a%) do (set a=%%i)
echo %a:#= %
pause>nul
作者: 772074834    时间: 2023-5-5 09:37

@echo off
call :showDir %cd%
:showDir
echo %~n1
pause




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2