<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT: Циклическая передача нескольких команд.]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=13726&amp;type=atom" />
	<updated>2018-05-31T23:18:24Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=13726</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Циклическая передача нескольких команд.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=125695#p125695" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>baplo пишет:</cite><blockquote><p>Как создать цикл ввод этих команд?</p></blockquote></div><p>Бесконечный цикл:<br /></p><div class="codebox"><pre><code>for /l %%a in (0,0,0) do (
	ftp -s:ftp_command.txt -i 93.189.41.9
	ping -n 3 127.0.0.1
)</code></pre></div><p>В ftp_command.txt добавляем команды скачки и удаления:<br /></p><div class="quotebox"><cite>baplo пишет:</cite><blockquote><p>GET FileName.ini D:\FileName.ini<br />Delete FileName.ini</p></blockquote></div><p><strong>ping</strong> нужен для небольшой задержки перед повторным подключением.</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Offtopic</div><div class="fancy_spoiler"><p>Я бы сделал запуск скрипта:<br /></p><div class="codebox"><pre><code>ftp -s:ftp_command.txt -i 93.189.41.9</code></pre></div><p>из планировщика, например, каждые 5-10 минут.</p></div></div><p>Если заранее имя файла на FTP-сервере неизвестно, сначала придётся подключаться к серверу, забирать листинг корня (если есть поддиректории, также в цикле переподключаться и получать листинги поддиректорий), получать имя нужного файла (например, по маске) и формировать список команд для скачки и удаления нужного.</p><p>Честно говоря, лучше для таких целей поискать любой другой ftp-клиент с более широкими возможностями.</p><p>Для примера приведу скрипт, который проверял public FTP adobe.com и выкачивал оттуда рекурсивно acrobat reader и патчи к нему.<br /><strong>!!! Achtung !!! при первом запуске скрипт выкачает неск. гигов!</strong><br /></p><div class="codebox"><pre><code>
@ECHO OFF &amp; SETLOCAL ENABLEEXTENSIONS

SET FTP_SERVER=ftp.adobe.com
SET FTP_LOGIN=anonymous
SET FTP_PASS=anonymous@example.com
SET TEMP=%CD%

IF NOT EXIST %TEMP%\%~n0 MD %TEMP%\%~n0
PUSHD %TEMP%\%~n0

SET FTP_CMD_FILE=ftp_cmd_file
SET FTP_LIST_FILE=ftp_list_file

SET REMPATH=pub/adobe/reader/win/11.x
SET LCLPATH=%TEMP%\%~n0
CALL :CONNECT %REMPATH% %LCLPATH%

FOR /F &quot;tokens=9&quot; %%a IN (&#039;TYPE dirs.txt&#039;) DO (
	IF NOT EXIST %LCLPATH%\%%a MD %LCLPATH%\%%a
    CALL :CONNECT %REMPATH%/%%a %LCLPATH%\%%a
    IF EXIST &quot;%LCLPATH%\%%a\dirs.txt&quot; (
    	FOR /F &quot;tokens=9&quot; %%b IN (&#039;TYPE %LCLPATH%\%%a\dirs.txt&#039;) DO (
			IF NOT EXIST %LCLPATH%\%%a\%%b MD %LCLPATH%\%%a\%%b
		    CALL :CONNECT %REMPATH%/%%a/%%b %LCLPATH%\%%a\%%b
    	)

    )
)

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f %%a IN (&#039;DIR /B/S/A-D %TEMP%\%~n0\*get.txt^|FINDSTR.EXE /C:&quot;\\ru_RU\\&quot; /C:&quot;\\en_US\\&quot; /C:&quot;\\misc\\&quot; /C:&quot;\\AppV\\&quot;&#039;) do (
	ECHO %%a &gt;&gt; %LCLPATH%\get.lst
)

FOR /F %%a IN (&#039;type %LCLPATH%\get.lst^|SORT&#039;) DO (
	FOR /F &quot;tokens=9&quot; %%b IN (&#039;TYPE %%a&#039;) DO (
		SET _RMTDIR=%%~dpa
        IF &quot;!_RMTDIR:~-1!&quot; == &quot;\&quot; (
			set _RMTDIR=!_RMTDIR:~0,-1!
        )
        SET _RMTDIR=!_RMTDIR:%LCLPATH%\=!
        SET _RMTDIR=!_RMTDIR:\=/!
        CALL :GETFILE %REMPATH%/!_RMTDIR! %TEMP%\GET\!_RMTDIR:/=\! %%b
	)
)

POPD
EXIT /B 0 &amp; ENDLOCAL

:CONNECT
IF NOT EXIST %2 MD %2
ECHO.open %FTP_SERVER%&gt;%FTP_CMD_FILE%
ECHO.%FTP_LOGIN%&gt;&gt;%FTP_CMD_FILE%
ECHO.%FTP_PASS%&gt;&gt;%FTP_CMD_FILE%
ECHO.verbose&gt;&gt;%FTP_CMD_FILE%
ECHO.binary&gt;&gt;%FTP_CMD_FILE%
ECHO.cd %1&gt;&gt;%FTP_CMD_FILE%
ECHO.lcd %2&gt;&gt;%FTP_CMD_FILE%
ECHO.dir . %FTP_LIST_FILE%&gt;&gt;%FTP_CMD_FILE%
ECHO.quit&gt;&gt;%FTP_CMD_FILE%

FTP.EXE -s:&quot;%FTP_CMD_FILE%&quot;

(TYPE %2\%FTP_LIST_FILE%|FINDSTR.EXE &quot;^d.&quot; 2&gt;&amp;1 &gt;nul) &amp;&amp; (TYPE %2\%FTP_LIST_FILE%|FINDSTR.EXE &quot;^d.&quot; &gt; %2\dirs.txt)
(TYPE %2\%FTP_LIST_FILE%|FINDSTR.EXE &quot;^-r.&quot; 2&gt;&amp;1 &gt;nul) &amp;&amp; (TYPE %2\%FTP_LIST_FILE%|FINDSTR.EXE &quot;^-r.&quot; &gt; %2\files.txt)
IF EXIST %2\files.txt (
	(TYPE %2\files.txt|FINDSTR.EXE /r /i /C:&quot;.ms[ip]&quot; /C:&quot;.exe&quot; /C:&quot;.zip&quot; /C:&quot;.cab&quot; 2&gt;&amp;1 &gt;nul) &amp;&amp; (TYPE %2\files.txt|FINDSTR.EXE /r /i /C:&quot;.ms[ip]&quot; /C:&quot;.exe&quot; /C:&quot;.zip&quot; /C:&quot;.cab&quot; &gt; %2\get.txt)
)

EXIT /B 0

:GETFILE
IF NOT EXIST %2\%3 (
	IF NOT EXIST %2 MD %2
	ECHO.open %FTP_SERVER%&gt;%FTP_CMD_FILE%
	ECHO.%FTP_LOGIN%&gt;&gt;%FTP_CMD_FILE%
	ECHO.%FTP_PASS%&gt;&gt;%FTP_CMD_FILE%
	ECHO.verbose&gt;&gt;%FTP_CMD_FILE%
	ECHO.binary&gt;&gt;%FTP_CMD_FILE%
	ECHO.cd %1&gt;&gt;%FTP_CMD_FILE%
	ECHO.lcd %2&gt;&gt;%FTP_CMD_FILE%
	ECHO.get %3&gt;&gt;%FTP_CMD_FILE%
	ECHO.quit&gt;&gt;%FTP_CMD_FILE%
    
	FTP.EXE -s:&quot;%FTP_CMD_FILE%&quot;
)
EXIT /B 0
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[UNDYING]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27822</uri>
			</author>
			<updated>2018-05-31T23:18:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=125695#p125695</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CMD/BAT: Циклическая передача нескольких команд.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=125516#p125516" />
			<content type="html"><![CDATA[<p>Здравствуйте!<br />Нужна помощь!</p><p>У меня вопрос:</p><p>Есть у меня bat файл, который коннектится на FTP сервер</p><p><strong>@Echo off<br />ftp -s:ftp_command.txt -i 93.189.41.9<br />pause</strong></p><br /><p>Задача следующая:</p><p>Хочу после коннекта на ftp сервер, постоянно отправлять команду GET FileName.ini D:\FileName.ini</p><p>и до тех пор, пока файл не будет найден и загружен с Ftp сервера, выполнять эту команду, что написана выше, постоянно.</p><p>При нахождение файла и загрузки её на соответствующий путь - удалять из сервера командой Delete FileName.ini</p><p>И снова начинать циклический поиск GET FileName.ini D:\FileName.ini</p><p>P.S</p><p>Если нет варианта на проверки удачной загрузки, то просто цикличный ввод по списку:</p><p>GET FileName.ini D:\FileName.ini<br />Delete FileName.ini</p><p>Как создать цикл ввод этих команд?</p>]]></content>
			<author>
				<name><![CDATA[baplo]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38886</uri>
			</author>
			<updated>2018-05-21T15:07:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=125516#p125516</id>
		</entry>
</feed>
