我是嫩咖 | 有這樣的備份軟體嗎? 目前的檔案結構如下 用戶資料夾 |--A |-- 工作記錄 |-- 工作報告 |-- 其他 |--B |-- 工作記錄 |-- 工作報告 |-- 其他 |--C |-- 工作記錄 |-- 工作報告 |-- 其他 其中工作報告的資料夾中每天都會產生一個檔案,目前希望的就是能夠把前一天的工作報告挑出來,然後透過「電子郵件」寄送到主管的信箱中! 不知有沒有網友有好的做法或是有軟體可以做到? |
回覆 |
會員 | 回覆: 有這樣的備份軟體嗎? 我只會在linux base上面這樣搞 Orz 或者是在Windows base上透過工作排程執行PHP程式去處理 |
回覆 |
會員 | 回覆: 有這樣的備份軟體嗎? 1.先把 smtp 的發信程式準備好 隨便搜尋一下 C# Csharp 的 程式 http://blog.sina.com.cn/s/blog_46175deb0100az4y.html mail.cs ================================================ using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Mail; namespace TMail1 { class MainProgram { static void Main(string[] args) { // 建立MailMessage類實例 MailMessage mail = new MailMessage(); // 收件者 mail.To.Add(new MailAddress("[email protected]")); // 發件者 mail.From = new MailAddress("[email protected]"); // 郵件主題 mail.Subject = "test"; // 郵件內容 mail.Body = "test!"; // 附加檔案 ps:我自己(bx2aa)加上附檔 mail.Attachments.Add(new System.Net.Mail.Attachment("test.rar")); // 建立SmtpClient類實例 SmtpClient mailer = new SmtpClient(); // 設定Smtp主機 mailer.Host = "smtp.pczone.com.tw"; mailer.Port = 25; // 設定 SMTP 伺服器 帳號/密碼, 發件者 E-mail, 密碼 mailer.Credentials = new NetworkCredential("account","password"); try { // 發信 mailer.Send(mail); System.Console.WriteLine("發送成功!"); } catch (Exception ex) { System.Console.WriteLine(ex.ToString()); } } } } ================================================ 請自行查詢 Framework 版本修改 紅字部份 csc 在 C:\WINDOWS\Microsoft.NET\Framework\v???\ C:\WINDOWS\Microsoft.NET\Framework\v???\csc mail.cs 產成 mail.exe 直接執行 mail 就送出去. 好開始整理出檔案. 2.整理出全部檔案名稱: ps:需要 UnixUtils 且 PATH 指到 UnixUtils 目錄 list.txt 內容為目錄名稱 ====================== 用戶資料夾\A\工作報告\ 用戶資料夾\B\工作報告\ 用戶資料夾\C\工作報告\ 用戶資料夾\D\工作報告\ ====================== for /F %i in (list.txt) do echo copy %i>> file.txt && dir %i | sort | grep -v "<DIR>" | grep -v " \.\." | grep -v " \." | tail -n1 | cut -c 41- >> file.txt && echo. >>file.txt ps:把前一天的檔案當成是"日期最新"的檔案, 所以用 sort 排序抓最後一行 把 file.txt 整理一下為 copy pathfilename sed -e :a -e "$!N;s/ \n \(.*\)/\1 /;ta" -e "P;D" file.txt > sendfile.txt 把 檔案 copy 到 c:\temp 複製到 c:\temp for /F "tokens=1,* delims= " %i in (sendfile.txt) do %i %j c:\temp 3.把 c:\temp\ 裏的檔案壓縮起來 "C:\Program Files\WinRAR\winrar.exe" a test c:\temp\*.* 執行 mail.exe 就發出去了. 以上花了三四個小時, 確實能正常執行. PS: 要放到批次檔裡 %那些 %i 要變為 %%i %%j 如果報告名稱固定的話就直接寫死 report.bat cop c:\用戶資料夾\A\工作報告\report.doc c:\temp\張三.doc cop c:\用戶資料夾\B\工作報告\report.doc c:\temp\李四.doc cop c:\用戶資料夾\C\工作報告\report.doc c:\temp\王五.doc "C:\Program Files\WinRAR\winrar.exe" a test c:\temp\*.* mail.exe ps:注意防毒軟體有沒有把 port :25 檔住 有的話會出現 System.Net.Mail.SmtpException: 傳送郵件失敗。 ---> System.Net.WebException: 無法連接至遠端伺服器 --- > System.Net.Sockets.SocketException: 連線已被您主機上的軟體中止。 ???.???.???.???:25 於 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 於 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP) 於 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, So cket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) --- 內部例外狀況堆疊追蹤的結尾 --- 於 System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6, Int32 timeout) 於 System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 timeout, GeneralAsy ncDelegate asyncCallback) 於 System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback) 於 System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallbac k, Int32 creationTimeout) 於 System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port) 於 System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port) 於 System.Net.Mail.SmtpClient.GetConnection() 於 System.Net.Mail.SmtpClient.Send(MailMessage message) --- 內部例外狀況堆疊追蹤的結尾 --- 於 System.Net.Mail.SmtpClient.Send(MailMessage message) 於 TMail1.MainProgram.Main(String[] args) 此篇文章於 2010-03-30 03:42 PM 被 bx2aa 編輯。. |
回覆 |
會員 | 回覆: 有這樣的備份軟體嗎? 好強 Orz 我完全沒想過,可以利用Windows內的.Net framework編譯個執行檔出來搞定... 再加上批次檔...:Q |
回覆 |
我是嫩咖 | 回覆: 有這樣的備份軟體嗎? 嗯,我……傻眼了…… 這……要從何做法……我想想…… |
回覆 |
會員 | 回覆: 有這樣的備份軟體嗎? 太強大了!!! 我前幾天看到這個主題才在想說似乎沒有合適的工具 沒想到...XD |
回覆 |
會員 | 回覆: 有這樣的備份軟體嗎? 剛剛想到幾個作法! 例如: 也可以請所有人把檔案複製到特定目錄裏, 然後用批次檔檢查有沒有誰沒交! :start if not exist \\zs\work\report.xls zs.exe && msgzs.exe if not exist \\ls\work\report.xls ls.exe && msgls.exe if not exist \\ww\work\report.xls ww.exe && msgww.exe sleep 300 if exist \\zs\work\report.xls if exist \\ls\work\report.xls if exist \\ww\work\report.xls && package.bat && mail.exe && exit goto start zs.exe ls.exe ww.exe 分別為催交的 E-Mail package.bat 為把 \\zs\work\report.xls \\ls\work\report.xls \\ww\work\report.xls 打包為 .rar 在用 mail.exe 寄出去 另一種方法:只是想框架沒寫出程式 msg??.exe 為跳出一個視窗提示. ===================================== /* * Created by SharpDevelop. * User: bx2aa * Date: 2010/3/31 * Time: 下午 01:10 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using System.Windows.Forms; class Hello { static void Main() { MessageBox.Show("張三報告未繳交!"); } } ====================================== 我們這邊出現 某某某報告未繳交提示視窗 當然 user 那邊除了 E-Mail 也讓他有點實質的狀況 用 telnet 到 User 端執行 user 端 c:\temp\schdtime.bat 先開用戶端的 telnet 服務為 手動 已啟動 sc \\zs config tlntsvr start= demand sc \\zs start tlntsvr user 端 c:\temp\schdtime.bat 的內容 @echo off echo %time:~0,5% | gawk -F: "{print $1\":\"$2+1}" > time.txt for /F %i in (time.txt) do set schdtime=%i at %schdtime% /interactive "c:\temp\msgzs.exe" 在自己這邊用 perl 去執行, 或是用 net send 可以省掉用 telnet 的麻煩! perl telnet.pl #! c:\perl\bin\perl.exe -w use Net::Telnet (); $username="account"; $passwd="password"; $port=23; $secs=10; $|=1; $t = new Net::Telnet (Host => $ARGV[0],Port => $port,Timeout => $secs); $lines = $t->getline; $lines = $t->getline; print $lines."\n"; print $lines = $t->print("$username"); print $t->getline; $lines = $t->print("$passwd"); print $t->getline; print $t->getline; print $t->getline; print $t->getline; print $t->getline; $lines = $t->print("c:\temp\schdtime.bat"); print $t->getline; $lines = $t->print("exit"); $t -> close; 此篇文章於 2010-03-31 02:34 PM 被 bx2aa 編輯。. |
回覆 |
我是嫩咖 | 回覆: 有這樣的備份軟體嗎? 檔名格式:內容+日期.txt,例:工作報告2010-03-29.txt 要能以檔名來過濾,因為以檔案日期來過濾的話,會不準! 測試中…… |
回覆 |
會員 | 回覆: 有這樣的備份軟體嗎? 用時間最新可能有人把去年的點開還存檔所以會有問題 跑完批次後執行 echo %date:~0,10%| sed -e "s/\//-/g">yesterday.txt =============================== C:\Documents and Settings\bx2aa>echo %date% 2010/03/31 星期三 =============================== 我的日期格式 所以我把 / 換為 - 但是/ 為分隔兩個欄位所以跳脫原意變為 \/ 把 current day 紀錄, 下一次跑拿出來用, 所以先建一個檔案叫 yesterday.txt 內容填入 2010-03-30 然後 :start for /F %%i in (yesterday.txt) do set yesterday=%%i if not exist \\zs\work\*%yesterday%.txt zs.exe && msgzs.exe if not exist \\ls\work\*%yesterday%.txt ls.exe && msgls.exe if not exist \\ww\work\*%yesterday%.txt ww.exe && msgww.exe sleep 300 if exist \\zs\work\*%yesterday%.txt if exist \\ls\work\*%yesterday%.txt if exist \\ww\work\*%yesterday%.txt && call package.bat && mail.exe && echo %date:~0,10%| sed -e "s/\//-/g">yesterday.txt && exit goto start package.bat 內容應該不用給吧! for /F %%i in (yesterday.txt) do set yesterday=%%i copy \\zs\work\*%yesterday%.txt c:\temp ....... "C:\Program Files\WinRAR\winrar.exe" a test c:\temp\*.* 此篇文章於 2010-03-31 05:59 PM 被 bx2aa 編輯。. |
回覆 |
我是嫩咖 | 回覆: 有這樣的備份軟體嗎? 老大我錯了…… 我來是想解決問題而已…… 結果一搞……給了自己更多問題…… |
回覆 |
XML | RSS 2.0 | RSS |
本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。