windows dir递归,只保留儿童路径

时间:2016-10-25 21:32:58

标签: cmd

我试图格式化DIR输出以仅保留文件名和子文件夹,递归。

dir
 Volume in drive W has no label.
 Volume Serial Number is 5CAC-FACA

 Directory of w:\temp

10/26/2016  12:26 AM    <DIR>          .
10/26/2016  12:26 AM    <DIR>          ..
12/07/2015  04:00 PM            12,604 add_vhost.php
12/31/2010  08:40 AM           202,575 favicon.ico
10/26/2016  12:27 AM    <DIR>          images
12/07/2015  03:02 PM            28,398 index.php
07/05/2015  08:56 AM               528 testmysql.php
09/21/2015  04:30 PM               742 test_sockets.php
               5 File(s)        244,847 bytes
               3 Dir(s)  39,886,716,928 bytes free

我最终得到了这个

for /r %i in (*) do @echo %~nxi
add_vhost.php
favicon.ico
index.php
testmysql.php
test_sockets.php
bg-begin-repeat.jpg
bg-dl-repeat.jpg
bg-header.png
bg-title-dark.png
bg-wall-repeat.jpg

但是缺少子文件夹名称。应该是:

   add_vhost.php
    favicon.ico
    index.php
    testmysql.php
    test_sockets.php
    images/bg-begin-repeat.jpg
    images/bg-dl-repeat.jpg
    images/bg-header.png
    images/bg-title-dark.png
    images/bg-wall-repeat.jpg

如果可能的话用斜线:)不反斜杠。有一些批处理变量指示父文件夹,所以我可以在循环中添加正确的斜杠吗?

我也尝试使用dir / s / b,但结果比标准linux ls差得多。

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您希望获得类似dir /s /b的输出,但是要使用相对路径而不是绝对路径。没有内置功能可显示cmd中的相对路径,但是拥有完整路径%~fa时,您可以用任何内容替换工作文件夹%cd%。然后用斜杠替换反斜杠,您就可以完成:

@echo off
setlocal enabledelayedexpansion
for /r %%a in (*) do (
  set "line=%%~fa"
  set "line=!line:%cd%\=!"
  echo !line:\=/!
)