
Ich habe eine Liste von Dateien, die aus einer Tabelle in einer SQL-Datenbank extrahiert wurden. Die Datei kann entweder eine durch Trennzeichen getrennte Textdatei oder eine Excel-Tabelle sein, je nachdem, was am besten funktioniert.
Die Datei sieht so aus
sourcePath1\fileName1, destPath1\fileName1
sourcePath2\fileName2, destPath2\fileName2
sourcePath3\fileName3, destPath3\fileName3
usw
Eine Spalte enthält den ursprünglichen Pfad und Dateinamen der Dateien, die zweite Spalte enthält den gewünschten Pfad und Dateinamen der Dateien. Dies wurde mithilfe einer Standardfunktion REPLACE() in der ursprünglichen SELECT-Anweisung erreicht.
Jetzt habe ich die Liste(n), die ich tatsächlich brauche, um die Quelldatei zum Ziel zu kopieren.
Ist dies über die Befehlszeile (Batch oder Powershell?) oder per Skripting oder einer GUI erreichbar?
Antwort1
Hier ist eine native Windows-Batch-Lösung zum Parsen einer Textdatei mit durch Kommas getrennten Werten (CSV).
@echo off
for /f "tokens=1,2 delims=," %%A in (file.csv) do (
copy %%A %%B
)
Antwort2
Basierend auf der Antwort von David Ruhmann funktioniert Folgendes. Es verwendet xcopy
und übergibt eine F
an die Eingabeaufforderung, die fragt, ob es sich bei der Datei um eine Datei oder einen Ordner handelt.
@echo off
for /f "tokens=1,2 delims=," %%A in (book1.csv) do (
cmd /c echo F | xcopy "%%~A" "%%~B"
)
BEARBEITEN: Tilde (~) gemäß Vorschlag von @DavidRuhmann hinzugefügt.
Antwort3
Dies ist mit einer Unix-Shell recht einfach. Hier ist, wie Sie es mit meinem tun könnenHamilton C-Schale. (DerFreie Versionwird dies tun.) Sie könnten etwas sehr Ähnliches tun mitCygwin bash
.
Der wirklich einfache Weg, dies zu tun, wäre, die Liste zu transformieren mitsedin ein Skript, in dem jede Zeile eine cp
Operation ist. Führen Sie dann einfach das Skript aus.
sed "s/^^/cp '/;s/, /' '/;s/^$/'/" < list.csv > copyscript.csh
copyscript
So copyscript.csh
würde diese Datei aussehen: