windows BAT腳本2個服務器間傳遞文件


1. 腳本功能: 

  實現2個服務器間文件的傳遞,例如從A服務器往B服務器上傳文件

2. 實現步驟:

  2.1 服務器連結,找到指定路徑,讀取所需要上傳的文件,將文件名稱復制到一個文件下

    (此處考慮可能需要篩選特定的文件,或者判斷文件個數,這樣處理會比較方便)

  2.2 執行copy文件

  2.3 刪除不需要的文件

    (這里考慮,可能是聯機備份,只保留部分數據文件,需要刪除不需要的數據文件,在這處理)

 

3. 代碼展示

@echo off

REM *** copy文件參數設定
set Passwd="password"
set User="username"
set LogPath="日志存放路徑"
set FullbakPath="A服務器需要復制到B服務器的文件路徑"

REM *** 數據庫連結設定
   (這里做數據庫連結是因為本腳本需要保留部分天數的文件,需要刪除前7天文件
     因為bat單做日期加減比較麻煩,所以采用數據庫取值方法)
set DB_SERVER="數據庫rul"
set DB_NAME="數據庫實例"
set DB_USER="數據庫用戶"
set DB_PASS="數據庫密碼"

REM *** 數據庫前7日設定
REM *** 因為這里使用sqlserver 相應其他數據庫請自己調整oracle mysql等
set sql="SELECT CONVERT(NVARCHAR,DATEADD(DAY,-7,CONVERT(DATETIME,CAST(YMD AS NVARCHAR),101)),112) FROM M_DATE_CONTROL WHERE KEY_CD=2"

REM *** 服務連結
net use \\127.0.0.1\backfull %Passwd% /user:%User% 

REM *** 設定日期,設定Log日志文件名稱
set date=%date:~0,4%%date:~5,2%%date:~8,2%
set JOBLOG=DBBACK.log

echo ********** START (%date:~0,10% %time:~0,8%) ********** >> %LogPath%\%date%\%JOBLOG%

這里將符合的附件讀取到一個文本文檔中,以便后續使用
(for /f "tokens=*" %%i in ('dir /a-d /b /s %FullbakPath%\*.* ') do (
    echo %%~nxi
))>fullbak.log

這里是copy文件的主要執行步驟,從文本文檔讀取,然后進行copy,這里有一個文件數量的判斷,可以進行自我調整
for /f "tokens=2 delims=:" %%a in ('find /c /v "" fullbak.log') do (
  if %%a equ 7 for /f %%i in (fullbak.log) do xcopy %FullbakPath%\%%i \\127.0.0.1\backfull\%date%\ /s /e /i /y
)

這里進行文件刪除的操作,將7天前文件刪除
for /f "skip=2" %%i in ('osql.exe -S %DB_SERVER% -U %DB_USER% -P %DB_PASS% -d %DB_NAME% -Q %sql%') do (
  set RESULT=%%i
  goto :RESULT
)

判斷文件是否存在,存在就執行刪除
:RESULT
if exist \\127.0.0.1\backfull\%RESULT% rd /s /q  \\127.0.0.1\backfull\%RESULT%

echo ********** END (%date:~0,10% %time:~0,8%) ********** >> %LogPath%\%date%\%JOBLOG%

pause

以上為文本文檔編寫,大家還請見諒。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM