PDA

Vollständige Version anzeigen : Per Batch Verzeichnisse vergleichen


Kotik
22.05.2007, 12:40
Hallo,

ist es möglich mit einer Batch-Datei Verzeichnisse (incl. Unterverz.) nach mp3`s mit gleichen Namen zu überprüfen
und im dem Ordner den ich vorher eingegeben hatte die mp3`s die doppelt vorkamen löschen?

1. Set (1. Verzeichnis (incl. Unterverz.)
2. Set (2. Verzeichnis (incl. Unterverz.)
3. Der 2. soll auch als Pfad dienen im dem dann auch die doppelt vorhandenen mp3`s aus dem 1. gelöscht werden.
4. Dann soll noch angezeigt werden im welchem Pfad und welche Datei gelöscht wurde angezeigt.

Bitte helft mir.

Danke im Voraus!

Joachim Hofmann
22.05.2007, 14:52
Ein Ansatz ist eine verschachtelte FOR-Schleife,
die iteriert (/R).
<font size=3><code>doppelt.bat</code></font>
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet">

<font color="#008080">ECHO</font><font color="#804040"><b> OFF</b></font>
<font color="#804040"><b>for</b></font> <font color="#6a5acd">/R</font> c:\t1\ <font color="#008080">%%I</font> in (*.*) do (
<font color="#804040"><b>for</b></font> <font color="#6a5acd">/R</font> c:\t2\ <font color="#008080">%%J</font> in (*.*) do (
<font color="#804040"><b>IF</b></font><font color="#804040"><b> </b></font>.<font color="#6a5acd">%%</font>~nI<font color="#6a5acd">%%</font>~xI.<font color="#804040"><b>==</b></font>.<font color="#6a5acd">%%</font>~nJ<font color="#6a5acd">%%</font>~xJ. (
<font color="#008080">ECHO</font><font color="#ff00ff"> </font><font color="#008080">%%J</font><font color="#ff00ff"> ist zweimal vorhanden!</font>
<font color="#008080">DEL</font> <font color="#ff00ff">&quot;</font><font color="#008080">%%J</font><font color="#ff00ff">&quot;</font>
<font color="#008080">ECHO</font><font color="#ff00ff"> </font><font color="#008080">%%J</font><font color="#ff00ff"> geloescht.</font>
)))
<font color="#008080">PAUSE</font>

</div>
Weitere Informationen zu FOR und allgemein zu Batchbefehlen gibt es in der Windows-Hilfe,
am besten in der Datei ntcmds.chm oder auch mit dem /? - Parameter.

kotik
22.05.2007, 17:04
Hallo Joachim Hofmann,

ich Danke Dir für Deine schnelle Antwort. Das funktioniert! COOL.

Ich bin totaler Anfänger in Sachen Batch, kann man es so machen:

Batch starten
- Auswahlmenü wird angezeigt.
Es soll die alten 1. und 2. Pfade angezeigt werden. Dann kann man auswählen so lassen oder ändern.
- Hier kann man dann 1. oder den 2. Pfad ändern und zwar, wenn es geht mit dem kleinem Fenster von dem Explorer (ich weiß nicht wie das heißt) auswählen.
Der 2. Pfad steht immer für den, wo die Daten gelöscht werden.
Dann sollen die Dateien gesamt und, die die gelöscht wurden, am Ende als Zahl angezeigt werden.

Ach so kann man noch eine Auswahl machen, wo man nur ein Pfad macht. Das alle Daten (incl Unterverz.) nur unter dem Pfad überprüft werden und dort auch die doppelten gelöscht werden?

Großen Dank im Voraus!!!

Joachim Hofmann
23.05.2007, 09:14
Kotik -


>Batch starten
>- Auswahlmenü wird angezeigt.
>Es soll die alten 1. und 2. Pfade angezeigt werden. Dann kann man auswählen so lassen oder ändern.
Alte Pfade speichern könnte man mit dem Umleitungsoperator >> Datei.txt
Die Pfade dann möglicherweise wiederholen mit dem for-Befehl mit "Dateianalyse".

>- Hier kann man dann 1. oder den 2. Pfad ändern und zwar, wenn es geht mit dem kleinem Fenster von dem Explorer (ich weiß nicht wie das heißt) auswählen.
Einen grafischen Dialog gibt es sowieso nicht in Batch, nur mit vbscript machbar. Geht natürlich auch. Mit Batch dagegen gibt es textbasierte Dialoge. Text anzeigen kann man mit ECHO und Werte eingeben mit SET.

>Der 2. Pfad steht immer für den, wo die Daten gelöscht werden.
>Dann sollen die Dateien gesamt und, die die gelöscht wurden, am Ende als Zahl angezeigt werden.
Arithmetik gibt es auch in Batch, wenn auch wenig dokumentiert.
>Ach so kann man noch eine Auswahl machen, wo man nur ein Pfad macht. Das alle Daten (incl Unterverz.) nur unter dem Pfad überprüft werden und dort auch die doppelten gelöscht werden?
Müßte man beim bisherigen noch vor dem Löschen oder Vergleichen testen, ob die aktuellen Pfade gleich sind.

Mir ist bisher nicht klar, ob Du auch selbst Programmierarbeit leisten willst, oder Dir jemand anders Dein Programm schreiben soll.

kotik
23.05.2007, 09:58
Hallo,

danke für die Antwort. Wie schon am Anfang gesagt, dass ich sehr wenig Erfahrung mit Programmieren habe, deswegen Bitte ich auch um Hilfe. Wenn ich das selber könnte, hätte ich keinen Beitrag geschrieben.


Ich bin Dir sehr dankbar für Deine Hilfe, aber wenn es Dir zu schwer ist, dann lassen wir es.

>>>>Ach so kann man noch eine Auswahl machen, wo man nur ein Pfad macht. Das alle Daten (incl Unterverz.) nur unter dem Pfad überprüft werden und dort auch die doppelten gelöscht werden?
Müßte man beim bisherigen noch vor dem Löschen oder Vergleichen testen, ob die aktuellen Pfade gleich sind.<<<<<
Wie kriegt man das den hin? Wie schon gesagt, hab Null Ahnung!
Bevor ich was hier rein schreibe, lese ich und probiere viel aus, aber dass sind alles so speziellen Sachen die ich brauche und da kommt man nicht so leicht ohne Erfahrung drauf.

Danke

kotik
23.05.2007, 12:38
Ach ja, mit der Batch, werden nicht alle Duplikate gefunden!
Ich habe noch mal gründlich untersucht.

Joachim Hofmann
23.05.2007, 17:07
Nicht alle? Welche denn nicht?
Das Codestück hatte ich sogar erfolgreich getested.

kotik
23.05.2007, 19:52
Ja das Codestück funkt. auch, aber ich habe die gleichen Verz. mit einem Programm getestet und nochmal viele mp3`s gefunden. Die waren eigentlich mit dem gleichen Namen nur die Größe war unterschiedlich.
Danke

Joachim Hofmann
24.05.2007, 16:18
Kann schon sein, das das Codestück nur für doppelte, nicht aber darüberhinaus für noch mehr gleiche Dateien funktioniert. Wenn ein Dateiname "außen" gefunden wird wird die gleichnamige Datei "innen" gelöscht. Wenn aber "innen" noch mehr solche Dateien sind, werden die nicht mehr gesehen, weil der Name "außen" schon durch ist.
So einfach ist es also nicht. Schade!

kotik
24.05.2007, 19:50
Ja, das stimmt. Schade.

Aber trotzdem großen Dank an Dich!

kotik
11.06.2007, 15:17
Hallo,

ich habe da noch eine Frage. Kann man eine txt-Datei auf Duplikate überprüfen?

Ich habe eine TXT und dort sind mehrere Einträge und ich wollte die doppelten löschen.

Danke im Voraus!

kldtz
15.01.2008, 21:26
Du könntest zunächst folgendes ausführen:
type datei.txt|sort>test1.tmp

| ist die Pipe (ALT+124 oder ALTGR+<).
sort funktioniert nur bis zu einer gewissen Dateigröße, da musst du mal ausprobieren, ob es für deinen Anwendungszweck geht.
test1.tmp enthält nun alle Zeilen in alphabetischer Reihenfolge.
Beispiel:
test1
test2
test3
test1
test4

wird zu

test1
test1
test2
test3
test4

Wie man jede Zeile von test1.tmp nur einmal anzeigen läßt, weiß ich gerade nicht. Aber immerhin wird die manuelle Überprüfung durch sort etwas vereinfacht.

HTH

Pumuckel92
20.05.2008, 16:57
Hallo an alle,

kann mir jemand dieses script so umschreiben, dass wenn eine Datei im zweiten Ordner nicht existiert, sie dorthin kopiert wird??? Ich wäre sehr dankbar.

ECHO OFF
for /R c:\t1\ %%I in (*.*) do (
for /R c:\t2\ %%J in (*.*) do (
IF .%%~nI%%~xI.==.%%~nJ%%~xJ. (
ECHO %%J ist zweimal vorhanden!
DEL "%%J"
ECHO %%J geloescht.
)))
PAUSE


Wenn es nicht zu frech ist, vielleicht ne Erklärung der einzelnen schritte, ich blick in dem script nicht durch.
Danke