93578
Goto Top

Textdateien aus mehreren Unterordnern in einen anderen Ordner auf einer anderer Partition herauskopieren, miteinander vergleichen und die Ergebnisse als neue Texdateien in diesem neuen Ordner ausgeben.

Hallo an alle!

Auf dem Laufwerk E: befindet sich ein Ordner namens "Autoteile" mit 5 Unterordnern "Alle", "Toyota", "Mazda", "Daihatsu", "Subaru" Jeder von diesen Ordnern beinhaltet eine Textdatei mit Seriennummern zu verschiedenen Autoteilen. Einige davon sind identisch. Auf dem Laufwerk C: befindet sich ein leeres Ordner namens "Vergleich".
Die Aufgabe:
1) Alle Textdateien aus den Unterverzeichnissen auf dem Laufwerk E ins Verzeichnis "Vergleich" kopieren (nicht verschieben und ohne Ordner!).
2) Die Inhalte der kopierten Texdateien von 4 Unterordner: "Toyota", "Mazda", "Subaru", "Daihatsu" mit dem Inhalt der Textdatei aus dem Verzeichnis "Alle" vergleichen. Dabei sollten nur die gleichen Zeilen in eine neue Textdatei herausgegeben werden.
3) Nach der Sichtung der erstellten Textdateien sollen alle Dateien im Verzeichnis "Vergleich" wieder gelöscht werden.

Ich habe das Problem wie folgt gelöst, möchte aber was kompakteres sehen (nur per Batch!!!):

@echo off & setlocal

set "Ziel=C:\Vergleich"  
set "Start1=E:\Autoteile\Alle"  
set "Start2=E:\Autoteile\Toyota"  
set "Start3=E:\Autoteile\Mazda"  
set "Start4=E:\Autoteile\Daihatsu"  
set "Start5=E:\Autoteile\Subaru"  

pushd "%Ziel%"  

xcopy "%Start1%" "%Ziel%" /q /y  
xcopy "%Start2%" "%Ziel%" /q /y  
xcopy "%Start3%" "%Ziel%" /q /y  
xcopy "%Start4%" "%Ziel%" /q /y  
xcopy "%Start5%" "%Ziel%" /q /y  

comm -12 alle.txt toyouta.txt  > vergleich_toyota.txt
comm -12 alle.txt mazda.txt  > vergleich_mazda.txt
comm -12 alle.txt daihatsu.txt  > vergleich_daihatsu.txt
comm -12 alle.txt subaru.txt  > vergleich_subaru.txt

echo.
echo Sehen Sie sich die Ergebnisse im Verzeichnis "%Ziel%" an.  
echo.
PAUSE


del "%Ziel%" /s  

goto :eof

Danke im Voraus!
Philipp Takitano

Content-Key: 170931

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

Printed on: April 18, 2024 at 18:04 o'clock

Mitglied: 93578
93578 Aug 04, 2011 at 10:07:55 (UTC)
Goto Top
Ich habe hier gesucht und (Danke an Bastla! face-wink ) so was zusammen gebastelt, aber es funktioniert nicht:

@echo off & setlocal

set "Ziel=C:\Vergleich"  
set "Start=E:\Autoteile"  
set "Typ=txt"  

for /r "%Start%" %%i in (*.%Typ%) do call :ProcessFile "%%i"  

:ProcessFile
copy %1 "%Ziel%"  

comm -12 alle.txt toyouta.txt  > vergleich_toyota.txt
comm -12 alle.txt mazda.txt  > vergleich_mazda.txt
comm -12 alle.txt daihatsu.txt  > vergleich_daihatsu.txt
comm -12 alle.txt subaru.txt  > vergleich_subaru.txt

echo.
echo Sehen Sie sich die Ergebnisse im Verzeichnis "%Ziel%" an.  
echo.
PAUSE

del "%Ziel%" /s  

goto :eof
Member: Skyemugen
Skyemugen Aug 04, 2011 at 10:14:05 (UTC)
Goto Top
Aloha,

du solltest wohl erst einmal :ProcessFile abschließen, da momentan ab Zeile 10 alles dazugehört aber eigentlich ab Zeile 12 ja wieder das Hauptskript sein sollte, du also in Zeile 11 goto :eof hinzufügen solltest und dann entweder ein goto :irgendwas direkt nach der Schleife setzt oder aber den :ProcessFile ganz ans Ende setzt, da dieser sonst erneut aufgerufen wird.

Und zum Testen bitte echo on und funktioniert nicht ist ein wenig ungenau.

greetz André
Member: Friemler
Friemler Aug 04, 2011 at 10:25:01 (UTC)
Goto Top
Hallo takitano,

teste mal das hier:
@echo off & setlocal

set "Quelle=E:\Autoteile"  
set "Ziel=E:\Vergleich"  
set "Master=Alle.txt"  

for /d %%f in ("%Quelle%\*.*") do (  
  xcopy "%%f" "%Ziel%" /q /y > NUL  
)

for /f "delims=" %%f in ('dir /b /a:-d "%Ziel%\*.txt" 2^>NUL ^| findstr /i /v /e /c:"%Master%"') do (  
  comm -12 "%Ziel%\%Master%" "%Ziel%\%%f"  > "%Ziel%\Vergleich_%%f"  
)

echo.
echo Sehen Sie sich die Ergebnisse im Verzeichnis "%Ziel%" an.  
echo.
pause

del /s "%Ziel%"  

Gruß
Friemler
Mitglied: 93578
93578 Aug 04, 2011 at 10:27:56 (UTC)
Goto Top
Danke für den Tipp! Ich werde es später probieren - der batch hat jetzt alle meine batch-dateien in seinem Verzeichnis gelöscht..... Muss ich zuerst die retten!!! face-sad
Member: Skyemugen
Skyemugen Aug 04, 2011 at 10:29:44 (UTC)
Goto Top
Aloha,

beim testen arbeitet man entweder

  • mit Testdateien
oder
  • mit echo del, sprich Vorschaubefehlen

greetz André

@Friemler, gib' den Usern doch nicht immer harte del Befehle, die machen nur klick, klick *gg*
Member: Friemler
Friemler Aug 04, 2011 at 10:36:19 (UTC)
Goto Top
Hallo Skyemugen,

in der Form des DEL-Befehls wird man explizit nochmal gefragt, ob man löschen will. Außerdem: Das Denken kann den Usern keiner abnehmen...

Gruß
Friemler
Mitglied: 93578
93578 Aug 04, 2011 at 10:36:43 (UTC)
Goto Top
Hallo Fiemier.

Hat fast geklappt. Nur der Vergleich funktioniert nicht korrekt - die Dateien werden erstellt, aber keine Ergebnisse da sind.
Mitglied: 93578
93578 Aug 04, 2011 at 10:39:55 (UTC)
Goto Top
Zitat von @Skyemugen:
Aloha,

beim testen arbeitet man entweder

  • mit Testdateien
oder
  • mit echo del, sprich Vorschaubefehlen

greetz André

@Friemler, gib' den Usern doch nicht immer harte del Befehle, die machen nur klick, klick *gg*

Das weiß ich, Habe doch meine 2.Kopien gelöscht! face-wink
Member: Friemler
Friemler Aug 04, 2011 at 10:40:02 (UTC)
Goto Top
Hallo takitano,

Du hast wahrscheinlich eine (von mir zu schnell eingestellte) Version, bei der vor dem COMM-Befehl noch ein ECHO steht. Kopiere Dir den Code nochmal, habe da noch ein paar Kleinigkeiten geändert.

Gruß
Friemler
Mitglied: 93578
93578 Aug 04, 2011 at 10:46:50 (UTC)
Goto Top
Danke! Hat geklappt. Nur die Ergebnisse wollte ich eigenlich auf C: sehen. Habe es aber korrigiert.! face-wink