2013-11-27 66 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