Member 13958091 Ответов: 1

Копирование файлов с одного сервера на другой


Здравствуйте, я использую robocopy для копирования файлов из исходной папки в целевую, но есть некоторые проблемы.

В исходной папке файлы .csv создаются различными пользователями каждые 15-20 минут, например User1.csv, User2.csv, User3.csv. В исходной папке есть архивная папка.

Эти файлы должны быть перемещены в папку назначения. Файлы в папке назначения загружаются в другое приложение каждые 30 минут.

Проблема: когда user1 создает файл user1.csv, он должен быть перемещен в папку назначения. Если файл уже существует в папке назначения, то его не следует перемещать. Но если файл не существует в папке назначения, то файл должен быть перемещен, а копия файла должна быть сохранена в папке архива.

@echo off

SET SORC= "C:\Test\Source" 
SET DEST="C:\Test\Destination"
SET LOG="C:\Test\THE LOG FILE.log"

ROBOCOPY %SORC% %DEST% *.csv /R:1 /W:1 /MOV /XN /XO /LOG:%LOG%

:END


Что я уже пробовал:

Я использую приведенный выше код для перемещения файлов.

Как я могу сохранять файлы в папке архива с одним и тем же именем каждый раз, когда создается новый файл?

1 Ответов

Рейтинг:
1

Jochen Arndt

Одним из решений было бы получение файлов один за другим с помощью цикла for и их обработка.

Непроверенный:

ECHO Copy session %date% %time%>%LOG%
FOR %%f in (%SORC%\*.csv) do (
    SET fname=%%~nxf
    IF NOT exist %DEST%\%fname% (
        xcopy %%f %SORC%\archive /q
        move /Y %%f %DEST%
        ECHO Copied file %fname%>>%LOG%
    ) ELSE (
        ECHO Skipped file %fname%>>%LOG%
    )
)


Dave Kreskowiak

Я не знаю, почему кто-то дал бы вам 1 голос. Это вполне разумный ответ. Противостоявший.

Jochen Arndt

Спасибо, Дэйв.

Member 13958091

Есть ли другие решения?

Jochen Arndt

В чем проблема с моим решением?

Однако вы можете написать что-то подобное с помощью команд PowerShell, где у вас есть больше возможностей.

Member 13958091

Я проверил его и попытался заставить работать, но безуспешно.

Jochen Arndt

У меня не было вашей структуры каталогов, так что я не могу ее проверить. Но вы можете это сделать, проверив файл журнала или вставив дополнительные команды ECHO.

Member 13958091

Источник и пункт назначения-это два разных сервера, но я тестирую его на своем компьютере, пока не получу все правильно.

Исходная папка: C:\Test\Source
Цель фолера: C:\Test\Destination
Архивная папка: C:\Test\Source\Archive

Member 13958091

Вот пример кода для копирования файла с тем же именем и переименования после копирования.

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set TESTFOLDER=test_folder
md "%TESTFOLDER%"

set /a счетчик=0
К /ф "маркеры=*" %%I в ('Реж /с /Б /А-Д .\\ ниц*') у К /ф "маркеры=*" %%J в ('Реж /б "%%я"') DO IF EXIST ".\%TESTFOLDER%\%%j" (
установить в /счетчик=!счетчик!+1
папка echo: %TESTFOLDER%
скопируйте "%%i"". \%TESTFOLDER%\%%j_!счетчик!"
) Еще скопировать "%%я" ".\%TESTFOLDER%\%%Дж"
:ВФ

Jochen Arndt

И это работает?
Это не сильно отличается от моего решения, но более сложное.
Обратите внимание на "%%~nxf" из моего решения, которое получает имя и расширение из полного пути в %%f.

Проблема может заключаться в том, чтобы присвоить это переменной. Затем используйте его, как в вашем примере (включите отложенное расширение и используйте !fname!), или просто избегайте использования локальной переменной.

Вы не сказали нам, что пункт назначения находится в другой системе. Но это не проблема, пока у вас есть доступ к пути.