Kopieren Sie Netzwerkdateien mit übereinstimmenden Dateinamen aus einer Dateiliste mithilfe eines Windows-Batch-Skripts

Kopieren Sie Netzwerkdateien mit übereinstimmenden Dateinamen aus einer Dateiliste mithilfe eines Windows-Batch-Skripts

Ich habe 2 Dateien, von denen eine bestimmte Schlüsselwörter enthält und die andere eine Liste mit Pfaden. Ich möchte die Schlüsselwörter aus der ersten Dateiliste in der Liste mit Dateipfaden suchen und, falls gefunden, die Dateien aus dem angegebenen Dateipfad in einen bestimmten Zielordner kopieren.

Erster Dateiinhalt

Keyword1
Keyword2
Keyword3
Keyword4

Zweiter Dateiinhalt

\\server\path...\Keyword1.txt
\\server\path...\Keyword1_0_1.txt
\\server\path...\Keyword2_0_1.txt
\\server\path...\Keyword2_1_9.txt
\\server\path...\Keyword3_1_0_1.txt

Dazu muss ich das Windows-Batch-Skript schreiben.

============================================================

Tut mir leid, @pimp-juice-it, ich bin nicht sicher, wie ich den Screenshot einfügen soll. Daher kopiere ich die Ausgabe unten ein -

d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\33.txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\44.txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\44.txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55.txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\55.txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55 - Kopie (2).txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\55 - Kopie (2).txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55 - Kopie.txt"

wie Sie sehen, ist das Schlüsselwort „55“ im UNC vorhanden, aber die Bedingung wird in der FOR-Schleife trotzdem nicht als True validiert und es wird direkt zum nächsten UNC gewechselt. Unten sehen Sie den Code -

:FileExist FOR /R "%~2" %%G IN (%~1*) DO ECHO "%~1"

Antwort1

Sie können die Liste der „Schlüsselwörter“ einmal durchlaufen und die iterierten Schlüsselwortwerte zusammen mit einigen eingeschlossenen Platzhalterzeichen als Suchzeichenfolgen verwenden.dh *<Keyword>*. Sie können den Verzeichnisbaum jedes UNC-Pfadwerts von seiner Dateiliste aus durchgehen und den Kopiervorgang nur für die vorhandenen Werte ausführen, die mit der Suchzeichenfolge „Schlüsselwörter“ übereinstimmen.

Im Wesentlichen aber ...

  • Der erstefür /fDie Schleife liest jede Zeile der String-Dateiliste nacheinander und der Wert jeder Zeile ist ein iterierter Wert, der als erstes Argument an den AnrufBefehl.
  • Der Zweitefür /fDie Schleife liest jede Zeile der UNC-Pfaddateiliste nacheinander und übergibt sie und den ersten Argumentwert, der von der ersten übergeben wirdfür /fSchleife als zwei Argumente mit ihrer AnrufBefehl.
  • Das Letztefür /rDie Schleife durchsucht rekursiv den iterierten UNC-Pfad mit dem iterierten Zeichenfolgenwert als separate übergebene Argumente und kopiert anschließend alle übereinstimmenden Dateien.

Batch-Skript

@ECHO ON

SET "strList=\\server\Folder\Path\SearchStrings.txt"
SET "pathList=\\server\Folder\Path\UNCPaths.txt"
SET "targetPath=\\server\target\folder\path"

FOR /F "USEBACKQ TOKENS=*" %%S IN ("%strList%") DO CALL :Paths "%%~S"
PAUSE
EXIT

:Paths
FOR /F "USEBACKQ TOKENS=*" %%P IN ("%pathList%") DO CALL :FileExist "%~1" "%%~P"
GOTO :EOF

:FileExist
FOR /R "%~2" %%C IN (*%~1*) DO XCOPY /F /Y "%%~C" "%targetPath%\"
GOTO :EOF

Weitere Ressourcen

  • Für /F

  • Anruf

    Der CALL-Befehl übergibt die Steuerung an die Anweisung nach dem angegebenen Label zusammen mit den angegebenen Parametern. Um die Subroutine zu verlassen, geben Sie GOTO:eofdies an, um die Steuerung an das Ende der aktuellen Subroutine zu übertragen.

  • Für /R

    FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
    
        Walks the directory tree rooted at [drive:]path, executing the FOR
        statement in each directory of the tree.  If no directory
        specification is specified after /R then the current directory is
        assumed.  If set is just a single period (.) character then it
        will just enumerate the directory tree.
    

verwandte Informationen