目前寫了一個.BAT去帶.TXT
此批次是把檔案下載後,全數刪除掉。
經測試後卻錯誤百出,他會下載不只1天內的檔案。
另外是否可以已FTP去判斷現在的西元年、月來做判斷是最好?
謝謝
這檔案是每天抓一次, 還是每個月抓一次??
我看你的說明好像是一個月下載一次...
如果..上面那樣就是貴司檔案目前實際的狀況..至少檔名中"年"跟"月"是很有規則的
如果真像我說的是每個月初下載上個月所有檔案的話,可以考慮底下下載方式
mget AG01_201507*.txt
mget AG02_201507*.txt
mget AG03_201507*.txt
.bat 內容
<pre class="c" name="code">@echo off
REM 取得今天的年、月、日 (自動補零)
SET TodayYear=%date:~0,4%
SET TodayMonthP0=%date:~5,2%
SET TodayDayP0=%date:~8,2%
REM 取得今天的年、月、日 (純數字)
REM 2010/08/03 更新:以下是為了修正 Batch 遇到 08, 09 會視為八進位的問題
IF %TodayMonthP0:~0,1% == 0 (
SET /A TodayMonth=%TodayMonthP0:~1,1%+0
) ELSE (
SET /A TodayMonth=TodayMonthP0+0
)
IF %TodayMonthP0:~0,1% == 0 (
SET /A TodayDay=%TodayDayP0:~1,1%+0
) ELSE (
SET /A TodayDay=TodayDayP0+0
)
rem echo 今天日期 %TodayYear%/%TodayMonthP0%/%TodayDayP0%
REM 取得上個月的年、月
SET /A LastMonthYear=%TodayYear%+0
SET /A LastMonthMonth=%TodayMonth%-1
SET /A LastMonthMonthP0=%LastMonthMonth%
REM 修正年份與月份的數值
IF %LastMonthMonth% EQU 0 (SET /A LastMonthYear=%thisYear%-1)
IF %LastMonthMonth% EQU 0 (SET LastMonthMonth=12)
IF %LastMonthMonth% LSS 10 (SET LastMonthMonthP0=0%LastMonthMonth%)
rem echo 上月月份 %LastMonthYear%/%LastMonthMonthP0%
SET DownloadMonth=%LastMonthYear%%LastMonthMonthP0%
REM 底下為 FTP 下載,匯入函數產生 GET.txt
del GET.txt /q
echo open 123.123.123.123 >> GET.txt
echo test123 >> GET.txt
echo test123 >> GET.txt
echo prompt >> GET.txt
echo lcd J:\TEST >> GET.txt
echo mget AG01_%DownloadMonth%*.txt >> GET.txt
echo mget AG02_%DownloadMonth%*.txt >> GET.txt
echo mget AG03_%DownloadMonth%*.txt >> GET.txt
echo quit >> GET.txt
ftp -s:GET.txt
你好,跑過後發現FTP部分會一直卡住登不進去
echo open 123.123.123.123 >> GET.txt
echo test123 >> GET.txt
echo test123 >> GET.txt
這部分的問題是出在哪裡?
你應該是要調整內容符合你的現況
因為我是每次執行批次檔, 都先砍掉你原來的 GET.txt 檔案,
然後利用函數把 年跟月 匯入產生一個新的 GET.txt 檔案
建議先檢查 GET.txt 有無產生...
你不會是照抄吧, 至少你 ftp 位址, 登入帳密要改吧~
再跑bat的時候是先刪除原來的GET沒錯,
但再登入那一區塊不知為何無法登入成功,
已有轉換至FTP,但在嘗試下載AG01_檔案時,
一直顯示未登入(Please login with USER and PASS.)
當然不是照抄,我知道那FTP IP 及使用者更改
但卻變成無法登入了!?
但它秀的錯誤訊息是要你登入...所以?!
這部分我可能要再研究一下,
溫欸我手動敲帳密是沒問題的,但跑Bat後他卻顯示沒有登入成功
530 User cannot log in.
我再研究看看,謝謝
我知道了...我知道問題了...GET.txt檔案中每一行後面都多了兩個空白字元
所以造成帳密後面都有多空白字元, 我想這應該就是問題~
請你將批次檔每個 >> 前後的空格都刪除
<pre class="c" name="code">REM 底下為 FTP 下載
del GET.txt /q
echo open 123.123.123.123>>GET.txt
echo test123>>GET.txt
echo test123>>GET.txt
echo prompt>>GET.txt
echo lcd J:\TEST>>GET.txt
echo mget AG01_%DownloadMonth%*.txt>>GET.txt
echo mget AG02_%DownloadMonth%*.txt>>GET.txt
echo mget AG03_%DownloadMonth%*.txt>>GET.txt
echo quit>>GET.txt
已找到問題!
REM 底下為 FTP 下載,匯入函數產生 GET.txt
del GET.txt /q
echo open 123.123.123.123 >> GET.txt
echo test123 >> GET.txt 「ftp登入時,帳號判定為test123 」 多空了一格
echo test123 >> GET.txt 「ftp登入時,密碼判定為test123 」 多空了一格
echo prompt >> GET.txt
echo lcd J:\TEST >> GET.txt
非常感謝!!
哈哈,沒錯,我剛剛也是卡在這裡很久,
謝謝你詳細的解說!
請問一下我也用mdelete 刪除一堆資料
我是刪除檔名日期
但我想刪除25天以前的資料
例如:20211003以前的全部要刪除
不寫迴圈的情況下 如何達到 謝謝
既然不想刪原始檔,又要有效率下載,幹嘛不考慮同步軟體?還可以設定排程自動同步,不是就如你所需嗎?例如免費的 FreeFileSync 就支援 FTP 同步:
http://www.azofreeware.com/2009/09/freefilesync-22.html