对于cmd
(批处理文件)溶液
@echo off
setlocal enableextensions
for /r "%cd%" %%a in (*) do if not defined "\%%~xa\" (echo(%%~xa&set ""\%%~xa\"=1")
endlocal
这将使用环境通过为每个变量设置一个变量来存储可视扩展的信息。如果未设置该变量,则这是第一次找到扩展并将其回传给控制台。
编辑适应评论和OP,我有误读。输出需要在只有一条线
@echo off
setlocal enableextensions
for /r "%cd%" %%a in (*.*) do if not defined "\%%~xa\" (
set ""\%%~xa\"=1"
if not defined "\" (set ""\"=1") else (<nul set /p ".=,")
<nul set /p ".=%%~xa"
)
endlocal
相同的工作,以前的代码,但在这种情况下,输出在一个线keept用逗号加入需要的元素在扩展列表分开时
编辑正确格式化输出:删除扩展点和数据存储在变量中
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%z in ('cmd /e:on /v:off /q /c "for /r "%cd%" %%a in (*.*) do if not defined "\%%~xa\" (set ""\%%~xa\"^=1" & if not defined "\" (set ""\"^=1") else (<nul set /p ".^=^,") & <nul set /p ".^=%%~xa")"') do set "extensionList=%%z"
set "extensionList=%extensionList:.=%"
echo(%extensionList%
endlocal
仍然相同的代码,但要获得的变量内的数据时,所有先前的逻辑高电平在for
命令中移动,因此可以将以前版本的列表分配给变量。然后点从该变量中删除,以获得所需的输出。
请分享您的代码,并让我们知道您卡在哪里。有2件事涉及1)寻找所有目录和文件夹2)正则表达式匹配文件名。 – Braj
你有没有试过'String.endsWith()'方法。 – Braj