Board logo

标题: [文本处理] 如何利用for得到批处理完整路径的指定文件夹名? [打印本页]

作者: QINZDC    时间: 2011-3-8 22:30     标题: 如何利用for得到批处理完整路径的指定文件夹名?

字符串 就是我的bat的当前路径, 如G:\mfc\4\Code\Draw\Debug\demo.bat
这个bat可能在别的目录下,
如d:\a\b\c\draw\debug\demo.bat
前面的路径可能变化, 但是demo.bat上面总是 draw\debug\demo.bat.
我想获取draw的上一级目录,如何获取呢. 如上面2个例子,应该分别得到 code 和 c

我的一点想法: 利用 for /f 但是不知道如何写的出来, 因为 不知道前面到底取多少个 \, 只知道取倒数第4个, 但是不知道怎么写,
作者: Commander    时间: 2011-3-8 22:38

  1. @echo off
  2. for %%a in ("%~f0\..\..\..") do (
  3.     echo %%~nxa
  4. )
  5. pause
复制代码

作者: QINZDC    时间: 2011-3-8 22:44

给解释下吧, 没有领会...
作者: Commander    时间: 2011-3-8 22:46

就是bat文件的上级目录的上级目录的上级目录
作者: QINZDC    时间: 2011-3-8 22:49

@echo off
for %%a in ("%~f0\..\..\..") do (
    echo %%~nxa
)
pause

echo 里的 ~nx 又是什么呢


多谢

[ 本帖最后由 QINZDC 于 2011-3-8 23:13 编辑 ]
作者: CrLf    时间: 2011-3-8 23:09

原来可以如此,先前一直不知有这种取指定层文件夹名的办法
作者: liion631818    时间: 2011-3-8 23:15

  1. @echo off
  2. set "allPath=%~dp0"
  3. set "allPath=%allPath:~0,-12%"
  4. echo %allPath%
  5. call :demo "%allPath%"
  6. pause
  7. goto :eof
  8. :demo
  9. echo %~n1
复制代码

作者: QINZDC    时间: 2011-3-8 23:27

~n1 是倒数的意思么,  哪里的命令"?
作者: batman    时间: 2011-3-9 11:11

楼主不就是要获取批完整路径中draw文件夹的上级目录吗,这样是不是通用些?
  1. @echo off
  2. set "str=%~0"
  3. :lp
  4. for /f "tokens=1* delims=\" %%a in ("%str%") do (
  5.      if /i "%%a" equ "draw" goto next
  6.      set "var=%%a"&set str=%%b&goto lp
  7. )
  8. :next
  9. echo %var%&pause>nul
复制代码

作者: liion631818    时间: 2011-3-9 13:31     标题: 回复 8楼 的帖子

%~n1        - 仅将 %1 扩充到一个文件名
目录应该就是特殊文件吧,个人理解
作者: Batcher    时间: 2011-3-9 20:14     标题: 回复 5楼 的帖子

多看看基础教程:浅谈批处理for命令中的变量扩展
http://bbs.bathome.net/thread-2205-1-1.html




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