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

[其他] [已解决]如何利用For获得文件所在文件夹的名字

我明白楼主的意思,我也遇到了同样的问题:
比如我有一个文件file.txt,放在不同的路径下面,比如
c:\windows\file.txt
c:\kent\test\file.txt
d:\files\ok\file.txt

那么我现在想得到的结果是:
windows
test
ok

也就是说file.txt所在的文件夹的名字。
请高手们指点指点!

[ 本帖最后由 kent 于 2009-6-11 09:24 编辑 ]
1

评分人数

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

你怎么知道你的file.txt在这些目录?通过for /r 得到的吗?
可以改用for /d /r
  1. @echo off
  2. set "name=file.txt"
  3. for %%d in (c d e) do (
  4.     pushd %%d:\
  5.     for /d /r %%f in (*) do if exist "%%f\%name%" do echo %%~nxf
  6.     popd
  7. )
  8. pause
复制代码
如果要从已经路径得到文件夹的名字,可以这样:
  1. @echo off
  2. set "file=c:\windows\file.txt"
  3. for %%a in ("%file%") do for %%i in ("%%~dpa.") do set "foldername=%%~nxi"
  4. if not defined foldername set "foldername=%file:~,3%"
  5. echo %foldername%
  6. pause
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

敬仰 二字油然而生
可是还有一个小问题,想再请教一下
  1. set "fullpath=c:\windows\"
  2. for %%a in ("%fullpath%") do set "foldername=%%~nxa"
  3. echo %foldername%
  4. pause
复制代码
这样执行后变量foldername并没有产生,但如果在%fullpath%后面加一个点 “.”,结果就正确了
正确代码如下:
  1. set "fullpath=c:\windows\"
  2. for %%a in ("%fullpath%.") do set "foldername=%%~nxa"
  3. echo %foldername%
  4. pause
复制代码
执行结果: "%foldername%"=="windows"

请问这是怎么回事?感觉我还没有入门,可以帮忙解释一下吗?
再次感谢  zqz0012005

[ 本帖最后由 kent 于 2009-6-10 18:42 编辑 ]

TOP

c:\windows\  只是路径,没有文件名。
c:\windows\. 表示有文件名的完整路径,“.”表示当前目录,可以看作目录名,也可以当作文件名(目录名与文件名其实没有太大区别,Linux下目录也是一种文件)。

更直接的原因是,for根本不关心所解析的字符串是目录名还是文件名,也不检查该文件(目录)是否存在,它只是按照某种公式对%~nxa之类的增强变量进行扩展。

[ 本帖最后由 zqz0012005 于 2009-6-10 19:06 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

哦  原来如此!
貌似理解了一点点。
所以如果:
  1. set "fullpath=c:\windows"
  2. for %%a in ("%fullpath%") do set "foldername=%%~nxa"
  3. echo %foldername%
  4. pause
复制代码
也是可以正确显示我想要的结果的。
但是在实际应用过程中,有时候%fullpath%=="c:\windows\",或者说我们也不知道它到底带不带“\”的时候就可以写成“%fullpath%.”,这样确实可以巧妙的解决很多未知的问题。以上写法虽然可以得到结果,可是有点往结果上凑的嫌疑,所以大部分情况下,还是在"%fullpath%."中加“.”更合理一点。

谢谢!

[ 本帖最后由 kent 于 2009-6-10 19:25 编辑 ]

TOP

返回列表