yetanothernick
Goto Top

Suchen von gleichen Dateien (Name plus Endung) innerhalb eines Verzeichnisses mit Unterverzeichnissen

Hallo allesamt,

ich stehe vor folgendem Problem:

Ich will mittels Batch (Ja, über VBS und externe Tools geht es einfacher, ich weiß ;). ) Dateien in einem Verzeichnis inkl. Unterverzeichnisse auf den identischen Namen überprüfen.

Soll heißen, wenn sich in C:\ABC\ sowie in C:\ABC\CBA\ dieselbe Datei befindet (gehen wir einfach mal von Datei.XYZ aus) möchte ich dies ausgegeben haben.

Ich hatte auch schon etwas gebastelt, was dies übernommen hat - mit erfolgreicher Ausgabe. Einziges Problem bei der ganzen Sache war, dass er mir ausgegeben hat, dass sowohl

C:\ABC\Datei.xyz mit C:\ABC\CBA\Datei.XYZ

sowie

C:\ABC\CBA\Datei.XYZ mit C:\ABC\Datei.XYZ

übereinstimmt. Das ist ja leider doppelt gemoppelt und dementsprechend nicht notwendig.

Realisiert hatte ich das bisher mit:

@echo off
for /R C:\skript_6\tj1\ %%J in (*.*) do (	
 for /R C:\skript_6\tj1\ %%I in (*.*) do (
  if %%~nxJ==%%~nxI (
    if %%J==%%I (
     echo.
    ) else (
     echo %%J sowie %%I
           )
      )
    )
 )
)

Fällt jemanden eine Möglichkeit ein dies ohne diese doppelten Ausgaben zu realisieren?

Gruß,
YAN

Content-Key: 88943

Url: https://administrator.de/contentid/88943

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: Biber
Biber 02.06.2008 um 16:43:43 Uhr
Goto Top
Moin YAN,

willkommen im Forum.
Du könntest diese Ausgabe statt auf den Bildschirm in eine temporäre Datei umleiten.
Dann hättest Du die Möglichkeit, vorher nach dem spiegelbildlichen Vorkommen zu suchen.

Ungetestete Skizze:
@echo off & setlocal
Set "yat=%temp%\YetAnotherTempfile.YAT"  
Echo.>"%yat%"  
for /R C:\skript_6\tj1\ %%J in (*.*) do (	
 for /R C:\skript_6\tj1\ %%I in (*.*) do (
  if "%%~nxJ"=="%%~nxI" (  
    if "%%J"=="%%I" (  
     echo.
    ) else (
     FindStr /i /C:"%%I sowie %%J" "%yat%">nul || echo %%J sowie %%I>>"%yat%"  
           )
      )
    )
 )
)
:: hier ggf ein Anzeigen von %Yat% mit TYPE o.ä. , siehe bei bastla
if exist "%yat%" del "%yat%"  

Grüße
Biber

Ist dennoch buggy und tut es nicht. s.u.[/Edit]
Mitglied: bastla
bastla 02.06.2008 um 17:40:20 Uhr
Goto Top
... oder, etwas abgewandelt:
@echo off & setlocal
Set "yat=%temp%\YustAnotherTempfile.YAT"  
Echo\>"%yat%"  
for /R C:\skript_6\tj1\ %%J in (*.*) do (	
 for /R C:\skript_6\tj1\ %%I in (*.*) do (
  if "%%~nxJ"=="%%~nxI" (  
    if "%%J" neq "%%I" (  
     FindStr /i /C:"%%I sowie %%J" "%yat%">nul || echo %%J sowie %%I>>"%yat%"  
    )
  )
 )
)
type %yat%
Vorteil wäre hier, dass die Ergebnisse nicht nur ausgegeben werden, sondern auch (in %yat%) gespeichert zur Verfügung stehen.

Grüße
bastla
Mitglied: YetAnotherNick
YetAnotherNick 03.06.2008 um 07:28:24 Uhr
Goto Top
Wow, das ging ja fix - und ist genau das, was ich gebraucht habe.

Danke fuer die schnellen Antworten face-smile!

--
Edit:

Hmm, da habe ich mich wohl etwas zu früh gefreut. Leider erscheinen die Duplikate immernoch.

Inwiefern fängt das FindStr denn die Duplikate ab? Und/Oder wie kann ich am besten eine Überprüfung einbauen?

Und um das Ganze nochmal darzustellen - Ich möchte statt:

C:\Skript_6\tj2\mfc70.dll sowie C:\Skript_6\tj2\blub\mfc70.dll
C:\Skript_6\tj2\blub\mfc70.dll sowie C:\Skript_6\tj2\mfc70.dll

nur

C:\Skript_6\tj2\mfc70.dll sowie C:\Skript_6\tj2\blub\mfc70.dll

haben.

Gruß,
ein wenig verwirrter YAN
Mitglied: bastla
bastla 03.06.2008 um 19:27:04 Uhr
Goto Top
Hallo YAN!

Ändere die Zeile 8 auf
FindStr /i /C:"%%I" "%yat%">nul || echo %%J sowie %%I>>"%yat%"  
Grüße
bastla
Mitglied: YetAnotherNick
YetAnotherNick 04.06.2008 um 08:41:17 Uhr
Goto Top
! face-smile

Super, danke!

Und ich war schon leicht am verzweifeln - aber es sind ja (wie üblich) die kleinen Sachen ^^ ;).

Gruß,
YAN