[Windows][Batch][Command]
[需求說明][Request]
Windows Server Version -> 2012
Windows Server需要定期的將備份資料,上傳至異地端的FTP Server。
要實現這個功能,一般我們會用Windows排程器+Batch Command(批次檔案)來處理,Windows排程器也是就Windows作業系統內建的排程軟體,一般從系統管理中可以找到(每個版本可能有點不同);Windows Batch則是早期從DOS時代就開始有的東西,如果比較資深的相信會很有感觸...這東西已經有點年代了(小弟我也有點年紀了XD),延申到Windows Server 2012之後的Power Shell是不一樣的東西,Power Shell是這幾年新的技術…有機會再來研究研究。
下面有兩個範例提供參考,一個是用純Windows指令上傳,另一個則是借用WinSCP上傳至FTP。
[實例][Example]
功能:自動上傳檔案至FTP,並刪除過期舊檔。
Test.bat 內容如下:
set PathDest=E:\backup
set FileCount=0
For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set dt=%%a%%b%%c)
For /f "tokens=1-4 delims=:." %%a in ('echo %time%') do (set tm=%%a%%b)
For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set dt2=%%a/%%b/%%c)
For /f "tokens=1-4 delims=:." %%a in ('echo %time%') do (set tm2=%%a:%%b)
FOR /f "tokens=1 " %%i IN ('hostname') DO (SET HOST=%%i)
set bkupfilename=Daily_backup_%dt%-%tm%.bak
xcopy "E:\backup\*" E:\backup\Daily /D/K/E/Y/C/I/H
del "E:\backup\*" /q
for /R %PathDest% %%A in (*) do set /a FileCount+=1
if %FileCount% GTR 7(^
forfiles /p %PathDest% /s /d -7 /c "cmd /c del /q @path"
)
E:
cd E:\backup\dpump
REM Generate the script. Will overwrite any existing temp.txt
echo open ftpservername> temp.txt
echo user>> temp.txt
echo password>> temp.txt
echo bin>> temp.txt
echo put %bkupfilename%>> temp.txt
echo quit>> temp.txt
REM Launch FTP and pass it the script
ftp -s:temp.txt
REM Clean up.
del temp.txt
[實例][Example]
功能:利用winscp工具軟體上傳檔案至FTP。
test.txt
open ftp://user:password@example.com/
put d:\bak\*.* /
exit
batch command
WinSCP.com /ini=nul /log=ftpupload.log /script=test.txt