Войти

Показать полную графическую версию : [решено] Обработка нескольких файлов


laipisas02
10-03-2010, 15:32
Добрый день.
Есть SFTP сервер , на который постоянно поступают XML файлы в виде (Request20100310-01.xml)
Есть батник который переименовывает этот XML файл в Request.xml (это имя не меняется) , копирует и отправляет этот файл дальше, после чего файл удаляется.
Загвоздка в том что , поступающих XML файлов может быть сколько угодно (Request20100310-01, 02, 03.xml)
Как сделать так чтобы каждый файл обрабатывался отдельно, то есть сначала один переименовался, скопировался, отправлялся, удалялся , потом другой. И так до тех пор пока все файлы не будут отработаны.
Заранее спасибо.

Legat
10-03-2010, 17:33
что то типа
for %%T IN (Request20100310-*.xml) do (что то делаем)
попробуй для начала их копировать просто. Да, скобки после DO разноси на разные строки если команд много будет.
есть смысл еще тут поискать ://forum.ru-board.com/topic.cgi?forum=62&topic=10650&glp

laipisas02
11-03-2010, 13:19
Похоже на правду. С копированием проходит, но как только доходит до строчки move, то получаю ошибку : A duplicate file name exists, or the file cannot be found.
Такое чувство что цикл не отрабатывает.
Подскажите где поправить.

Вот кусок кода.

FOR %%T IN (%XML_PREFIX%*.xml) do (
copy %sftp_home%\*.xml %sgw_backup%
copy %sgw_backup%\*.xml "D:\- BACKUP\SGW\incoming"
d:
cd %sftp_home%
ren %XML_PREFIX%*.xml %XML_PREFIX%.xml
move %sftp_home%\%XML_PREFIX%.xml %sgw_home%\sending
del %sgw_home%\sending\%XML_PREFIX%.xml
)

amel27
11-03-2010, 16:57
Подскажите где поправить »без каких-нибудь реальных значений переменных/файлов сложно делать выводы, нужен минимальный тестовый скрипт/набор имен файлов, воспроизводящих ошибку

laipisas02
11-03-2010, 19:09
Вот собственно сам скрипт

@echo off

set sftp_home="D:\- BACKUP\SFTP"
set sgw_home="D:\- Applications\sgw"
set sgw_backup="D:\- BACKUP\SGW"
set XML_PREFIX=ping
IF EXIST %sftp_home%\*.xml GOTO moving
IF NOT EXIST %sftp_home%\*.xml GOTO exit

:moving
FOR %%a IN (%XML_PREFIX%*.xml) do (
copy %sftp_home%\*.xml %sgw_backup%
copy %sgw_backup%\*.xml "D:\- BACKUP\SGW\incoming"
d:
cd %sftp_home%
ren %XML_PREFIX%*.xml %XML_PREFIX%.xml
move %sftp_home%\%XML_PREFIX%.xml %sgw_home%\sending
cd %sgw_home%
call send.bat (за отправку файла отвечает этот батник)
del %sgw_home%\sending\%XML_PREFIX%.xml
)
:exit
exit

amel27
12-03-2010, 05:30
получаю ошибку : A duplicate file name exists, or the file cannot be found. »
нельзя переименовать много файлов (по маске) в один, команда:
ren ping*.xml ping.xml

laipisas02
12-03-2010, 10:29
нельзя переименовать много файлов (по маске) в один, команда: »

а как можно? надо чтобы каждый файл по порядку проходил цикл.

El Sanchez
12-03-2010, 21:23
laipisas02, цикл используете, а переменную цикла нет. :no:
В общем, пробуйте


@echo off

set "sftp_home=D:\- BACKUP\SFTP"
set "sgw_home=D:\- Applications\sgw"
set "sgw_backup=D:\- BACKUP\SGW"
set XML_PREFIX=ping

if not exist "%sftp_home%\*.xml" exit /b 0

for %%a in ("%sftp_home%\%XML_PREFIX%*.xml") do (
copy /y "%%a" "%sgw_backup%" 1>nul 2>&1
copy /y "%%a" "%sgw_backup%\incoming" 1>nul 2>&1
move /y "%%a" "%sgw_home%\sending\%XML_PREFIX%.xml" 1>nul 2>&1
call "%sgw_home%\send.bat"
)
del /f /q "%sgw_home%\sending\%XML_PREFIX%.xml"

laipisas02
15-03-2010, 15:43
El Sanchez, спасибо. То что надо. Единственное я не понял значения 1>nul 2>&1, с этими значениями скрипт не работал.




© OSzone.net 2001-2012