【发布时间】:2015-11-26 00:27:17
【问题描述】:
命令forfiles 提供了递归遍历目录树的能力,每次迭代都会在使用其变量@relpath 时返回相对于给定根目录的路径(每个项目都以.\ 为前缀,不幸的是双引用):
forfiles /S /P "D:\data" /S /M "*" /C "cmd /C echo @relpath"
有没有办法在没有forfiles(但最好没有周围的引号)的情况下做到这一点?
实际上,如果可能的话,我想避免任何自编码程序集或重建相对路径。
以下几行都只提供绝对路径(即使将\ 或\. 附加到根路径或在掩码前加上.\ 也不会改变任何内容):
for /R "D:\Data" %L in ("*.*") do echo %L
cd /D "D:\Data" & for /R "." %L in ("*.*") do echo %L
同时使用for /F 语句解析dir /S /B "D:\Data" 的输出并不能满足我的要求,因为dir 在给出开关/S 后立即返回绝对路径。
【问题讨论】:
-
这是特定于 Windows/batch 的吗?
-
是的,它与Windows相关(我会添加标签);它不一定与批处理有关,因为您可以直接在命令行解释器中执行所有命令(这就是我所做的,请参阅我的
for%L语法,如果在批处理中使用,则应该读取%%L); -
感谢您在不说明原因的情况下投反对票!
标签: windows for-loop cmd path relative-path