批次檔 If 指令

批次檔 If 指令

我第一次嘗試建立批次檔。這將下載一個每週使用新 ID 更新一次的檔案。這是我到目前為止創建的批次文件 -

@echo off
echo open SERVER> temp.txt
echo USERNAME>> temp.txt
echo PWD>> temp.txt
echo cd />> temp.txt
echo cd Events/_PPV_Barker>> temp.txt
echo binary>> temp.txt
echo get Barker*_480i.ts>> temp.txt 
ftp -s:temp.txt
del temp.txt

我知道每次新文件上傳到伺服器上時,文件Barker名都會以480i.ts.我嘗試了 * 如上所示,但它不起作用。如何使用 if 指令每次都取得具有唯一 ID 的檔案?或者除了 if 指令之外還有其他方法嗎?

任何幫助將不勝感激。

謝謝

克沙夫

答案1

如果我理解正確的話,每次訪問伺服器時都會有一個新文件,但您不知道其名稱的詳細資訊。我不知道的是,你下載後文件是否被刪除了,或者你的文件數量不斷增加,你必須選擇最新的。

在最簡單的情況下,只有一個文件,在這裡您的解決方案幾乎是正確的:需要一個簡單的更改,以替換getmget當通配符*起作用時:-

echo mget Barker*_480i.ts>> temp.txt

如果有許多文件與此文件遮罩匹配,那麼每次訪問時您將下載越來越多的文件。一個快速而骯髒的解決方法是將文件保留在當前目錄中並將它們設置為只讀:您將收到很多錯誤,但新文件將下載,並且您不會有傳輸文件的開銷之前已經得到了。

如果您對遠端目錄有完全存取權限,那麼您可以刪除、移動或重命名遠端上下載的文件,這樣您每次只有一個與文件遮罩相符的文件。

如果您不能做任何這些事情,那麼您將需要兩次ftp呼叫:第一個將從遠端取得目錄列表,然後將其與先前的遠端列表進行比較,以便您可以識別新檔案並建立第二個ftp呼叫來檢索它。編寫執行此操作的批次檔並不容易,但這是可能的 - 我在處理網路攝影機檔案時會執行類似的操作。

答案2

如果您願意將密碼和使用者名稱放在腳本中(以純文字形式!),那麼您不應該介意在命令列本身上使用它們。

如果您在下載舊文件後保留舊文件的本機副本,並且不更改它們或它們的時間戳,則可以透過使用消除整個批次檔的想法適用於 Windows 的 wget,並包含該--timestamping選項。這會將本機檔案與遠端檔案的大小和時間戳進行比較,僅在兩者不同或本機檔案不存在時才下載遠端檔案。作為一個額外的好處,如果您錯過了先前的更新,它將下載所有新文件,而不僅僅是最新的文件。

你的命令列看起來像這樣:

`wget --ftp-user=<user> --ftp-password=<password> --timestamping ftp://example.com/Events/_PPV_Barker/Barker*_480i.ts`

當然,這假設您有適當的權限來安裝 wget,並且您在本地保留先前的副本。

答案3

嘗試使用:

mget

命令。我查了一下,上面寫著要取得多個文件。

答案4

其他程序/方式

使用ftp並不安全。
ftp 的安全版本被命名為ftps,FTP 安全。如果可以的話,請嘗試使用它來代替ftp

編寫自己的腳本始終是一個很好的練習,但最好使用為此目的創建的工具(如果存在)。作為更舒適的替代方案,您可以使用wget(見下文)不需要遠端安裝任何其他伺服器。

由於您可以存取遠端電腦(如果已安裝),因此您可以使用rsync也。
如果它錯過了嘗試使用scp -p,或sftp利用 ssh-key [4]

如果您想堅持使用ftp,請使用mget從目錄中盲目複製所有檔案的選項,但預先使用命令將檔案傳輸模式設為二進位binary


獲取

wget - 非互動式網頁下載器 [1,2]。您可以使用:

wget -S -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts" 

此選項-N是保留時間戳記並僅下載比本機檔案更新的檔案。可能需要
引用"以避免 Linux 下的 shell 擴充。
它也可以在 Windows 下運作(當然是使用 Windows 版本的程式)。


更完整的命令列在你的情況下(而且只有一行)應該是:

wget -user=USERNAME -password=PASSWORD 
     -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts" 

當然,更明智的做法是避免在您的密碼中寫入密碼。命令列或在腳本中...您可以簡單地使用不言自明的選項--ask-password

Linux 下更好的解決方案是將所需的資訊放在名為.wgetrc.在 Windows 文件中應該很容易找到等效名稱

$ cat ~/.wgetrc
ftp_user=UsernameOnTheRemoteFTP
ftp_password=PasswordOnTheRemoteFTP
http_user=UsernameOnTheRemoteHTTP
http_password=PasswordOnTheRemoteHTTP

您可以從wget --help或 從閱讀man wget

-N, --時間戳 不要重新檢索文件,除非比本機文件更新
-S, --伺服器回應 列印伺服器響應。

--用戶=用戶
--密碼=密碼
指定FTP 和HTTP 檔案檢索的使用者名稱user 和密碼password。可以使用 FTP 連線的 --ftp-user 和 --ftp-password 選項以及 HTTP 連線的 --http-user 和 --http-password 選項來覆寫這些參數。


相關內容