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

[文本处理] 【已解决】批处理怎样获取路径末尾文件夹名?

本帖最后由 wangjile 于 2013-7-3 14:43 编辑

我想获取路径末尾文件夹名,最近刚初步学习了for,所以自己写了以下代码:
  1. @echo off
  2. set /p lj=请拖曳打包文件夹至此:
  3. for /f "delims=\ tokens=3" %%i in (%lj%) do echo %%i
  4. pause
复制代码
这段代码可以获取到第三级的路径文件夹名称,但是在路径级数位置的情况下,并不能获取最后一级的文件夹名称,请问各位大虾,应该怎么处理??
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. set /p lj=请拖曳打包文件夹至此:
  4. SET "LJ=%LJ:"=%"
  5. for /f "delims=" %%i in ("%lj%") do (
  6.  SET "LF=%%~DPi"
  7.  FOR /F "DELIMS=" %%D IN ("!LF:~,-1!")DO ECHO,%%~NXD
  8. )
  9. pause
复制代码
1

评分人数

如无特别说明,代码测试环境均为 XP SP3

TOP

cutebe 发表于 2013-7-3 12:13


你好,我刚测试了下,你写的P提取到的是最后一级文件夹的上级文件夹名称,看截图:

TOP

看错了,呵呵!
  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. set /p lj=请拖曳打包文件夹至此:
  4. SET "LJ=%LJ:"=%"
  5. for /f "delims=" %%i in ("%lj%") do ECHO,%%~NXi
  6. pause
复制代码
查看FOR /?有相关帮助。(即%%~后面怎么用)
如无特别说明,代码测试环境均为 XP SP3

TOP

FOR /F "DELIMS=" %%D IN ("!LF:~,-1!")DO ECHO,%%~NXD
for /f "delims=" %%i in ("%lj%") do ECHO,%%~NXi

%~nxI       - 仅将 %I 扩充到一个文件名和扩展名
这两句有什么区别吗,最后的显示都是~nx扩展啊?

SET "LJ=%LJ:"=%"
这一句是什么意思啊,大虾,求解释?

TOP

判断是文件还是是文件夹的情况
  1. @echo off
  2. set /p lj=请拖曳打包文件夹至此:
  3. for /f "tokens=*" %%i in ("%lj:"=%") do (
  4.     if exist "%%i\" (echo %%~nxi) else (
  5.        for /f "tokens=*" %%j in ("%%~fi\..") do echo %%~nxj
  6.     )
  7. )
  8. pause
复制代码
SET "LJ=%LJ:"=%"  去掉路径中的引号
1

评分人数

TOP

谢谢楼上几位大虾了,不过我还是看不明白,放着以后慢慢看吧!!

TOP

本帖最后由 cutebe 于 2013-7-3 15:31 编辑

虽然有些知识可以以后了解,但扩展名却有必要现在了解!

有些目录是带点的,如:”TC2.0“,则点及后面的字符会被当成扩展名。即“.0“
如同文件扩展名一样:A.TXT 之扩展名为 .TXT

              TC2.0  A.TXT
%~NI   只表示文件名   TC2   A
%~XI   只表示扩展名   .0    .TXT

%~NXI  表示文件名与扩展名 TC2.0  A.TXT
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 5# wangjile
又看错了,晕。

没有区别,都是%~NX扩展没错。

结合前面的完整代码,因为前一句是在脱去一层目录的情况下再显示,就变成了倒数第二层目录了。
如无特别说明,代码测试环境均为 XP SP3

TOP

返回列表