Пакетный файл Если команда

Пакетный файл Если команда

Я пытаюсь создать пакетный файл в первый раз. Это будет загрузка файла, который обновляется раз в неделю с новым 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, чтобы каждый раз получать файл с уникальным идентификатором? или есть другой способ, кроме команды if?

Любая помощь будет оценена по достоинству.

Спасибо

Кешав

решение1

Если я правильно вас понял, каждый раз, когда вы заходите на сервер, появляется новый файл, но вы не знаете подробностей его имени. Я не знаю, удаляется ли файл после того, как вы его скачали, или у вас постоянно растет количество файлов, и вам приходится выбирать последний.

В простейшем случае есть только один файл, и здесь ваше решение почти верное: необходимо одно простое изменение, заменить getна mget, когда подстановочный знак *сработает:-

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

Если есть много файлов, соответствующих этой маске файла, то вы будете загружать все большее количество файлов при каждом доступе. Быстрое и грязное решение — сохранить файлы в текущем каталоге и сделать их доступными только для чтения: вы получите много ошибок, но новый файл будет загружен, и у вас не будет накладных расходов на передачу файлов, которые вы получили ранее.

Если у вас есть полный доступ к удаленному каталогу, то вы можете удалить, переместить или переименовать загруженный файл на удаленном компьютере, так что каждый раз у вас будет только один файл, соответствующий маске файла.

Если вы не можете сделать ни одну из этих вещей, то вам понадобятся два ftpвызова: первый получит список каталогов с удаленного компьютера, который вы затем сравните с вашим предыдущим удаленным списком, чтобы вы могли идентифицировать новый файл и создать второй ftpвызов для его извлечения. Пакетный файл для этого будет нелегко написать, но это возможно — я делаю такие вещи, когда обрабатываю файлы WebCam.

решение2

Если вы готовы поместить свой пароль и имя пользователя в скрипт (в виде обычного текста!), то вы не должны возражать против их использования в самой командной строке.

Если вы сохраняете локальные копии старых файлов после их загрузки и не меняете их или их временные метки, вы можете полностью отказаться от идеи пакетного файла, используяwget для Windows, и включите --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-ключом [4] .

Если вы хотите использовать ftp, используйте mgetопцию, которая слепо скопирует все файлы из каталога, но заранее установите режим передачи файлов на двоичный с помощью команды binary.


Wget

wget - Неинтерактивный сетевой загрузчик [1,2] . Вы можете использовать:

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

Опция -Nзаключается в сохранении временных меток и загрузке только файлов, более новых, чем локальные.
Кавычка "может понадобиться, чтобы избежать расширения оболочки под Linux.
Работает и под 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, --server-response Ответ сервера печати.

--пользователь=пользователь
--password=пароль
Укажите имя пользователя и пароль для получения файлов по FTP и HTTP. Эти параметры можно переопределить с помощью параметров --ftp-user и --ftp-password для FTP-подключений и параметров --http-user и --http-password для HTTP-подключений.


Связанный контент