有這樣的備份軟體嗎? - PCZONE 討論區

返回   PCZONE 討論區 > ▲ -- 電 腦 軟 體 討 論 區 > -- 其 他 軟 體 討 論 版


PCZONE 討論區



通知

-- 其 他 軟 體 討 論 版 包括磁碟或檔案管理工具、掃毒軟體、解壓縮軟體、遠端遙控軟體、備份軟體、傳真軟體、手寫或語音等各種軟體使用經驗討論

我是嫩咖
有這樣的備份軟體嗎?
目前的檔案結構如下

用戶資料夾
 |--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;
上傳的圖檔
檔案類型: jpg Csharp.jpg (108.6 KB, 156 次觀看)

此篇文章於 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 
本站使用 vBulletin 合法版權程式
站務信箱 : [email protected]

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。