
Tenho uma lista de arquivos extraídos de uma tabela em um banco de dados SQL. O arquivo pode ser um arquivo de texto delimitado ou uma planilha Excel, o que funcionar melhor.
O arquivo fica assim
sourcePath1\fileName1, destPath1\fileName1
sourcePath2\fileName2, destPath2\fileName2
sourcePath3\fileName3, destPath3\fileName3
etc.
Uma coluna contém o caminho original e o nome do arquivo dos arquivos, a segunda coluna contém o caminho e o nome do arquivo desejados. Isso foi obtido usando uma função REPLACE() padrão na instrução SELECT original.
Agora tenho a(s) lista(s) que realmente preciso para copiar o arquivo de origem para o destino.
Isso é possível usando a linha de comando (lote ou Powershell?) Ou via script ou GUI?
Responder1
Aqui está uma solução em lote nativa do Windows para analisar um arquivo de texto com valores separados por vírgula (csv).
@echo off
for /f "tokens=1,2 delims=," %%A in (file.csv) do (
copy %%A %%B
)
Responder2
Com base na resposta de David Ruhmann, os seguintes trabalhos. Ele usa xcopy
e passa um F
para o prompt que pergunta se o arquivo é um arquivo ou uma pasta.
@echo off
for /f "tokens=1,2 delims=," %%A in (book1.csv) do (
cmd /c echo F | xcopy "%%~A" "%%~B"
)
EDIT: Adicionado til (~) conforme sugestão de @DavidRuhmann.
Responder3
Isso é bastante fácil de fazer com um shell Unix. Veja como você pode fazer isso com meuConcha Hamilton C. (Oversão gratuitafará isso.) Você poderia fazer algo muito semelhante comCygwin bash
.
A maneira realmente fácil de fazer isso seria transformar a lista usandosedem um script onde cada linha é uma cp
operação. Depois é só executar o script.
sed "s/^^/cp '/;s/, /' '/;s/^$/'/" < list.csv > copyscript.csh
copyscript
Esta copyscript.csh
seria a aparência desse arquivo: