Usando alguma lógica FOR / F simples e definindo os delimitadores e os tokens de acordo, você pode analisar cada linha do arquivo csv e use cada valor separado por vírgulas como uma variável para processar de acordo com cada iteração de loop.
Com alguma lógica IF condicional simples, você pode controlar quais comandos executar com base em cada condição, sendo TRUE ou FALSE mas é aqui que ele pode verificar se os arquivos já existem ou não e tomar as medidas necessárias.
Usando o comando XCOPY com um canalizado ECHO F
informa que cada parâmetro passado para ele é um arquivo e não um diretório, e se algum diretório não existir em qualquer lugar ao longo do caminho onde o arquivo é copiado (por exemplo, coluna 2), todos serão criados durante a operação de cópia de arquivos.
Se o arquivo de destino já existir e você desejar anexar um sufixo exclusivo a cada nome de arquivo copiado que tenha um nome de arquivo correspondente no diretório de destino, use CALL passando cada variável de loop FOR / F como um argumento para uma rotina .
Você pode usar substituições para analisar diferentes partes das variáveis CALL transmitidas para reconstruir e acrescente a string única como um sufixo a qualquer arquivo de destino existente.
Essentially this will. . .
- Use the comma as a delimiter with the FOR /F loop and get each value from the csv file separated by each delimiter to use individually for further processing
- If the source file from column 1 does not exist, quit and then process the next csv line
If the destination file from column 2 does exist, call a routine and pass the two csv file line values to that routine as variables to expand and process further
- This routine will create a unique string using date time
<YYYYMMDD_hhmmsstt>
and ensure this is appended to the destination file name that is copied over ensuring the existing file is not overwritten by the copy operationIf both the destination file does not exist and the source file does exist, it'll simply copy over the file from the source to the destination
If none of these conditions are TRUE, then it does nothing with the iterated csv file values from those lines.
Script em lote
@ECHO ON
SET csvfile=C:\Users\User\Desktop\test.csv
FOR /F "USEBACKQ TOKENS=1,2 DELIMS=," %%a in ("%csvfile%") DO (
IF NOT EXIST "%%~a" GOTO :EOF
IF EXIST "%%~b" CALL :DupeRoutine "%%~a" "%%~b"
IF NOT EXIST "%%~b" IF EXIST "%%~a" ECHO F | XCOPY /Y /F "%%~a" "%%~b"
)
GOTO :EOF
:DupeRoutine
::: --Use this with system DATE format "Fri 10/13/2017"
::SET tstamp=%date:~10%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
::: Use this with system DATE format "2017-10-13"
SET tstamp=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
SET tstamp=%tstamp: =0%
ECHO F | XCOPY /Y /F "%~dpnx1" "%~dp2%tstamp%%~n2%~x2"
GOTO :EOF
Observação: Se você deseja excluir os arquivos de origem depois que o arquivo for copiado para o destino, faça alguns pequenos ajustes com este script de lote de exemplo usando mais lógica condicional, como && DEL /Q /F <sourcefile>
acrescentado aos comandos aplicáveis onde as operações de cópia são concluídas.
Mais recursos
- FOR / F
- SE
-
HELP CALL Substitution of batch parameters (%n) has been enhanced. You can now use the following optional syntax: %~1 - expands %1 removing any surrounding quotes (") %~d1 - expands %1 to a drive letter only %~p1 - expands %1 to a path only %~n1 - expands %1 to a file name only %~x1 - expands %1 to a file extension only