[英]Scanning unique file extensions into a variable
我有一個包含數萬個文件的 windows 目錄。 我需要將所有唯一文件擴展名的列表放入變量中。
在 Java 程序中,我想掃描該目錄(遞歸地,包括所有子目錄)並檢索可以放入變量的唯一文件擴展名列表。
例如:Dir 包含:File1.txt File2.doc File3.doc File4.doc File5.ppt 我想檢索“txt,doc,ppt”並將其放入字符串變量中(它們不必在數組中分開任何類型的 - 盡管這會起作用。我只需要以一串字符串結束,就像上面的那樣)。
無論如何我可以做到這一點嗎? 可能通過訪問命令行或使用正則表達式?
這是一個 Java 8 示例作為字符串:
final String extensions = Files.walk(Paths.get(""))
.map(Path::toString)
.filter(pathString -> pathString.contains("."))
.map(pathString -> pathString.substring(pathString.lastIndexOf('.') + 1, pathString.length()))
.distinct()
.collect(Collectors.joining(","));
System.out.println(extensions);
作為數組:
final String[] extensions = Files.walk(Paths.get(""))
.filter(Files::isRegularFile)
.map(Path::toString)
.filter(pathString -> pathString.contains("."))
.map(pathString -> pathString.substring(pathString.lastIndexOf('.') + 1, pathString.length()))
.distinct()
.toArray(String[]::new);
System.out.println(Arrays.toString(extensions));
這是一個批處理解決方案:
del %temp%\x.x 2>nul
for /f "tokens=*" %%i in ('dir /s /b /a-d *') do (find "%%~xi" %temp%\x.x ||<nul set/p .= %~xi>>x.x)
set /p ext=<%temp%\x.x
set ext=%ext:.=,%
set ext=%ext:~1%
echo %ext%
對於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
與前面的代碼相同的工作,但在這種情況下,輸出保持在一行中,並在需要時添加逗號以分隔擴展列表中的元素
編輯以正確格式化輸出:從擴展中刪除點並將數據存儲在變量中
@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
命令中,因此可以將以前版本的列表分配給變量。 然后從該變量中刪除點以獲得所需的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.