我试图格式化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差得多。
答案 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:\=/!
)