iT邦幫忙

0

如何使用.bat檔進行FTP檔案上傳?(檔名是動態的)

目前有個需求就是
先利用以下的指令壓縮每天的D槽資料
"C:\Program Files\WinRAR\WinRAR.exe" a -ilog -or -ep2 -rr5p -ibck -m5 -isnd -agYYYYMMDD-HH C:\Backup.rar "d:\"
所以壓縮檔的名稱可能會是 Backup20130205-12.rar或是Backup20130205-20.rar之類的

再來把壓縮檔上傳到FTP SERVER
open 192.168.0.100
test
0000
prompt
cd /
mput Backup20130205-12.rar或是Backup20130205-20.rar
bye

但在mput那邊的動態檔名卡住了,找了很多資料目前只能拼湊出上述的指令,請問有辦法可以解決這樣的問題嗎??

感謝各位~

gituest iT邦新手 5 級 ‧ 2013-02-14 11:08:23 檢舉

我不常 FTP
不過我常在偷別人的圖片

偷了一堆圖片 最好偷的時候不要改名子
圖片都跟網路的名子一樣
自己要用的時候 忘了哪裡偷的
搜尋圖片明子很快就找到了



假如你這個bat 檔叫做 back.bat
我建議你就全部放在一個目錄
改目錄就好

del backup *.*
md backup
再去備份那個目錄
在傳目錄上去

每次刪掉那個目錄 再把備份放進去

或者直接叫 winrar覆蓋掉原來的檔案
就不用刪目錄
只要ren 目錄的名子
我不確定會不會 改建立的時間

dir backup >>back.bat
你的back.bat 裡面就會有執行命令跟
你所有有累積backup的記錄

我說的指令會有些不對..還需要修改
或者你可以叫bat映一些 bat 註解進去裡面
好像是用 echo 還type..
你在查一下 dir 的仔細參數
只要是指令用 >或>>就可以重新導向印到檔案裡面去了
date > date.txt或 date >> date.txt
應該也可以建立一個備份記錄
使用 >會把以前的記錄刪掉..從新建立
使用 >> 會一個一個加上去

gituest iT邦新手 5 級 ‧ 2013-02-14 11:10:25 檢舉
del backup *.*
md backup

上面少了一個 rd backup //刪去 backup
gituest iT邦新手 5 級 ‧ 2013-02-14 11:19:19 檢舉
我相信 用 ren 是可以改 rar檔的檔名
只要你多學一點 date 跟dos怎麼從txt 檔抓文字處理
把date印到一個txt檔
也就是dos本身就是可以靠bat再寫出一個bat出來的特性
用javascript或 dos指令或php把日期取出來
再用 dos 的 >> 從新導向寫一個改名子的bat
把 ren原來的名子 變成 日期明子就好..

用javascript wshell也可以寫出來..

2 個回答

8
jay0123
iT邦高手 3 級 ‧ 2013-02-06 09:51:19
最佳解答

你的這種 FTP 上傳模式我也有用
二個檔一個 bat 一個 txt
bat 的部份先到來源檔案的來源目錄

d:
cd\123\abc\
:start
ftp -s:upload.txt

txt 的部份
open 192.168.0.100
test
0000
prompt
cd \
mput Backup*.rar
bye

所以你的問題在二處

  1. cd / 改成 cd \
  2. mput Backup*.rar 即可
看更多先前的回應...收起先前的回應...
a70706z iT邦新手 5 級 ‧ 2013-02-06 11:36:19 檢舉

感謝 jay0123 大 回答
1.請問有幾種FTP上傳模式呢?
2.剛剛經過jay0123 大 的說明,終於可以順利連上了,但.....

不懂為什麼會出現"/" 的提示

麻煩 jay0123 大

感謝您

小成 iT邦高手 10 級 ‧ 2013-02-07 00:27:06 檢舉

CD / 應該是沒錯
另外我有問題(舉手),
mput Backup*.rar 的話,那已經上傳過的檔案會變怎樣?

jay0123 iT邦高手 3 級 ‧ 2013-02-07 09:31:51 檢舉

沒錯測試過到根目錄是用 cd /
而我的是 cd 123
因為我希望要複製 FTP Server 的 123 底下
沒用複製到根目錄
另已經上傳過的檔案若一樣檔名會被覆蓋

a70706z iT邦新手 5 級 ‧ 2013-02-08 07:18:25 檢舉

感謝 jay0123 大 回答
目前如果想要整合所有指令如下:
"C:\Program Files\WinRAR\WinRAR.exe" a -ilog -or -ep2 -rr5p -ibck -m5 -isnd -agYYYYMMDD-HH C:\Backup.rar "d:\"
ftp -s:upload.txt

如果用系統管理員身份執行此bat檔,第一行可以順利建立壓縮檔但第二行就會有錯
如果用一般身份執行此bat檔,第一行會無法建立壓縮檔但第二行可以順利執行

請問有辦法提權或者用什麼方法整合指令呢?
我不想分太多.bat檔,怕使用者會亂刪...

預期目標:建立、上傳、刪除都在同一個.bat檔

可能要麻煩 jay0123 大 頭痛一下了,感謝你!

slime iT邦大師 1 級 ‧ 2013-02-08 09:20:26 檢舉

a70706z提到:
"C:\Program Files\WinRAR\WinRAR.exe" a -ilog -or -ep2 -rr5p -ibck -m5 -isnd -agYYYYMMDD-HH C:\Backup.rar "d:\"
ftp -s:upload.txt
如果用系統管理員身份執行此bat檔,第一行可以順利建立壓縮檔但第二行就會有錯

錯誤的原因是什麼? 沒有指定絕對路徑嗎?

jay0123 iT邦高手 3 級 ‧ 2013-02-08 09:27:57 檢舉

系統管理員身份執行此bat檔,第一行可以順利建立壓縮檔但第二行就會有錯
錯是什麼...........
一般身份執行此bat檔,第一行會無法建立壓縮檔但第二行可以順利執行
我想無法建立的原因請確認一下建立壓縮檔的目錄是否有寫入的權限或
C:\Program Files\WinRAR\ 目錄一般身份是否有完成控制的權限

a70706z iT邦新手 5 級 ‧ 2013-02-09 15:24:33 檢舉

如果用一般身分執行bat檔,會發生C:\Backup20120209-15.rar存取被拒
如果給bat檔系統管理員的權限會發生開啟指令檔upload.txt時發生錯誤

slime iT邦大師 1 級 ‧ 2013-02-09 16:25:31 檢舉

a70706z提到:
如果給bat檔系統管理員的權限會發生開啟指令檔upload.txt時發生錯誤

那就是沒有指定絕對路徑造成的.

10
vino1
iT邦大師 1 級 ‧ 2013-02-05 21:09:46

我看你的指令壓出來的結果每天都會是 c:\backup.rar ,
並沒有如你所說的Backup20130205-12.rar
改一下你的批次檔,壓縮成 c:\backup.rar 後, 再去 rename
rename c:\backup.rar c:\Backup-%date:~0,4%-%date:~5,2%-%date:~8,2%.rar

上傳部分改成底下這樣
mput Backup-%date:~0,4%-%date:~5,2%-%date:~8,2%.rar

看更多先前的回應...收起先前的回應...
a70706z iT邦新手 5 級 ‧ 2013-02-05 22:56:22 檢舉

感謝 vino1 大 回答
但是我執行會出現Backup日期-時間.rar耶?!

執行完會變成以下圖案

vino1 iT邦大師 1 級 ‧ 2013-02-06 00:47:39 檢舉

我試的環境是 XP .. 你的看起來是 win7 或是 2008 對吧
家裡沒 win7 的電腦..我明天上班再試試看囉~

<pre class="c" name="code">Backup-%date:~0,4%-%date:~5,2%-%date:~8,2%.rar

上面這段只能在批次檔裡會被「轉換」成 Backup-2013-02-06.rar
在你的 ftp 指令檔 upload.txt 裡並不會被轉換
所以會找不到該檔案
是很合理的

slime iT邦大師 1 級 ‧ 2013-02-06 00:57:42 檢舉

看起來是因為: ftp 是另外的程式, 而不能直接用 command 提供的變數方式.
有其他網友問過類似的問題, 班考看看:
http://ithelp.ithome.com.tw/question/10064417
差別是先把 command 的變數存在 ftp 命令檔內, ftp 才能正確處理檔名.

小成 iT邦高手 10 級 ‧ 2013-02-07 00:30:06 檢舉

我會這樣做耶
批次檔會做這些事情
壓縮檔案產生檔案 Backup-%date:~0,4%-%date:~5,2%-%date:~8,2%.rar
然後 echo open 192.168.0.100 > upload.txt
echo 其他指令 >> upload.txt
echo mput Backup-%date:~0,4%-%date:~5,2%-%date:~8,2%.rar >> upload.txt
然後再 ftp -s:upload.txt

還有另一種更懶惰的方法

<pre class="c" name="code">
1.壓縮,存檔到 d:\temp 目錄下
2.用同一個 ftp 指令檔,mput d:\temp目錄下所有檔案
3.將 d:\temp 目錄下所有檔案 搬到 d:\backup 目錄下

這樣 ftp 就不用管他什麼動態檔名了
以後萬一有更多不同名稱的壓縮檔,也不必修改 ftp 指令
睡覺

a70706z iT邦新手 5 級 ‧ 2013-02-08 07:21:11 檢舉

感謝各位 大大 的熱情回復
小弟在想...如果不要分這麼多.bat檔的話,有什麼方式可以把建立壓縮檔、上傳、刪除壓縮檔這幾個功能放在同一個.bat檔裡嗎?
因為怕會被使用者亂刪...

感謝各位大大!

eigen iT邦新手 1 級 ‧ 2013-02-15 15:13:57 檢舉

利用 winrar 定時備份,最大的『盲點』就是 -ag 這個功能

long long time ago,我也很喜歡這個功能,但是後來我才發現,這是個不利『每日定時修份』的功能,因為當你要每日定時備份時,雞蛋不能放在一個籃子來,你一定會用到 copy 的功能,在不知道檔名的情況下,你要如何備份?這是最大的問題

後來放棄 -ag 這個指令後,整個就簡單了
你還是用固定的檔名進行壓縮,利用 batch 語法取得目前的時間,在copy 檔案時,再進行檔名的修改。

如此一來,檔名就是在你的控制之後,要copy, del, ftp put 都不是太大的問題。

我要發表回答

立即登入回答