
У меня есть список файлов, извлеченных из таблицы в базе данных SQL. Файл может быть либо текстовым файлом с разделителями, либо таблицей Excel, в зависимости от того, что лучше подходит.
Файл выглядит так
sourcePath1\fileName1, destPath1\fileName1
sourcePath2\fileName2, destPath2\fileName2
sourcePath3\fileName3, destPath3\fileName3
и т. д.
Один столбец содержит исходный путь и имя файла файлов, второй столбец содержит желаемый путь и имя файла файлов. Это было получено с помощью стандартной функции REPLACE() в исходном операторе SELECT.
Теперь у меня есть список(ы), которые мне действительно нужны для копирования исходного файла в место назначения.
Можно ли это сделать с помощью командной строки (пакетной или Powershell?) или с помощью скриптов или графического интерфейса?
решение1
Ниже представлено пакетное решение Windows для анализа текстового файла со значениями, разделенными запятыми (csv).
@echo off
for /f "tokens=1,2 delims=," %%A in (file.csv) do (
copy %%A %%B
)
решение2
На основе ответа Дэвида Рухмана работает следующее. Он использует xcopy
и передает F
в приглашение, которое спрашивает, является ли файл файлом или папкой.
@echo off
for /f "tokens=1,2 delims=," %%A in (book1.csv) do (
cmd /c echo F | xcopy "%%~A" "%%~B"
)
ПРАВКА: Добавлена тильда (~) по предложению @DavidRuhmann.
решение3
Это довольно легко сделать с помощью оболочки Unix. Вот как вы можете сделать это с помощью моегоКорпус Hamilton C. (бесплатная версиясделаем это.) Вы могли бы сделать что-то очень похожее сCygwin bash
.
Самый простой способ сделать это — преобразовать список, используяседв скрипт, где каждая строка cp
операция. Затем просто запустите скрипт.
sed "s/^^/cp '/;s/, /' '/;s/^$/'/" < list.csv > copyscript.csh
copyscript
Вот как copyscript.csh
будет выглядеть этот файл: