2013-11-27 43 views
0

创建的文件列表我有例如文件的目录:一个目录

\1.gif 
\1.pdf 
\1.doc 
\2.gif 
\2.pdf 
\2.doc 
\3.gif 
\4.gif 

如何获得一个文件只具有唯一文件名的文件(扩展)的名单? (即3.gif4.gif

感谢

回答

0

我还没有测试,但试试这个:

@echo off 
setlocal enabledelayedexpansion 
pushd path\to\dir 
for /f %%i in ('dir /b *.gif') do (
    find "%%~ni" "%tmp%\u" >nul 2>&1 || echo %%~ni >> "%tmp%\u" 
) 
for /f %%i in ('type "%tmp%\u"') do (
    set inc= 
    for /f %%j in ('dir %%i.gif /b') do set /a inc+=1 
    if !inc! EQU 1 (dir /b %%i.* ^|find "log" /v >> log) 
) 

请随意评论,如果有任何错误,而不是在一个位置,以测试它的权利现在。

+0

只是测试它,它似乎工作.... – nephi12

+0

nephi谢谢工作伟大。几个quesitons 1)当我运行文件我得到“系统找不到指定的路径”和几个“文件未找到”。有没有防止显示 – user3042704

+0

2)有没有办法在日志中不包含“日志”文件? 3)是否有修改只会过滤指定的文件扩展名。例如,只有* .gif唯一文件名的列表? 再次感谢您的帮助/时间。非常感激。 – user3042704

0

只要这将作为没有一个文件名包含=字符:

@echo off 
setlocal 
for /f "eol== delims==" %%V in ('"set _ 2>nul"') do set "%%V=" 
for %%F in (*) do if not defined _%%~nF (set "_%%~nF=%%F") else set "_%%~nF==" 
for /f "eol== tokens=2 delims==" %%F in ('"set _|findstr /v =="') do @echo %%F 

编辑

如果要输出限制到只有一个文件类型。那么你需要的只是一个额外的FINDSTR:

@echo off 
setlocal 
for /f "eol== delims==" %%V in ('"set _ 2>nul"') do set "%%V=" 
for %%F in (*) do if not defined _%%~nF (set "_%%~nF=%%F") else set "_%%~nF==" 
for /f "eol== tokens=2 delims==" %%F in ('"set _|findstr /v ==|findstr /lie .gif"') do @echo %%F 
+0

dbenhan,工作很棒。谢谢。 – user3042704

+0

我能够将它保存到log.txt中。有没有办法只过滤该文件中的特定文件扩展名?感谢您的帮助/时间。 – user3042704

+0

为什么选择投票? – dbenham

0

这不适用于特殊字符,如!,=等。

@ECHO OFF &SETLOCAL 
for %%a in (*) do set ".%%~na=%%~xa"& set /a $%%~na+=1 
for /f "tokens=1*delims==." %%a in ('set .') do for /f "tokens=2delims==" %%c in ('set "$%%a"') do if %%c==1 echo(%%a.%%b