Задать вопрос
mrusklon
@mrusklon
Не получается? Яростно гугли!

Как запретить повторный выбор файлов bat?

Не знаю как сформулировать вопрос для заголовка, опишу всю проблему:
Есть у меня видео "лог" , в определенную папку каждую минуту складываются файлы .wmv . Их надо отправлять на FTP , я написал такой код
@echo off
ren "C:\Users\NAME\Documents\log\Videos\*.wmv" *.zip
"C:\folder2\WinSCP\WinSCP.com" ^
  /log="C:\folder2\WinSCP\WinSCP.log" /ini=nul ^
  /command ^
    "open ftp://логин:пароль@сервер/" ^
    "synchronize remote -criteria=time ..\send\ /log" ^
	"put ..\send\*.zip /logServer/" ^
    "exit"
set WINSCP_RESULT=%ERRORLEVEL%
if %WINSCP_RESULT% equ 0 (
  echo Success
  del /q C:\Users\NAME\Documents\log\Videos\*.zip
) else (
  echo Error
)
exit /b %WINSCP_RESULT%


скрипт берет все файлы из папки Videos , меняет расширение на zip
запускает WinSCP ftp консольный режим , отправляет все файлы .zip на сервер ( для этого было переименовано в zip :) ) . После успешной передачи все zip файлы из папки удалятся , а вновь добавленные .wmv остались и ждут следующего запуска скрипта.

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

Кто подскажет как обойти сей конфуз?
  • Вопрос задан
  • 288 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
mrusklon
@mrusklon Автор вопроса
Не получается? Яростно гугли!
всем спасибо , выложу готовый код , может кому пригодится

@echo off
Set Process=winscp
tasklist | Find /i "%Process%.exe" || (goto Else)
echo net
Goto end
:ELSE
ren "C:\Users\name\Documents\log\Videos\*.wmv" *.zip

"C:\Users\name\Documents\log\WinSCP\WinSCP.com" ^
  /log="C:\Users\name\Documents\log\WinSCP\WinSCP.log" /ini=nul ^
  /command ^
    "open ftp://логин:пароль@сервер/" ^
	"put ../Videos\*.zip /logServer/" ^
    "exit"

set WINSCP_RESULT=%ERRORLEVEL%
if %WINSCP_RESULT% equ 0 (
  echo Success
  del /q C:\Users\name\Documents\log\Videos\*.zip
) else (
  echo Error
)
exit /b %WINSCP_RESULT%
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
В батнике создавайте временный файл-флаг, как-то так:
echo.>file.flag
В самом начале батника проверяйте есть ли этот файл, если файл есть то завершаете батник (предыдущий запуск еще не отработал), если файла нет - работаем дальше (и создаем этот файл). По окончании работы - удаляем файл- флаг.
Другие варианты обнаружения запущенных копий того же батника:
1.аналогично файл-флагу - флаг в реестре
2.можно с помощью tasklist проверять запущен ли процесс с таким же батником.

Побочные эффекты: если батник по какой-то причине не удалит файл-флаг, то следующий процесс никогда не запустится.
Ответ написан
Jump
@Jump
Системный администратор со стажем.
Ну как вариант - снимайте архивный бит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы