slugger
Goto Top

Doppelte Ordner mit Inhalt (in Verschiedenen Verzeichnissen) zusammenführen

hallo experten,

ich hoffe (eigentlich weiss ich es) ihr könnt mir helfen.

folgende situation:

ich habe auf laufwerk p dateien in ordnern mit selben namen und mit einem "kommentar als zusatz" in einem "Archiv"-verzeichnis

Beispiel:

p:\=ARCHIV=\10000000 - 10499999\10000086\10000086.csv
p:\=ARCHIV=\10000000 - 10499999\10000086\10000086 - SP.csv

nun möchte ich schauen bzw suchen ob es den ordner 10000086 schon
in einem anderen verzeichnis gibt und den inhalt dann dorthin verschieben sodas die archivverzeichnisse verschwinden bzw in die neue ordnerstruktur intigriert wird

p:\DG 100\
p:\DK 105\
p:\DK 120\
p:\DK 120 UF\
p:\DK 255 F\
p:\DK 400 N\
p:\DK 460 UF\
p:\DK 500 UF\

ich habe hier schon so einiges gefunden aber nicht das richtige für mein problem

ich würde es ja manuell machen. aber bei ca 30000 verzeichnissen suche ich mich dumm und dämlich bzw verschiebe ewigkeiten dateien

noch ein paar details

so sieht die ordnerstruktur aus
2bb1d8aeda436e0613f98849f932e58f

doppelte dateien sollen entweder übersprungen werden oder mit einem extrazeichen umbenannt werden z.B.: §
umbenennen wäre besser da das leere verzeichniss beim verschieben ja verschwindet

danke & gruß

slugger

Content-Key: 214635

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

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: Metzger-MCP
Metzger-MCP 19.08.2013 aktualisiert um 13:08:27 Uhr
Goto Top
Moin ...

Wie und nach welche Kriterium du da was wohin sortieren willst, wie der inhalt aus

p:\=ARCHIV=\10000000 - 10499999\10000086\10000086.csv in das Verzeichnis

p:\DG 100\ oder
p:\DK 120 UF\

kommt kann keiner erahnen. Das Bild hilft mir diesen Zusammenhang auch nicht besser zu verstehen -> Da kommst du nicht drumherrum es von hand zu erledigen.
um den Aufwand einzuschrenken, gibt es 3 Möglichkeiten

a
suche dir ein Tool zum Duplicate Finden ...
Sollche Tools geben aber auch immer eine Liste aus, wo die Duplicate gefunden wurden ... du hast dabei die Chance alle Duplicate zu löschen, wobei die Tools auch ein Löschsicherungs Ordner anbieten somit werden die Duplicate aus dem Sourcebereich verschoben und die Single Datein hast du rausgefiltert. Selbige können dann separat von dir gehändelt werden. Durch die Gui siehst du auch vor dem umsetzen ein Ergebnis.

b
Eine Batchdatei könnte dir da helfen indem das System da alles gegenüberstellt und auch verschiebt umbennent löscht -> musst dem System halt vertrauen

c
Alternative bietet Windows natürlich die Verschiebereien auch so an, das du doppelte Datei beim verschieben umbennenen kannst.

MFG Uwe
Mitglied: Slugger
Slugger 19.08.2013 um 13:58:16 Uhr
Goto Top
Zitat von @Metzger-MCP:
Moin ...

Wie und nach welche Kriterium du da was wohin sortieren willst, wie der inhalt aus

p:\=ARCHIV=\10000000 - 10499999\10000086\10000086.csv in das Verzeichnis

p:\DG 100\ oder
p:\DK 120 UF\

kommt kann keiner erahnen.

es soll ja auch nach dem ordner "10000086" in den verzeichnissen "DG 100", "DK 120 UF" usw gesucht werden. anschließend sollen die ordner verschoben werden samt inhalt

also wenn ordner a aus verzeichnis a in verzeichnis b inkl. aller unterordner vorhanden dann verschiebe ordner a nach unterordner in verzeichnis b, bei vorhandener datei zieldatei umbenennen in "dateiname $.xxx"
wenn ordner a aus verzeichnis a nirgendwo vorhanden ist dann nichts verschieben und weiter mit dem nächsten ordner in verzeichnis a
Mitglied: pieh-ejdsch
pieh-ejdsch 19.08.2013, aktualisiert am 22.08.2013 um 18:09:33 Uhr
Goto Top
moin Slugger,

in der CMD-Line hab ich das mal kurz (na gut bei 'nem Bier) aufgrund Deiner Daten zusammengeschruppt:
> for %Q in (P:) do @for %A in ("echo move") do @for /f "delims=" %i in ('" dir /b /ad /s "%~fQ\????????" 2>nul |findstr /virc:\\=ARCHIV=\\ /c:\\=VORLAGEN=\\ |findstr /e \\[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] "') do @cmd /c "for /r "%~fQ\=Archiv=" %a in ("%~nxi\*") do @for /f %N in ('2^>nul (dir /b "%~fi\%~nxa" "%~fi\%~na [*]%~xa"^&echo^(^)^|find /c /v ""') do @echo(&if %N gtr 1 (%~A "%a" "%i\%~na [%N]%~xa") else %~A "%a" "%i""  

[edit] die eckigen Klammern um die Ordnernamen entfernt. [/edit]

In der ersten Schleife %Q bezeichnet Deinen Pfad.
In der zweiten Schleife %A ist Deine Aktion. Echo zeigt nur an was es machen würde, wenn Du es entfernst.
Das erste größer als ist mein Prompt.

Das kann sicher bei Erfolg auf eine CMD-Batch portiert werden.

Gruß Phil
Mitglied: Slugger
Slugger 20.08.2013 um 06:13:03 Uhr
Goto Top
hi phil,

damit kann ich fast gar nichts anfangen.
ist mir etwas zu heavy.
bräuchte eventuell eine kleine erklärung was hier was ist.

aber danke schonmal für die mühe
gruß
slugger
Mitglied: Metzger-MCP
Metzger-MCP 20.08.2013 um 10:08:42 Uhr
Goto Top
Moin
Ich bastel mal was zusammen, sofern mir da andere nicht zuvorkommen.
MFG Uwe
Mitglied: pieh-ejdsch
pieh-ejdsch 20.08.2013 aktualisiert um 16:50:27 Uhr
Goto Top
Es sind fünf verschachtelte Forschleifen.
1. Schleife %Q: QuellPfadangabe Laufwerk P:
2. Schleife %A: Welche Aktion soll mit den Dateien ausgeführt werden? -> echo move -> gefahrloses Anzeigen der Aktion.
3. Schleife %i: Auflistung aller Ordner mit 8 Ziffern und Umschließenden eckigen Klammern AUSSER aus den Ordnern [=ARCHIV=] sowie [=VORLAGEN=]
4. Schleife %a: Rekursives Auflisten der Dateien aus den gleichen Unterordnern von der 3. Schleife aus den [=ARCHIV=]-Ordner
5. Schleife %N: Suche nach schon Vorhandenen gleichnamigen Dateien in den Ordnern in welche die Dateien verschoben werden sollen. Bei gleichnamigen Dateien werden diese beim verschieben umbenannt sonst so gelassen.
Die Umbenennung erfolgt nach den Muster des Explorers aber mit [eckiger Klammer] anstatt (runder Klammer):
Datei.txt
Datei [2].txt
Datei [3].txt
Datei [4].txt
File.txt
File [2].txt
File [3].txt
...

Die ganze Zeile (ohne das Führende größer als Zeichen > kopierst Du.
Öffne eine Eingabeaufforderung unter Ausführen ( [Win]+[R] ) oder "Programme/Dateien suchen"
cmd /k prompt $g$s
Füge den Code mit Rechtsklick - Einfügen in die CMD-Line ein.
Mit Enter abschliessen.

Wenn das Ergebnis so passt dann das echo aus der zweiten Schleife Entfernen.

Gruß Phil
Mitglied: Slugger
Slugger 21.08.2013, aktualisiert am 22.08.2013 um 09:05:34 Uhr
Goto Top
danke für die mühe phil,

irgendwie stelle ich mich wie der erste mensch an
habe alles reinkopiert (ja auch ohne das erste > ) und auch ausgeführt aber es rührt sich nichts
sollte da nicht wenigsten was angezeigt werden (ich meine jetzt keinen fortschrittsbalken)
desweiteren ist mir nicht klar ob damit die ordner verschoben werden oder nur die dateien
die ordner sind ja dann leer und sollen deshalb auch entfernt werden damit im archiv keine leeren ordner existieren

also nur nochmal für die anderen zum verständnis (ich tu mich da immer etwas schwer mit dem erklären)

innerhalb der archivordner (ORT A) sind ordner mit einer acht-stelligen nummer (auftragsordner)

diese auftragsordner können auch in einem der den anderen ordnern, welche mit DG oder DK beginnen, vorhanden sein (ORT B)

wenn der auftragsordner aus ORT A in ORT B vorhanden ist, dann soll der inhalt von A nach B verschoben werden und demzufolge auch auf A nicht mehr vorhanden sein

meine güte ist das kompliziert zu erklären
ich hoffe es kommt einigermaßen verständlich rüber

gruß
slugger

edit:

funktioniert dies auch mit netzlaufwerken ?
irgendwie macht er da nix
nachdem ich enter drücke springt er lediglich in die neue commandozeile
wo soll er mir da was anzeigen ?
Mitglied: Slugger
Slugger 22.08.2013 um 09:09:04 Uhr
Goto Top
geht alles nicht
Mitglied: pieh-ejdsch
pieh-ejdsch 22.08.2013 um 18:17:54 Uhr
Goto Top
moin Slugger,

es lag an den Eckigen Klammern um die Ordnernamen, welche in deinem Bild zu sehen sind. Es ist aber die Darstellung Deines Norton Commander.
Ich hab die Eckigen Klammern aus der Suche Entfernt. Jetzt sollte die Zeile zumindest ein Ergebnis bringen.

Batch Erstellung nach Feedback.

Gruß Phil
Mitglied: Slugger
Slugger 29.08.2013 aktualisiert um 09:42:40 Uhr
Goto Top
hallo phil,

habe es probiert, aber erfolglos

ich habe folgendes hineinkopiert

for %Q in (T:) do @for %A in ("echo move") do @for /f "delims=" %i in ('" dir /b /ad /s "%~fQ\????????" 2>nul |findstr /virc:\\=ARCHIV=\\ /c:\\=VORLAGEN=\\ |findstr /e \\[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] "') do @cmd /c "for /r "%~fQ\=Archiv=" %a in ("%~nxi\*") do @for /f %N in ('2^>nul (dir /b "%~fi\%~nxa" "%~fi\%~na [*]%~xa"^&echo^(^)^|find /c /v ""') do @echo(&if %N gtr 1 (%~A "%a" "%i\%~na [%N]%~xa") else %~A "%a" "%i""  

anschließend wußte ich nicht was (echo(s)) ich alles entfernen muß damit es funktioniert
habe dementsprechend nur das erste echo entfernt, das sah dann so aus

for %Q in (T:) do @for %A in (" move") do @for /f "delims=" %i in ('" dir /b /ad /s "%~fQ\????????" 2>nul |findstr /virc:\\=ARCHIV=\\ /c:\\=VORLAGEN=\\ |findstr /e \\[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] "') do @cmd /c "for /r "%~fQ\=Archiv=" %a in ("%~nxi\*") do @for /f %N in ('2^>nul (dir /b "%~fi\%~nxa" "%~fi\%~na [*]%~xa"^&echo^(^)^|find /c /v ""') do @echo(&if %N gtr 1 (%~A "%a" "%i\%~na [%N]%~xa") else %~A "%a" "%i""  

ich habe mal auf T: eine kopie erstellt (vorsichtshalber)
P: und T: sind netzlaufwerke, macht dies einen unterschied oder sollte man dies nur lokal machen z.b. auf C: oder D:

gruß
slugger
Mitglied: Slugger
Slugger 19.09.2013, aktualisiert am 23.09.2013 um 13:31:59 Uhr
Goto Top
ich brauche immernoch hilfe
leider klappt es nicht
Mitglied: Slugger
Slugger 23.09.2013 um 13:32:21 Uhr
Goto Top
scheint wohl doch recht heftig zu sein das problem
face-sad
Mitglied: Slugger
Slugger 20.11.2013 um 12:57:13 Uhr
Goto Top
schade das mir hier keiner weiterhelfen kann face-sad
Mitglied: pieh-ejdsch
pieh-ejdsch 20.11.2013 um 18:33:54 Uhr
Goto Top
moin Slugger,

Eventuell ist die Ordnerliste des Zieles in der Forschleife nicht praktikabel.
Die Liste wird nun Vorab erstellt und danach in einer Schleife abgearbeitet.
Hier ist die Umsetzung als Batch:
@echo off
setlocal
set  Quelle=P:
set  Aktion=echo move
set  "Liste=%temp%\Liste_Ziele.txt"  

 rem Liste der vorhandenen Zielordner erstellen
dir /b /ad /s "%Quelle%\????????" 2>nul |findstr /virc:\\=ARCHIV=\\ /c:\\=VORLAGEN=\\ |findstr /e \\[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] >"%Liste%"  

 rem Dateien aus dem Archiv in die jeweiligen Ziele verschieben
for /f "usebackq delims=" %%z in ("%Liste%") do for /r "%Quelle%\=Archiv=" %%q in ("%%~nxz\*") do (  
  for /f %%N in ('2^>nul (dir /b "%~fq\%%~nxz" "%~fq\%%~nz [*]%%~xz"^&echo^(^)^|find /c /v ""') do if %%N gtr 1 (  
         %Aktion% "%%q" "%%z\%%~nq [%%N]%%~xq"  
  ) else %Aktion% "%%q" "%%z"  
)
del "%Lsite%"  

Gruß Phil