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

[文件操作] 批处理命令for + dir 问题

如果不在 d:\ 运行下面命令,全路径的路径部分是 当前路径 ?
  1. for /f %%a in ('dir /b d:\') do (
  2.     echo "%%~fa"
  3. )
复制代码

dir /b 在当前路劲下

TOP

%%~f           盘符+路径+文件全名(或文件夹名)

TOP

回复 1# newswan
我觉得是你对当前路径理解有误,所谓当前路径是个相对的概念,是指代码运行时不需要指定路径:
1.比如,将批处理文件放在某个文件夹中,如果不指定路径,此文件夹即是当前文件夹,在此文件夹中文件重命名的话可直接操作。
ren "1.txt" "2.txt"
2.要想改变当前路径,可用
cd /d "指定目录"
那么以下的代码就会在新的当前路径下(上面的“指定目录”)运行。
3.在cd上下各加一行语句:echo,%cd%。即可证实路径是否改变。

TOP

dir /b d:\获得的只是文件名或文件夹名,而没有路径信息或者说路径信息与文件名及文件夹名无关联。

TOP

dir /b d:\已经指定了路径,%%~fa是扩充到全路径,全路径就是全路径,跟运行命令时的当前路径没有关系

TOP

就是这个问题
dir /b 只能获得 name ,在 for  的 in ('dir /b 非当前路径') 中,扩展 f d p a t z 都无效
dir /s /b 才能获得 fullname

TOP

本帖最后由 qixiaobin0715 于 2021-8-28 17:56 编辑

那样的话获得本来就是全路径,就用不着%~fI。只有在当前路径(不包括子文件夹时)处理文件及文件夹才能用到%~fI

TOP

回复 7# qixiaobin0715


    不就是预期跟非预期,运行出现非预期情况有啥奇怪的

TOP

回复 8# newswan


    估计拓展路径以%a为基准,而%a被dir /b吃掉没了路径,所以用的当前路径
    也可能是dir /b内部也用d:\作为当前路径,出现了两个路径,但默认用运行批处理所在路径
    出现这种情况也没啥奇怪的,别用拓展路径自己手动加上路径就行

TOP

批处理 管道 传递的是 "文本" ,不是对象,没有属性,for 语句从命令中得到只是文本
dir /b 输出的不带路径
dir /s /b 输出的是全路径

TOP

回复 13# qixiaobin0715


    预期就是我长的非常帅,非预期就是其实我长的并不帅,你说这是 我说自己长的帅的问题 还是 我其实长的并不帅的问题

TOP

返回列表