Dateiliste aus lokaler Textdatei einlesen?
Moderators: white, Hacker, Stefan2
- t.rauner
- Junior Member
- Posts: 13
- Joined: 2012-07-01, 00:10 UTC
- Location: Sulzbach-Rosenberg, Germany
Dateiliste aus lokaler Textdatei einlesen?
BS: Windows 7 Pro x64 dt.
Hallo,
ich habe mir vor dem Aufrüsten meines NAS (NAS1) mit neuen Festplatten alle darauf befindliche Dateien auf ein zweites NAS (NAS2) gesichert (1:1-Kopie). Dort befinden sich nun alle Dateien in ihren ursprünglichen Ordnern, die auf NAS1 vorhanden waren, plus ältere, obsolete Sicherungskopien.
Ich habe mir nach dem Backup ein Dateiliste von NAS1 angelegt (dir /s/a-d/b NAS1:\*.*), und wollte nun "einfach" die in der Liste gespeicherten Dateien wieder zurücklesen. Und bin schon fast einen halben Tag am ergebnislosen Googeln. Ein einfaches Zurückkopieren - z. B. mit dem TC-Befehl "Verzeichnisse synchronisieren" würde nun alle Dateien plus der unerwünschten obsoleten Dateien auf NAS1 zurück kopieren. Also muss die Kopieraktion unter Berücksichtigung der Liste (Teilmenge der Dateien auf NAS2) stattfinden.
Was ich gefunden habe, sind diverse Vorschlage, die auf "for /f ..."-Schleifen für die Eingabeaufforderung beruhen. So weit, so gut, die Lösung ist grottenlangsam und ein bisschen krude. Die Dateiliste habe ich so modifiziert:
Aus:
\\NAS1\extra\lw_y\Programme\TightVNC\vncviewer.exe
\\NAS1\public\SHELL32.icl
\\NAS1\video\multimedia\Queen\Queen - Love of My Life.flv
...
wurde:
\extra\lw_y\Programme\TightVNC\vncviewer.exe
\public\SHELL32.icl
\video\multimedia\Queen\Queen - Love of My Life.flv
...
Darauf basiert nun der folgende Befehl:
for /f "delims=" %i in (NAS1.lst) do @echo. & @echo Copy \\NAS1%i from & @xcopy /d /y /i "\\NAS2%i" "\\NAS1%i\..\"
Der Befehl führt dann zu Ausgaben wie:
Copy \\NAS1\extra\lw_y\Programme\TightVNC\vncviewer.exe from
\\NAS2\extra\lw_y\Programme\TightVNC\vncviewer.exe
1 Datei(en) kopiert
Ich denke mir aber, dass das komfortabler gehen müsste. Ich habe via Google ein Tool gesucht, das meine Dateiliste mit kompletten Pfadangaben in eine Filebox einliest, in einem Eingabefeld Modifikationen am Pfad erlaubt (mache "\\NAS2\" aus "\\NAS1\") und dann einen Kopiervorgang mit allen Pfadangaben startet. Leider habe ich nichts passendes gefunden; meist resultierte eine "flatten"-Aktion, d.h., alle Dateien aus allen Unterverzeichnissen landeten genau in einem Zielverzeichnis, wobei gleichnamige Dateien aus unterschiedlichen Unterverzeichnissen sich gegenseitig wild überschrieben. Fehlanzeige.
Der TC kann z. B. über den Suchdialog aus dem Dateisystem offenbar beliebige Listen ins Dateifenster laden, indem die Suchergebnisse mit der Schaltfläche "anwenden" ins Dateifenster geladen werden; eine Möglichkeit, eine Textdatei als Basis für die Dateiliste zu verwenden, besteht offenbar nicht. Damit hätte man schon mal eine Ausgangsbasis. Wenn man die - ersatzweise via Suchdialog gewonnene - Dateiliste kopiert, macht die darauffolgende Kopieraktion aber wieder die Ordnerstruktur platt ("flatten"): alle Dateien landen im aktiven Ordner im Zielfenster, die Unterordnerstruktur wird nicht repliziert.
Damit ich meinem Ziel mit dem TC näher kommen könnte, müsste ich:
1) eine Möglichkeit haben, die Dateiliste (Quelle) aus meiner Textdatei zu füllen und
2) eine Kopieraktion finden, die nicht nur die Dateien, sondern auch die Ordnerstruktur übernimmt.
Was passieren soll, ist also:
\\NAS1\extra\lw_y\Programme\TightVNC\vncviewer.exe => \\NAS2\extra\lw_y\Programme\TightVNC\vncviewer.exe
\\NAS1\public\SHELL32.icl => \\NAS2\public\SHELL32.icl
\\NAS1\video\multimedia\Queen\Queen - Love of My Life.flv => \\NAS2\video\multimedia\Queen\Queen - Love of My Life.flv
Weiß jemand, wie man den Total Commander zu so einer Aktion überreden kann? Oder kennt jemand ein anderes Tool, das - so ähnlich wie das TC-Mehrfach-Umbenenn-Tool - Suchen und Ersetzen-Funktionalität für Pfadanteile bietet? (1: suche in jedem Dateinamen im Zielfenster nach "\\NAS1\" und ersetze dies mit "\\NAS2\"; 2: kopiere dann die Datei aus dem Quellfenster in das in Schritt 1 definierte Verzeichnis)
Für diesbezügliche Tipps wäre ich sehr dankbar.
Beste Grüße,
t.rauner
Hallo,
ich habe mir vor dem Aufrüsten meines NAS (NAS1) mit neuen Festplatten alle darauf befindliche Dateien auf ein zweites NAS (NAS2) gesichert (1:1-Kopie). Dort befinden sich nun alle Dateien in ihren ursprünglichen Ordnern, die auf NAS1 vorhanden waren, plus ältere, obsolete Sicherungskopien.
Ich habe mir nach dem Backup ein Dateiliste von NAS1 angelegt (dir /s/a-d/b NAS1:\*.*), und wollte nun "einfach" die in der Liste gespeicherten Dateien wieder zurücklesen. Und bin schon fast einen halben Tag am ergebnislosen Googeln. Ein einfaches Zurückkopieren - z. B. mit dem TC-Befehl "Verzeichnisse synchronisieren" würde nun alle Dateien plus der unerwünschten obsoleten Dateien auf NAS1 zurück kopieren. Also muss die Kopieraktion unter Berücksichtigung der Liste (Teilmenge der Dateien auf NAS2) stattfinden.
Was ich gefunden habe, sind diverse Vorschlage, die auf "for /f ..."-Schleifen für die Eingabeaufforderung beruhen. So weit, so gut, die Lösung ist grottenlangsam und ein bisschen krude. Die Dateiliste habe ich so modifiziert:
Aus:
\\NAS1\extra\lw_y\Programme\TightVNC\vncviewer.exe
\\NAS1\public\SHELL32.icl
\\NAS1\video\multimedia\Queen\Queen - Love of My Life.flv
...
wurde:
\extra\lw_y\Programme\TightVNC\vncviewer.exe
\public\SHELL32.icl
\video\multimedia\Queen\Queen - Love of My Life.flv
...
Darauf basiert nun der folgende Befehl:
for /f "delims=" %i in (NAS1.lst) do @echo. & @echo Copy \\NAS1%i from & @xcopy /d /y /i "\\NAS2%i" "\\NAS1%i\..\"
Der Befehl führt dann zu Ausgaben wie:
Copy \\NAS1\extra\lw_y\Programme\TightVNC\vncviewer.exe from
\\NAS2\extra\lw_y\Programme\TightVNC\vncviewer.exe
1 Datei(en) kopiert
Ich denke mir aber, dass das komfortabler gehen müsste. Ich habe via Google ein Tool gesucht, das meine Dateiliste mit kompletten Pfadangaben in eine Filebox einliest, in einem Eingabefeld Modifikationen am Pfad erlaubt (mache "\\NAS2\" aus "\\NAS1\") und dann einen Kopiervorgang mit allen Pfadangaben startet. Leider habe ich nichts passendes gefunden; meist resultierte eine "flatten"-Aktion, d.h., alle Dateien aus allen Unterverzeichnissen landeten genau in einem Zielverzeichnis, wobei gleichnamige Dateien aus unterschiedlichen Unterverzeichnissen sich gegenseitig wild überschrieben. Fehlanzeige.
Der TC kann z. B. über den Suchdialog aus dem Dateisystem offenbar beliebige Listen ins Dateifenster laden, indem die Suchergebnisse mit der Schaltfläche "anwenden" ins Dateifenster geladen werden; eine Möglichkeit, eine Textdatei als Basis für die Dateiliste zu verwenden, besteht offenbar nicht. Damit hätte man schon mal eine Ausgangsbasis. Wenn man die - ersatzweise via Suchdialog gewonnene - Dateiliste kopiert, macht die darauffolgende Kopieraktion aber wieder die Ordnerstruktur platt ("flatten"): alle Dateien landen im aktiven Ordner im Zielfenster, die Unterordnerstruktur wird nicht repliziert.
Damit ich meinem Ziel mit dem TC näher kommen könnte, müsste ich:
1) eine Möglichkeit haben, die Dateiliste (Quelle) aus meiner Textdatei zu füllen und
2) eine Kopieraktion finden, die nicht nur die Dateien, sondern auch die Ordnerstruktur übernimmt.
Was passieren soll, ist also:
\\NAS1\extra\lw_y\Programme\TightVNC\vncviewer.exe => \\NAS2\extra\lw_y\Programme\TightVNC\vncviewer.exe
\\NAS1\public\SHELL32.icl => \\NAS2\public\SHELL32.icl
\\NAS1\video\multimedia\Queen\Queen - Love of My Life.flv => \\NAS2\video\multimedia\Queen\Queen - Love of My Life.flv
Weiß jemand, wie man den Total Commander zu so einer Aktion überreden kann? Oder kennt jemand ein anderes Tool, das - so ähnlich wie das TC-Mehrfach-Umbenenn-Tool - Suchen und Ersetzen-Funktionalität für Pfadanteile bietet? (1: suche in jedem Dateinamen im Zielfenster nach "\\NAS1\" und ersetze dies mit "\\NAS2\"; 2: kopiere dann die Datei aus dem Quellfenster in das in Schritt 1 definierte Verzeichnis)
Für diesbezügliche Tipps wäre ich sehr dankbar.
Beste Grüße,
t.rauner
Wenn die alten Sicherungskopien in der ersten Verzeichnisebene zu finden sind, dann markiere alle Verzeichnisse mit Strg+A (oder Num*) und deselektiere diejenigen Verzeichnisse, die du nicht haben willst. Dann rufst du die Funktion "Verzeichnisse synchronisieren" auf und legst los; andererseits genügt dann auch ein normales Kopieren.
Wenn die alten Sicherungskopien Dateien bestimmter Typen sind, die sich nicht in den gewünschten Verzeichnissen finden, so lässt sich das ebenfalls mit der Verzeichnissynchronisierung machen. Funktion aufrufen, Dateitypen in der mittleren Box einstellen - z.B. und los geht's.
Wenn keine der beiden Bedingungen zutrifft, wird's aufwendiger für dich. Es wäre aber schön und IMO wichtig, wenn du erstmal kundtun würdest, wo sich die Verzeichnisse befinden, die nicht transferiert werden sollen (tief irgendwo in der Struktur oder in der ersten Ebene). Anhand dieser Info kann man sich Gedanken machen.
MfG Dalai
Wenn die alten Sicherungskopien Dateien bestimmter Typen sind, die sich nicht in den gewünschten Verzeichnissen finden, so lässt sich das ebenfalls mit der Verzeichnissynchronisierung machen. Funktion aufrufen, Dateitypen in der mittleren Box einstellen - z.B.
Code: Select all
*.* | *.nicht_gewünscht *.auch_nicht_gewünscht
Wenn keine der beiden Bedingungen zutrifft, wird's aufwendiger für dich. Es wäre aber schön und IMO wichtig, wenn du erstmal kundtun würdest, wo sich die Verzeichnisse befinden, die nicht transferiert werden sollen (tief irgendwo in der Struktur oder in der ersten Ebene). Anhand dieser Info kann man sich Gedanken machen.
MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
- t.rauner
- Junior Member
- Posts: 13
- Joined: 2012-07-01, 00:10 UTC
- Location: Sulzbach-Rosenberg, Germany
Re:Dateiliste aus lokaler Textdatei einlesen?
Hallo Dalai,
vielen Dank für Deine prompte Antwort. Leider ist es nicht so einfach, wie in Deinen zwei Lösungen beschrieben. Stelle Dir einfach ein typisches Dokumentenverzeichnis von MS Word vor (es geht aber nicht nur um Word-Dokumente, sondern um eine wilde Mixtur eines Familien-NAS). Da hast Du z. B. auf einer Verzeichnisebene folgende Situation:
Brief an Versicherung - Entwurf 01.doc
Brief an Versicherung - Entwurf 01.wbk
Brief an Versicherung mit Anmerkungen - Entwurf 02.doc
Brief an Versicherung mit Anmerkungen - Entwurf 02.wbk
Brief an Versicherung - Endfassung.doc
Brief an Versicherung - Endfassung.wbk
Das, was nun auf NAS1 (dem "Live-NAS") gespeichert war und bleiben soll, sind die "beiden Endfassungen" - also Original-Word-Dokument und dessen Sicherheitskopie. Die Entwürfe sind via Backup auf NAS2 gelandet, sollen dort zu Referenzzwecken auch bleiben, aber auf NAS1 wurden sie gelöscht, um den Überblick zu behalten.
Das Ganze stelle Dir nun nicht nur im Word-Dokumentenverzeichnis vor, sondern auch im Excel-Tabellenverzeichnis, im Rechnungsordner, im Download-Ordner (alte Download-Versionen neben aktuellen auf NAS2, auf NAS1 nur die aktuellen Versionen) u.v.a.m., und zwar in unterschiedlichen Verzeichnisebenen. Ich hoffe, dass damit klar ist, dass NAS2 eine Obermenge von Dateien aus NAS1 enthält, und zwar:
Deine Antwort scheint mir aber auch schon eine Bestätigung dessen zu sein, was ich vermute: Es gibt keine Möglichkeit in Total Commander, die Quell-Dateiliste (z. B. linkes Dateipanel) statt über Suchfunktion o. ä. über das Einlesen einer (gefilterten) Liste zu befüllen, richtig?
Bin für jeden weiteren Tipp dankbar!
Beste Grüße,
Thomas
vielen Dank für Deine prompte Antwort. Leider ist es nicht so einfach, wie in Deinen zwei Lösungen beschrieben. Stelle Dir einfach ein typisches Dokumentenverzeichnis von MS Word vor (es geht aber nicht nur um Word-Dokumente, sondern um eine wilde Mixtur eines Familien-NAS). Da hast Du z. B. auf einer Verzeichnisebene folgende Situation:
Brief an Versicherung - Entwurf 01.doc
Brief an Versicherung - Entwurf 01.wbk
Brief an Versicherung mit Anmerkungen - Entwurf 02.doc
Brief an Versicherung mit Anmerkungen - Entwurf 02.wbk
Brief an Versicherung - Endfassung.doc
Brief an Versicherung - Endfassung.wbk
Das, was nun auf NAS1 (dem "Live-NAS") gespeichert war und bleiben soll, sind die "beiden Endfassungen" - also Original-Word-Dokument und dessen Sicherheitskopie. Die Entwürfe sind via Backup auf NAS2 gelandet, sollen dort zu Referenzzwecken auch bleiben, aber auf NAS1 wurden sie gelöscht, um den Überblick zu behalten.
Das Ganze stelle Dir nun nicht nur im Word-Dokumentenverzeichnis vor, sondern auch im Excel-Tabellenverzeichnis, im Rechnungsordner, im Download-Ordner (alte Download-Versionen neben aktuellen auf NAS2, auf NAS1 nur die aktuellen Versionen) u.v.a.m., und zwar in unterschiedlichen Verzeichnisebenen. Ich hoffe, dass damit klar ist, dass NAS2 eine Obermenge von Dateien aus NAS1 enthält, und zwar:
- - die nahezu gleiche Ordnerstruktur (auf NAS2 evtl. zusätzliche Backup-Verzeichnisse, die auf NAS1 nicht mehr existieren)
- die Unterschiede in der Ordnerstruktur beziehen sich nur auf den Pfadbeginn (z. B. "\\NAS2\backup\" statt "\\NAS1\")
- die unerwünschten zusätzlichen Dateien liegen i. d. R. auf der gleichen Verzeichnisebene, wie die erwünschten, zurück-zu-kopierenden Dateien
Deine Antwort scheint mir aber auch schon eine Bestätigung dessen zu sein, was ich vermute: Es gibt keine Möglichkeit in Total Commander, die Quell-Dateiliste (z. B. linkes Dateipanel) statt über Suchfunktion o. ä. über das Einlesen einer (gefilterten) Liste zu befüllen, richtig?
Bin für jeden weiteren Tipp dankbar!
Beste Grüße,
Thomas
Last edited by t.rauner on 2012-07-01, 20:30 UTC, edited 1 time in total.
Re: Dateiliste aus lokaler Textdatei einlesen?
Mal überlegen. Du hast also eine Dateiliste, in der alle Dateien des alten NAS1 aufgelistet sind.t.rauner wrote:...
wurde:
\extra\lw_y\Programme\TightVNC\vncviewer.exe
\public\SHELL32.icl
\video\multimedia\Queen\Queen - Love of My Life.flv
...
- Im NAS2 Rootverzeichnis "Befehle-> Zweigansicht (mit Unterverzeichnissen)" aktivieren.
- "Markieren -> Auswahl aus Datei laden" aufrufen und diese Liste auswählen.
- "Markieren -> Auswahl umkehren"
- "Markieren -> Auswahl in Datei speichern"
Damit solltest du eine zweite Liste erhalten in der alle Dateien, die vorher bereits auf dem NAS2 waren, enthalten sind.
- Diese Liste dann als Ignorierliste laden: "Konfigurieren -> Einstellungen..:Ignorierliste [>>]"
- Ignorierliste aktivieren.
- Von NAS2 auf das neue NAS1 synchronisieren oder einfach kopieren.
- Die alte Ignorierliste wiederherstellen.
Gruß
Holger
@HolgerK: Die Idee ist prinzipiell gut, nur funktioniert sie nicht, denn in der mit "dir" erstellten Dateiliste sind mehr oder minder absolute Pfade, die sich leider nicht auf eine Zweigansicht anwenden lassen (hatte ich gestern als erstes probiert). Damit funktionieren auch alle folgenden Schritte nicht.
Selbst wenn der erste Schritt noch funktionierte, so sind in der mit "dir" erstellten Liste wahrscheinlich Umlaute als ASCII gespeichert und sind somit vom TC nicht ohne weiteren Zwischenschritt als solche erkennbar (jedenfalls nicht fürs Laden einer Markierung aus einer Datei).
Insofern bleibt aus meiner Sicht nur noch eine Schleife übrig, die man entweder in Batch oder AutoIt oder meinetwegen auch AutoHotkey implementieren kann.
MfG Dalai
Selbst wenn der erste Schritt noch funktionierte, so sind in der mit "dir" erstellten Liste wahrscheinlich Umlaute als ASCII gespeichert und sind somit vom TC nicht ohne weiteren Zwischenschritt als solche erkennbar (jedenfalls nicht fürs Laden einer Markierung aus einer Datei).
Insofern bleibt aus meiner Sicht nur noch eine Schleife übrig, die man entweder in Batch oder AutoIt oder meinetwegen auch AutoHotkey implementieren kann.
MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Re: Dateiliste aus lokaler Textdatei einlesen?
Hallo Holger,HolgerK wrote:- "Markieren -> Auswahl aus Datei laden" aufrufen und diese Liste auswählen.
ein kühner Ansatz!
Aber ob's auch klappt? Ich fürchte nämlich, ich hatte so eine ähnliche Idee auch schon mal, und ich glaube, mich dunkel daran zu erinnern, dass ich dabei feststellen musste, dass in der <Ctrl>B-Ansicht dann nur die Dateien unmittelbar aus dem <Ctrl>B-"Mutterverzeichnis" markiert werden, nicht aber diejenigen Dateien mit qualifizierter Pfadangabe, die in Wahrheit in Unterverzeichnissen stehen.
Umgekehrt wird ohne <Ctrl>B-Ansicht aber auch keine verzeichnisübergreifende Markierung geladen.
Ich kann mich irren und hoffe, ich tue es, aber..
mfg
algol
Es sei denn, "t.rauner" fände eine sinnvolle zeitliche Trennlinie zwischen den obsoleten Alt-Beständen und den aktuellen Dateien, die er nun zurücksichern möchte.Dalai wrote:Insofern bleibt aus meiner Sicht nur noch eine Schleife übrig, die man entweder in Batch oder AutoIt oder meinetwegen auch AutoHotkey implementieren kann.
Oder er hätte "Pech im Unglück" und die Kopien nicht mit dem Originaldatum erzeugt. Dann könnte man sie anhand des Kopierdatums zwar bequem zurückkopieren, aber es wäre bloss ein "Pyrrussieg", denn die Original-Zeitstempel wären dann verloren.
mfg
algol
Da kommt mir gerade ein Gedanke! Was haltet ihr davon?
Liste ins MRT mit Editor laden.
Vor den Qualifizierten Pfad jeweils einen neuen Parent-Orner setzen. Also:
\\#MOVENAS1\alter_Pfad
und dann "umbenennen". Das sollte doch alle Dateien aus der Liste auf NAS2 relativ verschieben.
Dann mit <Alt><F7> nur die #MOVENAS1-Strukturen suchen und die Treffer mit <Shift>"Anwenden" in ein neues Panel legen, dort alle markieren und nach "NAS1" kopieren.
Auf NAS1 wieder umbenennen und die Dateien relativ 1 Ebene "höhersetzen", sodass "#MOVENAS1" wieder verschwindet.
Ist natürlich auch nicht wirklich elegant, aber wäre es wert, diesen Ansatz weiterzuverfolgen?
mfg
algol
Liste ins MRT mit Editor laden.
Vor den Qualifizierten Pfad jeweils einen neuen Parent-Orner setzen. Also:
\\#MOVENAS1\alter_Pfad
und dann "umbenennen". Das sollte doch alle Dateien aus der Liste auf NAS2 relativ verschieben.
Dann mit <Alt><F7> nur die #MOVENAS1-Strukturen suchen und die Treffer mit <Shift>"Anwenden" in ein neues Panel legen, dort alle markieren und nach "NAS1" kopieren.
Auf NAS1 wieder umbenennen und die Dateien relativ 1 Ebene "höhersetzen", sodass "#MOVENAS1" wieder verschwindet.
Ist natürlich auch nicht wirklich elegant, aber wäre es wert, diesen Ansatz weiterzuverfolgen?
mfg
algol
@algol: Auch hier bleiben Umlaute ein Problem.
Ich hab mal etwas - basierend auf der vom OP bereits geposteten Schleife - in Batch gebastelt:Das abspeichern als z.B. filelist_copy.cmd, in einer separat aufgerufenen CMD (im TC über Menü Befehle > Kommandozeilenfenster öffnen) ausführen und erstmal durchgucken, ob's passt. Die Datei NAS1.lst muss sich dabei im selben Arbeitsverzeichnis liegen (sonst Pfad anpassen).
Da die Ausgabe sehr schnell durchlaufen wird, sollte man diese in eine Datei umleiten und sich dort anschauen. Wenn die Ausgabe in Ordnung ist, kann man zur Tat schreiten und das REM vor dem xcopy entfernen.
MfG Dalai
Ich hab mal etwas - basierend auf der vom OP bereits geposteten Schleife - in Batch gebastelt:
Code: Select all
@echo off
REM -----------------------------------------------------------------
REM Dateiliste aus lokaler Textdatei einlesen?
REM http://ghisler.ch/board/viewtopic.php?t=34901
REM -----------------------------------------------------------------
echo.
for /F "delims=" %%i IN (NAS1.lst) DO (
echo "\\NAS2%%~i" ==^> "\\NAS1%%~i"
REM xcopy /S /E /H /R /D /Y /I "\\NAS2%%~i" "\\NAS1%%~i" > NUL
)
Da die Ausgabe sehr schnell durchlaufen wird, sollte man diese in eine Datei umleiten und sich dort anschauen. Wenn die Ausgabe in Ordnung ist, kann man zur Tat schreiten und das REM vor dem xcopy entfernen.
MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Kommandos zurück!! Manchmal ist man aber auch wirklich vernagelt!
Es geht ganz einfach! Suche <Alt><F7> auf NAS2 (root) starten, Feld "Suche nach" freilassen (suche nach allen Dateien),
in Feld "Suche in" einfach mit vorangestelltem "@" die Dateiliste (mit Pfad) eingeben und Suche starten.
Es werden nun genau die Dateien "gefunden", die in der Liste stehen. Bisher hatte ich das nur mit Listen probiert, die lediglich zu durchsuchende Verzeichnisse enthielten, weil es mir irgendwie paradox vorkam, nach Dateien zu "suchen", die schon konkret in der Liste standen.
Ich hab's aber soeben mit einer Mini-Liste inklusive Dateinamen ausprobiert - und... es geht!
"Suchergebnis" dann einfach mit <Shift>"Anwenden" in ein neues Fenster/Panel legen, alles markieren und mit Hilfe des TC-Plugins "TreeCopyPlus 1.051" mit <Alt><F5>in das gegenüberliegende Fenster, voreingestellt auf \ (root) von NAS1 zurück-kopieren.
Link zum Plugin:http://www.totalcmd.net/download.php?id=TreeCopyPlus
Der Umweg über die "Suche" gestattet also tatsächlich, die Datei-Liste aus dem txt-file in ein gleichlautendes TC-Fenster mit den entsprechenden, konkreten Dateien umzusetzen!
HTH und mfg
algol
Es geht ganz einfach! Suche <Alt><F7> auf NAS2 (root) starten, Feld "Suche nach" freilassen (suche nach allen Dateien),
in Feld "Suche in" einfach mit vorangestelltem "@" die Dateiliste (mit Pfad) eingeben und Suche starten.
Es werden nun genau die Dateien "gefunden", die in der Liste stehen. Bisher hatte ich das nur mit Listen probiert, die lediglich zu durchsuchende Verzeichnisse enthielten, weil es mir irgendwie paradox vorkam, nach Dateien zu "suchen", die schon konkret in der Liste standen.
Ich hab's aber soeben mit einer Mini-Liste inklusive Dateinamen ausprobiert - und... es geht!
"Suchergebnis" dann einfach mit <Shift>"Anwenden" in ein neues Fenster/Panel legen, alles markieren und mit Hilfe des TC-Plugins "TreeCopyPlus 1.051" mit <Alt><F5>in das gegenüberliegende Fenster, voreingestellt auf \ (root) von NAS1 zurück-kopieren.
Link zum Plugin:http://www.totalcmd.net/download.php?id=TreeCopyPlus
Der Umweg über die "Suche" gestattet also tatsächlich, die Datei-Liste aus dem txt-file in ein gleichlautendes TC-Fenster mit den entsprechenden, konkreten Dateien umzusetzen!
HTH und mfg
algol
Hier noch eine Variante in AutoIt, die etwas aufwendiger aussieht, im Wesentlichen aber dasselbe tut wie die Batch-Version:Code kopieren, abspeichern als filelist_copy.au3, mit Aut2Exe aus dem AutoIt-Paket in eine EXE konvertieren - wichtig dabei: Haken bei "Console?" setzen! Dann die erzeugte EXE auf einer CMD starten und ggf. Ausgabe in Datei umleiten.
Wenn Ausgabe in Ordnung, Semikolon in der Zeile mit "FileCopy" entfernen, neu kompilieren und starten.
MfG Dalai
Code: Select all
global const $name = "NAS1.lst"
global $liste = FileOpen($name, 0)
global $line, $source, $target
while 1
$line = FileReadLine($liste)
if @error == -1 then ExitLoop
$source = "\\NAS2" & $line
$target = "\\NAS1" & $line
ConsoleWrite(StringFormat("%s ==> %s", $source, $target) & @CRLF)
$source = ASCII2ANSI($source)
$target = ASCII2ANSI($target)
;~ MsgBox(0, "", StringFormat("%s ==> %s", $source, $target))
; if NOT FileCopy($source, $target, 9) then ConsoleWrite(" Error!")
WEnd
FileClose($liste)
;------------------ Convert ASCII string into ANSI string -------------
Func ASCII2ANSI($str_ascii)
local $ascii= $str_ascii, $dummy, $result, $iError
$result = DllCall("user32.dll", "int", "OemToChar", "str", $ascii, "str", $dummy)
$iError = @error
if $iError <> 0 then
SetError($iError)
Return $str_ascii
Else
Return $result[2]
EndIf
EndFunc
Wenn Ausgabe in Ordnung, Semikolon in der Zeile mit "FileCopy" entfernen, neu kompilieren und starten.
MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Also das würde ich vorweg im Editor überprüfen und allenfalls bereinigen.Dalai wrote:@algol: Auch hier bleiben Umlaute ein Problem.
Z.B. "Ultraedit" aber auch andere Editoren können automatisch Textdateien von ASCII nach ANSI oder auch OEM bzw. UTF-8 / Unicode hin- und herwandeln. Das scheint mir also kein echter "deal-breker" zu sein.
Denkst Du nicht, dass meine neue "Express-Methode" derart komplexe Ansätze eigentlich erübrigt?Dalai wrote:Code kopieren, abspeichern als filelist_copy.au3, mit Aut2Exe aus dem AutoIt-Paket in eine EXE konvertieren - wichtig dabei: Haken bei "Console?" setzen! Dann die erzeugte EXE auf einer CMD starten und ggf. Ausgabe in Datei umleiten.
Schade nur, dass ich nicht eher auf diese Idee gekommen bin, dann hätten wir nicht so lange über die "mühsamen Wege" nachdenken müssen
mfg
algol
Dito. Aber dafür muss man erstmal wissen, dass das ein Problem ist, denn MS hat es auch im Jahre 2012 noch nicht hinbekommen, dass die CMD im ANSI-Modus arbeitet, auch dann nicht, wenn man ihr das mit entsprechendem Parameter sagt . Ich wollte mit meiner Anmerkung nur auf das Problem aufmerksam machen, so dass der OP entsprechend handelt und sich nicht später wundert, warum Dateien mit Umlauten fehlen oder falsche Dateinamen haben.algol wrote:Also das würde ich vorweg im Editor überprüfen und allenfalls bereinigen.Dalai wrote:@algol: Auch hier bleiben Umlaute ein Problem.
Nope, denn davon abgesehen, dass wir unsere Erkenntnisse fast zeitgleich kundtaten , funktioniert deine Methode erst ab TC 8.0 und nicht mit früheren Versionen. Meine Varianten sind zudem völlig unabhängig von TC. Ich will deine Methode keineswegs in Abrede stellen, beide haben ihre Berechtigung - und sicher ist es über den TC einfacher (und das Kopieren geht wahrscheinlich sogar schneller). Vielleicht findet es jemand hilfreich, der via Suchmaschine auf das Thema stößt oder sowas.algol wrote:Denkst Du nicht, dass meine neue "Express-Methode" derart komplexe Ansätze eigentlich erübrigt?
MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Hallo Dalai,Dalai wrote:Nope, denn davon abgesehen, dass wir unsere Erkenntnisse fast zeitgleich kundtaten , funktioniert deine Methode erst ab TC 8.0 und nicht mit früheren Versionen. Meine Varianten sind zudem völlig unabhängig von TC.
nachdem Du Dir mit dieser aufwendigen Batch-Lösung soviel Mühe gemacht hast und ich noch dazu unfähig war, Dir diese Mühe zu ersparen, weil ich so lange "den Wald vor lauter Bäumen nicht gesehen habe", liegt mir nichts ferner, als Deine Lösung in irgendeiner Form herabwürdigen oder kleinreden zu wollen.
Auch der berechtigte Hinweis auf die Umlaut-Frage war natürlich mehr als angebracht, betrifft er doch unser beider Lösungen. Aber, auch wenn ich lange "etwas auf der Leitung gestanden bin", letztendlich zählt, dass wir es beide geschafft haben, obwohl das Problem sich als weniger trivial herausgestellt hat, als es zunächst klingen mochte.
Glückwunsch und mfg
algol