Board logo

标题: [文件操作] 批处理命令for + dir 问题 [打印本页]

作者: newswan    时间: 2021-8-28 13:23     标题: 批处理命令for + dir 问题

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

作者: Fit    时间: 2021-8-28 14:18

dir /b 在当前路劲下
作者: Fit    时间: 2021-8-28 14:22

%%~f           盘符+路径+文件全名(或文件夹名)
作者: qixiaobin0715    时间: 2021-8-28 15:01

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

dir /b d:\获得的只是文件名或文件夹名,而没有路径信息或者说路径信息与文件名及文件夹名无关联。
作者: Five66    时间: 2021-8-28 17:38

dir /b d:\已经指定了路径,%%~fa是扩充到全路径,全路径就是全路径,跟运行命令时的当前路径没有关系
作者: newswan    时间: 2021-8-28 17:49

就是这个问题
dir /b 只能获得 name ,在 for  的 in ('dir /b 非当前路径') 中,扩展 f d p a t z 都无效
dir /s /b 才能获得 fullname
作者: qixiaobin0715    时间: 2021-8-28 17:55

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

那样的话获得本来就是全路径,就用不着%~fI。只有在当前路径(不包括子文件夹时)处理文件及文件夹才能用到%~fI
作者: Five66    时间: 2021-8-28 19:51

回复 7# qixiaobin0715


    不就是预期跟非预期,运行出现非预期情况有啥奇怪的
作者: Five66    时间: 2021-8-28 20:07

回复 8# newswan


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

批处理 管道 传递的是 "文本" ,不是对象,没有属性,for 语句从命令中得到只是文本
dir /b 输出的不带路径
dir /s /b 输出的是全路径
作者: Five66    时间: 2021-8-29 18:37

回复 13# qixiaobin0715


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




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