Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   копирование файлов за текущую дату с сервера на сервер (http://forum.oszone.net/showthread.php?t=179400)

6a6yko 29-06-2010 14:29 1443820

копирование файлов за текущую дату с сервера на сервер
 
Доброе время суток. В общем проблема заключается в том, что есть файлы с расширением *.dsus в папке на сервере, нужно чтобы они копировались на др сервер только за сегодняшнее (текущее) число, с заменой одинаковых файлов. Огромное спасибо за помощь.

deepred 29-06-2010 15:09 1443846

Очень мало сведений, надо больше информации.... Код должен выполняться на одном из серверов или ? Пока посмотри тут: http://forum.oszone.net/thread-169489.html
и тут: http://forum.oszone.net/thread-179316.html (батник)


и пример ( нужна утилита NcFTP Client 3.2.3 for Microsoft Windows):
Код:


@ECHO OFF
set archive="C:\obmen\archive\" && set obmen="C:\obmen\zayav\"
set tempfld="C:\obmen\temp\" && set dd=%DATE:~0,2%
set mm=%DATE:~3,2% && set yyyy=%DATE:~8,2%
set imya=%dd%%mm%%yyyy%

IF NOT EXIST %obmen%zayav.dbf goto end

copy %obmen%zayav.dbf %tempfld%alieva%imya%(1).dbf
Echo Идет отправка!

"C:\Program Files\NcFTP\ncftpput.exe" -F -u user -p passw 192.168.0.55 /zayav C:\obmen\temp\alieva%imya%(1).dbf

If errorlevel 1 Echo !!Ошибка соединения!! & goto end2
del %tempfld%*.* /q

Echo Успешно!, для продолжения нажмите любую кнопку...
pause>nul

copy %obmen%zayav.dbf %archive%os%imya%.dbf
goto :EOF

:end
Echo Отсутствуют файлы для передачи!
pause
goto :EOF
:end2
del %tempfld%*.* /q
pause
del c:\obmen\obmen.bat /q


6a6yko 29-06-2010 15:41 1443868

Запускаться батник будет на "сервер1" (сервера в домене, если конечно это какнить поможет), на "сервер2" есть папка в которую и нужно копировать эти файлы, папка с общим доступом с полными правами на изменение/запись уже расшарена. с ftp вариант не устраивает, но огромное спасибо и на этом!!!

deepred 29-06-2010 15:51 1443871

6a6yko,

почему вариант с ftp не устраивает? К папке на "сервер 2" открыт общий доступ и её можно подключить как сетевой диск? Врем копирования роль играет? и сами файлы *.dsus находятся в одной папке?

На скорую руку такая штука получилась, проверяй:

Код:


@Echo Off&&Chcp 866

net use X: адрес пароль /user:имя_пользователя /persistent:no
ping -n 2 1500 127.0.0.1>nul

if exist "X:\" (( call :copy_file
                      net use X:  /Delete
                      goto :eof)) else (Echo Ошибка подключения!
                                                  goto :eof)

:copy_file
set $num=0
Set $SCR=F:\exe\
Set $SCF=*.dsus

Set $DCR=F:\exe\qwer
Set $Obj=%$SCR%:%$SCF%

for /F "tokens=* Delims=" %%a In ('Where %$Obj% ') do (set /a $num+=1
                                                      call :action "%%a" "%%~ta")
Echo Скопировано %$num% файлов!!!
goto :eof

:action
set ch=%~2
set ch=%ch:~0,10%

if "%ch%"=="%date%" (( if not exist $DCR md %$DCR%\
                      copy /v /y %1 %$DCR%\)) else goto :eof


Тебе нужно под себя отредактировать пути в переменных:

Set $SCR=F:\exe\ и Set $DCR=F:\exe\qwer


Тоже самое, но *****.vbs
Выделенное под замену....

Код:



Option Explicit
Dim objWshNetwork, objShell, objFolder, objFSO, objFile
Dim strPath2SourceFolder, strPath2RootDestFolder
Dim intErrLevel, WshNetwork, strShare, strDrive, strDescriptiton

strShare        = "\\HPPAVILION-PC\exe"
strDrive        = "X:"
strDescriptiton = "Resourse"

Set objWshNetwork = WScript.CreateObject("WScript.Network")
objWshNetwork.MapNetworkDrive strDrive, strShare

Set objShell    = WScript.CreateObject("Shell.Application")
Set objFolder  = objShell.NameSpace(strDrive)

If not (objFolder Is Nothing) Then
    objFolder.Self.Name = strDescriptiton
else
WScript.Echo "[" & strShare & "] is not exists."
intErrLevel = 1
End If

Set objFolder  = Nothing
Set objShell    = Nothing
Set objWshNetwork = Nothing

strPath2SourceFolder    = "F:\exe"
strPath2RootDestFolder = "\\HPPAVILION-PC\exe\qwer"
intErrLevel = 0

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
For Each objFile In objFSO.GetFolder(strPath2SourceFolder).Files
If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase("dsus") and _
DateDiff("D", objFile.DateLastModified, Now) = 0 then
If Not objFSO.FolderExists(strPath2RootDestFolder) Then
objFSO.CreateFolder strPath2RootDestFolder         
End If

objFile.COPY strPath2RootDestFolder & "\"
End If

WScript.Sleep 100000

Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemoveNetworkDrive strDrive, false, false
Next

сетевой диск подключается только на время копирования...

6a6yko 29-06-2010 16:03 1443877

Ответ дать не могу, начальник сказал никаких ftp и всё =/// Да, можно подключить как сетевой диск. Время не играет, играет роль только текущая дата. Да, все файлы в одной папке.

zenner 06-05-2011 11:24 1671175

Добрый день! Долго искал в Интернете но так и не нашел решения для моей задачи
Помогите пожалуйста с батником который копирует из папки А в папку В только файлы текущей даты создания. Спасибо!

megaloman 06-05-2011 12:41 1671219

zenner, 6a6yko, Если в системе дата в формате дд.мм.гггг то

xcopy /D:%Date:~3,2%-%Date:~0,2%-%Date:~6,4% /Y D:\A\*.* D:\B\

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

xcopy /D:%Date:~3,2%-%Date:~0,2%-%Date:~6,4% /Y \\Комп1\A\*.dsus \\Комп2\B\

zenner 06-05-2011 13:59 1671263

Megaloman Спасибо Вам большое за помощь! А Вы не могли бы обьяснить что означает 3,2% 0,2 и 6,4%
Спасибо!!!!

megaloman 06-05-2011 15:28 1671316

Из хелпа xcopy (xcopy /?)
/D:m-d-y Копирует файлы, измененные либо в указанный день, либо после.

Читаем хелп Set (Set /?)
В переменной %Date% при соответствующей настройке системы содержится дата в виде
дд.мм.гггг
Соответственно %Date:~3,2% вырежет из даты 2 знака начиная с 3 позиции (если считать символы начиная с 0), то есть мм
Аналогично и остальные символы
Как результат, получим /D:mm-dd-yyyy, (для сегодня, например, /D:05-06-2011), что и требуется команде xcopy (надеюсь, с датами Вы не шалите и файлов с завтрешней датой у Вас нет)

zenner 06-05-2011 15:51 1671327

Еще раз Спасибо!!!!

zenner 21-06-2011 13:00 1698807

Подскажите пожалуйста что нужно добавить к этой строке чтобы коммандник не копировал файлы в названии которых есть текст CDMA (пример названия файла: Activare201106210505_CDMA.xls)
Спасибо!!!
xcopy /D:%Date:~3,2%-%Date:~0,2%-%Date:~6,4% /Y \\Комп1\A\*.dsus \\Комп2\B\


Время: 17:36.

Время: 17:36.
© OSzone.net 2001-