練功房推薦書單

  • 猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證 (電子書)
  • 流浪教師存零股存到3000萬(全新增修版)(書+DVD)
  • 開始在關西自助旅行(京都‧大阪‧神戶‧奈良)(全新增訂版)
  • 不敗教主的300張股票存股術

[Windows]如何定時自動備份整個網站目錄到遠端伺服器 RSS feed
Forum Index » Windows Server
Author Message
andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 714
Location: 台北
Offline
試著改用psftp這個程式來執行SFTP的工作看看
將原先使用ftp的指令改為psftp指令,下載後將psftp.exe放在remote_backup_web.bat相同目錄即可。
remote_backup_web.bat:

@echo off
rem ---------------------------------------------------------------------------
rem Backup web application to remote host
rem
rem $Id: remote_backup_web.bat 2011-10-20 07:10:58 andowson $
rem ---------------------------------------------------------------------------

rem Find out Windows version
for /f "tokens=1-2 delims=[" %%i in ('ver') do echo %%j > ver1.txt
for /f "tokens=1-2 delims= " %%i in (ver1.txt) do echo %%j > ver2.txt
for /f "tokens=1 delims=]" %%i in (ver2.txt) do set vers=%%i
del ver1.txt
del ver2.txt
if %vers% GEQ 6 goto ver6

rem Find out web server's IP address
ipconfig | findstr "Address" > ip1.txt
for /f "tokens=1-2 delims=:" %%i in (ip1.txt) do echo %%j > ip2.txt
for /f "tokens=1-2 delims= " %%i in (ip2.txt) do (set ip=%%i)
del ip1.txt
del ip2.txt
goto common

:ver6
rem Find out web server's IP address
ipconfig | findstr "IPv4 位址" > ip1.txt
for /f "tokens=1-2 delims=:" %%i in (ip1.txt) do echo %%j > ip2.txt
for /f "tokens=1-2 delims= " %%i in (ip2.txt) do (set ip=%%i)
del ip1.txt
del ip2.txt

:common
rem Get today's year, month, day
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set year=%%a& set month=%%b& set day=%%c)

rem Modify the following line for your environment
set TARGETNAME=demoweb
set TARGET=C:\Inetpub\wwwroot\%TARGETNAME%
set BACKUPDIR=D:\backup
set BACKUPFILE=%BACKUPDIR%\%year%\%TARGETNAME%_%ip%_%year%%month%%day%.zip
set LOGFILE=%TARGETNAME%_backup.log
set ZIPPASSWORD=secret

echo. | date | findstr "現在日期" >> %LOGFILE%
echo. | time | findstr "現在時間" >> %LOGFILE%

rem Compress the target directory with encryption password before ftp
"C:\Program Files\7-Zip\7z.exe" a -p%ZIPPASSWORD% %BACKUPFILE% %TARGET%\* >> %LOGFILE%

if not exist %BACKUPDIR%\%year% mkdir %BACKUPDIR%\%year%

if not exist %BACKUPFILE% goto nofile
goto ftpsession

:nofile
echo [FAILURE] File not found: %BACKUPFILE% >> %LOGFILE%
echo.>> %LOGFILE%
goto end

:ftpsession
for /f "tokens=1-3 delims= " %%i in (ftp.cfg) do (set FTPSERVER=%%i&set USERNAME=%%j&set PASSWORD=%%k)
echo mkdir %year%%month%%day% > ftpscript.txt
echo cd %year%%month%%day% >> ftpscript.txt
echo put %BACKUPFILE% >> ftpscript.txt
echo bye >> ftpscript.txt

echo ---=== ftp session begin ===--->> %LOGFILE%
echo ftp %BACKUPFILE% to %FTPSERVER% >> %LOGFILE%

psftp %FTPSERVER% -l %USERNAME% -pw %PASSWORD% -be -b ftpscript.txt >> %LOGFILE%

echo ---=== ftp session end ===--->> %LOGFILE%
echo. |time | findstr "現在時間">> %LOGFILE%
echo.>> %LOGFILE%

del ftpscript.txt

set TARGET=
set TARGETNAME=
set BACKUPDIR=
set BACKUPFILE=
set LOGFILE=
set ZIPPASSWORD=
set FTPSERVER=
set USERNAME=
set PASSWORD=

:end


ftp.cfg可以使用原來的格式,也是放在跟remote_backup_web.bat相同目錄下:
remote_sftp_server   username   password


最後先開啟一個CMD命令視窗,然後利用cd切換工作目錄到存放remote_backup_web.bat的目錄下
手動執行一次remote_backup_web.bat,測試是否可以正常運作。因為第一次連線至SFTP Server需要驗證主機端的憑證,會詢問是否要儲存遠端主機的key,選擇yes。

有關psftp的使用說明請參考下列網址:
http://libai.math.ncu.edu.tw/bcc16/6/putty/psftp.html

註:本batch script中含有部份中文字串,存檔時請注意選擇編碼為ANSI/Windows
 Filename remote_backup_web.bat [Disk] Download
 Description 改用psftp取代ftp
 Filesize 3 Kbytes
 Downloaded:  8 time(s)


分享經驗 累積智慧
[WWW]
starzine

九級學員

Joined: 2009/9/29
Messages: 14
Offline
大大您好:

不好意思又有問題想請教,因為對DOS的指令實在是很不熟悉。
因為需要在FTP中的各個資料夾中抓取所需的資料,
所以需要A資料夾抓完後,再到上一層資料夾,再至B資料夾。
原本想說可以把要抓的資料夾寫成一個txt檔,就像大大上面寫的holiday.txt一樣。
不過在FTP中,好像不太能用for這個語法。

我的寫法如下:
echo lcd %BACKUPDIR% >> ftpscript.txt
for /f "tokens=1-50 delims= " %%i in (pbank.txt) do(
echo cd %FTPDIR%>>ftpscript.txt
echo mget *%year%%month%%day%.*>> ftpscript.txt
echo cd \>> ftpscript.txt
)
目前FTP好像到這一段就不跑了。

所以可否請看看還有沒有什麼辦法?
感謝!
andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 714
Location: 台北
Offline
starzine您好,
看起來你的for迴圈那段有點問題,如果你是一行一筆資料的話,請參考先前我的holiday.bat裡面的寫法。

echo lcd %BACKUPDIR% >> ftpscript.txt
echo prompt >> ftpscript.txt
for /f %%i in (pbank.txt) do (
echo cd %%i >>ftpscript.txt
echo mget *%year%%month%%day%.* >> ftpscript.txt
echo cd .. >> ftpscript.txt
)

又你可以先把你的測試程式寫成一個小bat檔,測試看看能不能動,再貼回原來的主程式去。


分享經驗 累積智慧
[WWW]
starzine

九級學員

Joined: 2009/9/29
Messages: 14
Offline
大大您好:

感謝您的回答,不過因為您寫的那個holiday.bat...我其實看不是很懂,可否請您稍微解釋一下呢?麻煩您了!

andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 714
Location: 台北
Offline
我的意思是指如果您想要拜訪(visit)holidays.txt檔案中每一行的資料時,只要寫成下面的 for迴圈即可:
@echo off

for /f %%i in (holidays.txt) do (
echo %%i is a holiday
)

%%i 就是迴圈每前進一圈時,由holidays.txt所讀出的下一筆資料
假設holidays.txt內容如下
2011/1/1

2011/2/2
2011/2/28
2011/4/4
2011/4/5
2011/6/6
2011/9/12
2011/10/10

將會依序印出:
2011/1/1 is a holiday

2011/2/2 is a holiday
2011/2/28 is a holiday
2011/4/4 is a holiday
2011/4/5 is a holiday
2011/6/6 is a holiday
2011/9/12 is a holiday
2011/10/10 is a holiday

分享經驗 累積智慧
[WWW]
starzine

九級學員

Joined: 2009/9/29
Messages: 14
Offline
andowson wrote:我的意思是指如果您想要拜訪(visit)holidays.txt檔案中每一行的資料時,只要寫成下面的 for迴圈即可:
@echo off

for /f %%i in (holidays.txt) do (
echo %%i is a holiday
)

%%i 就是迴圈每前進一圈時,由holidays.txt所讀出的下一筆資料
假設holidays.txt內容如下
2011/1/1

2011/2/2
2011/2/28
2011/4/4
2011/4/5
2011/6/6
2011/9/12
2011/10/10

將會依序印出:
2011/1/1 is a holiday

2011/2/2 is a holiday
2011/2/28 is a holiday
2011/4/4 is a holiday
2011/4/5 is a holiday
2011/6/6 is a holiday
2011/9/12 is a holiday
2011/10/10 is a holiday


不好意思大大:

我還是不太明白,那這個@echo off可以寫在FTP裡面嗎?
因為我寫了一個小批次後,還是不太能夠work...
例如:
@echo off
for /f %%i in (pbank.txt) do(
echo %%i
)
寫了do之後,按了以後,do不能用。
另外%%i可否變成%%m?
真的很抱歉,麻煩您再協助一下!
andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 714
Location: 台北
Offline
starzine您好:
還是老話一句,請仔細觀察我的範例程式,細節就是魔鬼啦:
將您的小批次檔存檔為test.bat,利用cmd開啟一個DOS 命令視窗後,執行test,顯示下列的錯誤訊息
這個時候不應有 do(。

不知道您有沒有發現,我的範例程式do和(中間有空一格?
將do(改為do (後,test.bat就可以正常執行了(前提是假設pbank.txt存在啦)

另外,%%i可否變成%%m?
這個當然是可以的,不過要改完整就是了,不要只改到一個地方:
@echo off 

for /f %%m in (pbank.txt) do (
echo %%m
)


最後我不清楚你問的@echo off可以寫在FTP裡面嗎? 這裡的FTP是指ftpscript.txt嗎?

分享經驗 累積智慧
[WWW]
starzine

九級學員

Joined: 2009/9/29
Messages: 14
Offline
大大您好:
不好意思又打擾了,
有兩個問題
我把.txt檔寫在FTP中。大概如下


echo open %FTPSERVER% > ftpscript.txt
echo user %USERNAME% %PASSWORD% >> ftpscript.txt
echo lcd %BACKUPDIR% >> ftpscript.txt
for /f %%m in (pbank.txt) do (
echo cd %%m>>ftpscript.txt
rem echo mget *%year%%month%%day%.*>> ftpscript.txt
echo mget *.*>> ftpscript.txt
echo cd \>> ftpscript.txt
)
echo cd %FTPDIR2%>>ftpscript.txt
echo mget *%year%%month%%day%.*>> ftpscript.txt
rem echo get *.*>> ftpscript.txt
echo dir *%year%%month%%day%.*>> ftpscript.txt
rem echo mget *.*>> ftpscript.txt
echo bye >> ftpscript.txt
echo ---=== ftp session begins ===--->> %LOGFILE%
echo ftp %FTPSERVER% to %BACKUPDIR% >> %LOGFILE%
echo mget *%year%%month%%day%.*>>%LOGFILE%

我的想法是,迴圈再進入該資料夾後,抓取所有的資料完畢,再回上一層,然後再進入下一個資料夾。而log檔案的確是有進入每一個資料夾,但是卻沒有辦法抓取任何的檔案。想請問是否有哪裡有錯誤?
另外一個問題是,可否抓取系統日的資料呢?(因為無法從資料檔名來做區別,所以可否以系統日的資料來抓取?)
不好意思,打擾了。
andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 714
Location: 台北
Offline
starzine您好:
可否先將bat檔中的這一行註解掉:
del ftpscript.txt

方法就是前面加上rem,如下:
rem del ftpscript.txt

然後你再執行一次,接著你把ftpscript.txt和log檔都傳上來,比較方便除錯,謝謝~


分享經驗 累積智慧
[WWW]
starzine

九級學員

Joined: 2009/9/29
Messages: 14
Offline
andowson wrote:starzine您好:
可否先將bat檔中的這一行註解掉:
del ftpscript.txt

方法就是前面加上rem,如下:
rem del ftpscript.txt

然後你再執行一次,接著你把ftpscript.txt和log檔都傳上來,比較方便除錯,謝謝~

大大您好:
我的整個程式是這樣的寫法

@echo off
set BACKUPDIR=s:\upload
set BACKUPDIR2=s:\uploadbackup
set BACKUPFILE=%BACKUPDIR2%\%year%%month%%day%
set FTPDIR2=FundX
set LOGFILE=%year%%month%%day%_backup.log

echo wscript.echo dateadd("d",-2,date) >%tmp%\tmp.vbs
for /f "tokens=1-3 delims=/ " %%a in ('cscript /nologo %tmp%\tmp.vbs') do (set year=%%a& set month=%%b& set day=%%c)
if %month% LEQ 9 set month=0%month%
if %day% LEQ 9 set day=0%day%

echo. | date | findstr "現在日期" >> %LOGFILE%
echo. | time | findstr "現在時間" >> %LOGFILE%

:ftpsession
for /f "tokens=1-3 delims= " %%i in (ftp.cfg) do (set FTPSERVER=%%i&set USERNAME=%%j&set PASSWORD=%%k)

echo open %FTPSERVER% > ftpscript.txt
echo user %USERNAME% %PASSWORD% >> ftpscript.txt
echo lcd %BACKUPDIR% >> ftpscript.txt
for /f %%m in (pbank.txt) do (
echo cd %%m>>ftpscript.txt
echo mget *%year%%month%%day%.*>> ftpscript.txt
rem echo mget *.*>> ftpscript.txt
echo cd \>> ftpscript.txt
)
echo cd %FTPDIR2%>>ftpscript.txt
echo mget *%year%%month%%day%.*>> ftpscript.txt
rem echo get *.*>> ftpscript.txt
echo dir *%year%%month%%day%.*>> ftpscript.txt
rem echo mget *.*>> ftpscript.txt
echo bye >> ftpscript.txt
echo ---=== ftp session begins ===--->> %LOGFILE%
echo ftp %FTPSERVER% to %BACKUPDIR% >> %LOGFILE%
echo mget *%year%%month%%day%.*>>%LOGFILE%

psftp %FTPSERVER% -l %USERNAME% -pw %PASSWORD% -be -b ftpscript.txt >> %LOGFILE%

xcopy s:\upload\*%year%%month%%day%.* S:\uploadbackup /E/C/Q/R/Y
xcopy s:\upload\*.* S:\uploadbackup /E/C/Q/R/Y
if not exist %BACKUPDIR2%\%year%%month%%day% mkdir %BACKUPDIR2%\%year%%month%%day%
move /Y s:\uploadbackup\*%year%%month%%day%.* %BACKUPDIR2%\%year%%month%%day%
move /Y s:\uploadbackup\*.* %BACKUPDIR2%\%year%%month%%day%

echo ---=== ftp session ends ===--->> %LOGFILE%
echo. |time | findstr "現在時間">> %LOGFILE%
echo %BACKUPDIR2%\%year%%month%%day%>> %LOGFILE%
echo %BACKUPFILE1%>> %LOGFILE%
echo.>> %LOGFILE%
rem del ftpscript.txt
rem del %LOGFILE%_backup.log
move /Y I:\wSTN_IO\_backup.log %BACKUPDIR2%\%year%%month%%day%
move /Y I:\wSTN_IO\ftpscript.txt %BACKUPDIR2%\%year%%month%%day%

set TARGET=
set TARGETNAME=
set BACKUPDIR=
set BACKUPFILE=
set LOGFILE=
set FTPSERVER=
set USERNAME=
set PASSWORD=
:end

那關於ftpscript.txt是這樣

open 61.66.19X.XXX
user S00XX S0XXX
lcd s:\upload
cd A0001
mget *20120104.*
cd \
cd A0002
mget *20120104.*
cd \
cd A0003
mget *20120104.*
cd \
cd A0004
mget *20120104.*
cd \
cd A0005
mget *20120104.*
cd \
cd A0006
mget *20120104.*
cd \
cd A0007
mget *20120104.*
cd \
cd A0008
mget *20120104.*
cd \
cd A0009
mget *20120104.*
cd \
cd A0010
mget *20120104.*
cd \
cd A0011
mget *20120104.*
cd \
cd A0012
mget *20120104.*
cd \
cd A0013
mget *20120104.*
cd \
cd A0014
mget *20120104.*
cd \
cd A0015
mget *20120104.*
cd \
cd A0016
mget *20120104.*
cd \
cd A0017
mget *20120104.*
cd \
cd A0018
mget *20120104.*
cd \
cd A0019
mget *20120104.*
cd \
cd A0020
mget *20120104.*
cd \
cd A0021
mget *20120104.*
cd \
cd A0022
mget *20120104.*
cd \
cd A0023
mget *20120104.*
cd \
cd A0024
mget *20120104.*
cd \
cd A0025
mget *20120104.*
cd \
cd A0026
mget *20120104.*
cd \
cd A0027
mget *20120104.*
cd \
cd A0028
mget *20120104.*
cd \
cd A0029
mget *20120104.*
cd \
cd A0030
mget *20120104.*
cd \
cd A0031
mget *20120104.*
cd \
cd A0032
mget *20120104.*
cd \
cd A0033
mget *20120104.*
cd \
cd A0034
mget *20120104.*
cd \
cd A0035
mget *20120104.*
cd \
cd A0036
mget *20120104.*
cd \
cd A0037
mget *20120104.*
cd \
cd A0038
mget *20120104.*
cd \
cd A0039
mget *20120104.*
cd \
cd A0040
mget *20120104.*
cd \
cd A0041
mget *20120104.*
cd \
cd A0042
mget *20120104.*
cd \
cd A0043
mget *20120104.*
cd \
cd A0044
mget *20120104.*
cd \
cd A0045
mget *20120104.*
cd \
cd A0046
mget *20120104.*
cd \
cd A0047
mget *20120104.*
cd \
cd A0048
mget *20120104.*
cd \
cd A0049
mget *20120104.*
cd \
cd A0099
mget *20120104.*
cd \
cd FundX
mget *20120104.*
dir *20120104.*
bye

有兩個問題
1. 在執行這個.bat檔時,似乎沒辦法執行完畢。
2. 也沒有相關的log記錄。
可是從ftpscript.txt來看,應該是有跑了每一個資料夾。
但是卻沒有將任何資料下載下來。
這是很奇怪的一件事。
再麻煩大大了!
andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 714
Location: 台北
Offline
初步修正如下:
@echo off

echo wscript.echo dateadd("d",-2,date) >%tmp%\tmp.vbs
for /f "tokens=1-3 delims=/ " %%a in ('cscript /nologo %tmp%\tmp.vbs') do (set year=%%a& set month=%%b& set day=%%c)
if %month% LEQ 9 set month=0%month%
if %day% LEQ 9 set day=0%day%
rem 去掉字串尾端空白
set day=%day:~,2%

set BACKUPDIR=s:\upload
set BACKUPDIR2=s:\uploadbackup
set BACKUPFILE=%BACKUPDIR2%\%year%%month%%day%
set FTPDIR2=FundX
set LOGFILE=%year%%month%%day%_backup.log
echo %LOGFILE%
echo. | date | findstr "現在日期" >> %LOGFILE%
echo. | time | findstr "現在時間" >> %LOGFILE%

:ftpsession
for /f "tokens=1-3 delims= " %%i in (ftp.cfg) do (set FTPSERVER=%%i&set USERNAME=%%j&set PASSWORD=%%k)

rem echo open %FTPSERVER% > ftpscript.txt
rem echo user %USERNAME% %PASSWORD% >> ftpscript.txt
echo lcd %BACKUPDIR% > ftpscript.txt
for /f %%m in (pbank.txt) do (
echo cd %%m>>ftpscript.txt
echo mget *%year%%month%%day%.*>> ftpscript.txt
rem echo mget *.*>> ftpscript.txt
echo cd ..>> ftpscript.txt
)
echo cd %FTPDIR2%>>ftpscript.txt
echo mget *%year%%month%%day%.*>> ftpscript.txt
rem echo get *.*>> ftpscript.txt
echo dir *%year%%month%%day%.*>> ftpscript.txt
rem echo mget *.*>> ftpscript.txt
echo bye >> ftpscript.txt
echo ---=== ftp session begins ===--->> %LOGFILE%
echo ftp %FTPSERVER% to %BACKUPDIR% >> %LOGFILE%
echo mget *%year%%month%%day%.*>>%LOGFILE%

psftp %FTPSERVER% -l %USERNAME% -pw %PASSWORD% -be -b ftpscript.txt >> %LOGFILE%

xcopy %BACKUPDIR%\*%year%%month%%day%.* %BACKUPDIR2% /E/C/Q/R/Y
xcopy %BACKUPDIR%\*.* %BACKUPDIR2% /E/C/Q/R/Y
if not exist %BACKUPDIR2%\%year%%month%%day% mkdir %BACKUPDIR2%\%year%%month%%day%
move /Y %BACKUPDIR2%\*%year%%month%%day%.* %BACKUPDIR2%\%year%%month%%day%
move /Y %BACKUPDIR2%\*.* %BACKUPDIR2%\%year%%month%%day%

echo ---=== ftp session ends ===--->> %LOGFILE%
echo. |time | findstr "現在時間">> %LOGFILE%
echo %BACKUPDIR2%\%year%%month%%day%>> %LOGFILE%
echo %BACKUPFILE1%>> %LOGFILE%
echo.>> %LOGFILE%
rem del ftpscript.txt
rem del %LOGFILE%
move /Y I:\wSTN_IO\%LOGFILE% %BACKUPDIR2%\%year%%month%%day%
move /Y I:\wSTN_IO\ftpscript.txt %BACKUPDIR2%\%year%%month%%day%

set TARGET=
set TARGETNAME=
set BACKUPDIR=
set BACKUPFILE=
set LOGFILE=
set FTPSERVER=
set USERNAME=
set PASSWORD=
:end


說明如下:
將原8~11行搬移至第2行以取得year month day變數的定義
增加第7行, 修正day變數尾端有空白字串的bug
刪除(這裡我先用rem註解掉)原程式中的19-20行
rem echo open %FTPSERVER% > ftpscript.txt

rem echo user %USERNAME% %PASSWORD% >> ftpscript.txt

同時修改原第21行如下:
echo lcd %BACKUPDIR% > ftpscript.txt

另外我不知道你用cd \的原因為何,是否可以試著把cd \ 改為cd ..
將原第26行改為
echo cd ..>> ftpscript.txt


參考資料:
幾個在寫 MS-DOS batch script 時好用的動作

分享經驗 累積智慧
[WWW]
starzine

九級學員

Joined: 2009/9/29
Messages: 14
Offline
說明如下:
將原8~11行搬移至第2行以取得year month day變數的定義
增加第7行, 修正day變數尾端有空白字串的bug
刪除(這裡我先用rem註解掉)原程式中的19-20行
rem echo open %FTPSERVER% > ftpscript.txt

rem echo user %USERNAME% %PASSWORD% >> ftpscript.txt

同時修改原第21行如下:
echo lcd %BACKUPDIR% > ftpscript.txt

另外我不知道你用cd \的原因為何,是否可以試著把cd \ 改為cd ..
將原第26行改為
echo cd ..>> ftpscript.txt


參考資料:
幾個在寫 MS-DOS batch script 時好用的動作

大大您好:
謝謝您的建議,我會把程式再稍做修改。
但有一個問題想請教,要如何抓取系統日的檔案呢?
也就是說,如果今天是1/9日,我想抓取修改日期是1/6日的資料,但檔案名稱不見得是0106的資料。
請問有辦法可以做的到嗎?
還有,若是有這樣的問題時,若在Google上欲搜尋,應該下什麼樣的關鍵字呢?
麻煩您囉!
andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 714
Location: 台北
Offline
您可以參考下面的範例程式去修改
@echo off

rem 取得系統日期
for /f "tokens=1 delims= " %%a in ('date /T') do set today=%%a

rem 先找出現行目錄下所有檔案並依日期排序後再過濾出日期為系統日期之檔案存到dir.txt
dir /A:-D /O:D | find /i "%today%" > dir.txt

if exist filelist.txt del filelist.txt
rem 利用空白字元切割,由dir.txt每列的第五欄中取得檔案名稱
for /f "tokens=5 delims= " %%a in (dir.txt) do (
echo %%a >> filelist.txt
rem 下面可以開始抓檔案了
rem get %%a
)


我是利用DOS file date(google)這樣子的關鍵字去搜尋的
參考資料:
http://www.computing.net/answers/dos/dos-batch-to-check-file-date/12627.html

分享經驗 累積智慧
[WWW]
starzine

九級學員

Joined: 2009/9/29
Messages: 14
Offline
andowson wrote:
另外我不知道你用cd \的原因為何,是否可以試著把cd \ 改為cd ..
將原第26行改為
echo cd ..>> ftpscript.txt


大大您好:
謝謝您的協助,後來經過測試後,發現第26行改成這樣就行了

echo cd >> ftpscript.txt

也就是說psftp好像只懂得cd
而不懂得cd..或cd\


這也是經過實驗之後才得到的結果。

另外,關於系統日期的部分,
我是想要在透過psftp連線到遠端的主機上,得到遠端主機上每個資料夾的修改日期。
再以遠端主機上的資料夾以修改日期排序。
再進入各個資料夾中抓取該修改日期之資料
想抓取系統日期的前一天的資料,但其檔名不見得係以修改日期來命名。

不過發現psftp似乎沒有支援相關指令可以用日期來排序。

目前也只找到ls 和dir可以使用。
但是ls 及dir 似乎沒有更進階的指令來作為排序的動作。(ex.dir -D之類的)
好像都無法按照日期排序。
目前好像只能用資料夾名稱排序。

所以似乎沒辦法使用大大下方所寫的程式。
大大所提供的程式,是否只能適用於本機端呢?

還是說,還有什麼方法呢?
謝謝大大囉!
andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 714
Location: 台北
Offline
starzine您好:
我給的範例確實是只能在本機端執行,取得本機端的檔案名稱,而您所需要的是取得遠端檔案伺服器目錄下的檔案清單。
可以在sftp下執行目錄排序的指令如下(日期最近的會排在上面)
ls -lt
但接下來可能你會問要如何從psftp將這個指令的結果(目錄內的檔案清單)傳回,好讓我們可以再加以過濾出某個日期範圍內的檔案?

你先想一下,好好的想一 下.... smilie

你不知道,我也不知道, smilie
這個問題可能已經超出光靠DOS Batch語法就能完成的事情了。

還是再問一次,有沒有可能改為規範遠端檔案伺服器上檔案的命名方式,否則我想就只有老老實實去寫程式來處理會比較快。

當問題複雜到一個程度時,還是真得要寫個程式來執行這個任務。(如何寫這個程式我就不在這邊討論,可以參考http://www.andowson.com/posts/list/199.page)


分享經驗 累積智慧
[WWW]
 
Forum Index » Windows Server
Go to:   
Mobile view