Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将唯一的文件扩展名扫描到变量中_Java_Regex_Windows_Cmd_File Extension - Fatal编程技术网

Java 将唯一的文件扩展名扫描到变量中

Java 将唯一的文件扩展名扫描到变量中,java,regex,windows,cmd,file-extension,Java,Regex,Windows,Cmd,File Extension,我有一个包含成千上万个文件的windows目录。我需要将所有唯一文件扩展名的列表放入变量中 在java程序中,我希望扫描该目录(递归地,包括所有子目录),并检索可放入变量的唯一文件扩展名列表 Ex:Dir包含:File1.txt File2.doc File3.doc File4.doc File5.ppt 我想检索“txt、doc、ppt”并将其放入一个字符串变量中(它们不必在任何类型的数组中分隔-尽管这会起作用。我只需要得到一个字符串,就像上面的一个) 还有什么我可以做的吗?可能通过访问命令

我有一个包含成千上万个文件的windows目录。我需要将所有唯一文件扩展名的列表放入变量中

在java程序中,我希望扫描该目录(递归地,包括所有子目录),并检索可放入变量的唯一文件扩展名列表

Ex:Dir包含:File1.txt File2.doc File3.doc File4.doc File5.ppt 我想检索“txt、doc、ppt”并将其放入一个字符串变量中(它们不必在任何类型的数组中分隔-尽管这会起作用。我只需要得到一个字符串,就像上面的一个)


还有什么我可以做的吗?可能通过访问命令行或使用regex?

以下是一个Java 8示例作为字符串:

final String extensions=Files.walk(path.get(“”))
.map(路径::toString)
.filter(路径字符串->路径字符串.contains(“.”)
.map(pathString->pathString.substring(pathString.lastIndexOf('.')+1,pathString.length())
.distinct()
.collect(收集器。连接(“,”);
System.out.println(扩展);
作为一个数组:


最终字符串[]扩展名=Files.walk(path.get(“”)
.filter(文件::isRegularFile)
.map(路径::toString)
.filter(路径字符串->路径字符串.contains(“.”)
.map(pathString->pathString.substring(pathString.lastIndexOf('.')+1,pathString.length())
.distinct()
.toArray(字符串[]::新建);
System.out.println(Arrays.toString(扩展));

以下是批量解决方案:

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%
del%temp%\x.x 2>numl
对于('dir/s/b/a-d*)中的/f“tokens=*”%%i,查找“%%~xi”%temp%\x.x |>x.x)
为
cmd
(批处理文件)解决方案设置/p ext=

它使用环境来存储SEED扩展的信息,方法是为每个扩展设置一个变量。如果未设置该变量,则这是第一次找到扩展名并将其回显到控制台

编辑以适应我误读的评论和评论。输出只需要在一行中

@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关闭
setLocalEnableExtensions
对于(*.*)中的/r“%cd%”%%a,如果未定义“\%%~xa\,请执行此操作(
设置“\%%~xa\”=1

如果未定义“\”(设置“\”=1”)其他(请共享您的代码并让我们知道您卡在哪里。这涉及两件事1)查找所有目录和文件夹2)正则表达式以匹配文件名。您是否尝试过
String.endsWith()
方法。@EJP:Question清楚地说明“可能通过访问命令行”以及标记“cmd”OP希望它们以字符串形式出现:“txt、doc、ppt”,而不是单行。除此之外,还有一个很好的解决方案(没有临时文件)。@Stephan,谢谢,我错过了问题的这一部分。嗯。去掉这些点怎么样?那么以后使用的变量在哪里?@Stephan,也许我错了,这就是我的理解:OP将从java程序中使用它,访问底层操作系统(本例中为windows)来检索信息。一旦操作系统完成了将字符串提供给调用程序的工作,删除点就很简单了。无论如何,为了实现所示的示例,代码已经更新。我如何做才能不返回扩展的字符串数组,而不是将它们连接到单个字符串中?@SteveW我添加了数组示例。
@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