[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 如何利用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个, 但是不知道怎么写,

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

评分人数

    • zm900612: 第一次见到("%~f0\..\..\..") ,从没想 ..技术 + 1

TOP

给解释下吧, 没有领会...

TOP

就是bat文件的上级目录的上级目录的上级目录

TOP

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

echo 里的 ~nx 又是什么呢


多谢

[ 本帖最后由 QINZDC 于 2011-3-8 23:13 编辑 ]

TOP

原来可以如此,先前一直不知有这种取指定层文件夹名的办法

TOP

  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
复制代码
__@__@__批了___来看看吧

TOP

~n1 是倒数的意思么,  哪里的命令"?

TOP

楼主不就是要获取批完整路径中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
复制代码
***共同提高***

TOP

回复 8楼 的帖子

%~n1        - 仅将 %1 扩充到一个文件名
目录应该就是特殊文件吧,个人理解
__@__@__批了___来看看吧

TOP

回复 5楼 的帖子

多看看基础教程:浅谈批处理for命令中的变量扩展
http://bbs.bathome.net/thread-2205-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表