cmd bat 批处理 如何输出当前文件夹下所有 子文件夹的完整路径?

我写了一个bat 放在 环境变量path下

@echo off
for /f "delims=" %%a in ('dir /ad/b') do (
echo %cd%\%%a
)

只输出文件夹路径

如果在
C:\Windows\System32>
下调用它
输出
C:\Windows\System32\ras
C:\Windows\System32\Recovery
C:\Windows\System32\restore
没问题

但是如果直接在盘符下调用
比如直接在D盘
就输出了

D:\\su
D:\\System Volume Information

路径成了双斜杠

因为%cd% 在盘符下输出就是带反斜杠的,比如d:&echo %cd%
D:\

现在我需要在盘符下也输出单个反斜杠的路径,应该怎么办?

一个笨办法先判断一下最后一字符是否为\ 另赋一变量统一结尾有\ (或统一无\) 类似:
set "cd_=%cd%"
if not "%cd:~-1%"=="\" set "cd_=%cd%\"
或先加再说,接着去掉多余的:
set "cd_=%cd%\"
set "cd_=%cd_:\\=\%"
上述两形式需在用到它的for类复合句之前单独设置,然后在需要用%cd%\ 处用%cd_%代
对于for 中特定变量或%1之类传入参数变量而言,有现成格式可用,也是最常用的形式,比如你所列举例子echo %cd%\%%a可改为
echo %%~fa
参见for/? 及 call/? 或还需要看看 set/?
温馨提示:答案为网友推荐,仅供参考
相似回答