rodgerwilco
Goto Top

Abgleich Dateiname zu Verzeichisname mittels Batch

Hallo zusammen,

ich tue mich mit dem Schreiben einer Batch-Datei mal wieder etwas schwer. Daher wäre ich für eure Hilfe Dankbar.
Ich habe zwei Verzeichnisse. In einem Verzeichnis liegen Dateien in dem anderen liegen Unterverzeichnisse. Die Dateien haben das Namensformat <Eigenschaft>.txt, die Unterverzeichnisse haben das Namensformat <Eigenschaft>.xy Ja, der Verzeichnisname hat eine Punkt face-wink

Was ich tun möchte ist folgendes:
Per Batch soll abgeglichen werden, für welche TXT-Datei ein entsprechendes Verzeichnis bereits existiert (Abgleich über den Namen ohne Erweiterung). Ausreichen würde die Anzahl, wie viele existieren, bzw wie viele noch fehlen. Alternativ wäre auch eine Auflistung, welche vorhanden sind und welche fehlen eine Option.

Kann mir jemand hierbei helfen? Mein bisheriger Ansatz sieht wie folgt aus:

@echo off

Set _anzahlVorhanden=0

set SOURCE=%~1
set DEST=%~2

for %%i in (%SOURCE%\*.txt) do set 1=%%~ni(
	for %%a in (%DEST%\*.xy) do set 1=%%~na(
		IF %%i == %%n (
			!_anzahlVorhanden! = !_anzahlVorhanden! + 1
		)
	)
)

echo Es sind&!anzahlVorhanden! Uebereinstimmungen vorhanden.

Content-ID: 298494

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

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

Friemler
Lösung Friemler 08.03.2016 um 10:49:57 Uhr
Goto Top
Hallo rodgerwilco,

teste mal folgendes:
@echo off & setlocal

set "Files=Pfad-zum-Verzeichnis-mit-Dateien"  
set "Folders=Pfad-zum-Verzeichnis-mit-Ordnern"  

for %%f in ("%Files%\*.*") do (  
  for /d %%d in ("%Folders%\*.*") do (  
    if "%%~nf" equ "%%~nd" (  
      echo Verzeichnis %%~nf vorhanden
    )
  )
)

for %%f in ("%Files%\*.*") do (  
  set "Found="  
  
  for /d %%d in ("%Folders%\*.*") do (  
    if "%%~nf" equ "%%~nd" (  
      set "Found=1"  
    )
  )
  
  if not defined Found (
    echo Verzeichnis %%~nf nicht vorhanden
  )
)

Gruß
Friemler
114757
114757 08.03.2016 um 13:09:13 Uhr
Goto Top
Oder auch mit Powershell ein Einzeiler:
compare (gci 'C:\quelle\*.txt' -File | select -Expand Basename) (gci 'C:\ziel' -Directory | %{($_.Name -split '\.')}) -IncludeEqual  
Gruß jodel32
rodgerwilco
rodgerwilco 10.03.2016 um 07:49:44 Uhr
Goto Top
Vielen Dank, die Batch funktioniert super. Auch das Powershellskript tut, was es soll. Gesucht habe ich jedoch eine möglichkeit per Batch.