laipisas02 |
10-03-2010 15:32 1365284 |
Обработка нескольких файлов
Добрый день.
Есть SFTP сервер , на который постоянно поступают XML файлы в виде (Request20100310-01.xml)
Есть батник который переименовывает этот XML файл в Request.xml (это имя не меняется) , копирует и отправляет этот файл дальше, после чего файл удаляется.
Загвоздка в том что , поступающих XML файлов может быть сколько угодно (Request20100310-01, 02, 03.xml)
Как сделать так чтобы каждый файл обрабатывался отдельно, то есть сначала один переименовался, скопировался, отправлялся, удалялся , потом другой. И так до тех пор пока все файлы не будут отработаны.
Заранее спасибо.
|
что то типа
for %%T IN (Request20100310-*.xml) do (что то делаем)
попробуй для начала их копировать просто. Да, скобки после DO разноси на разные строки если команд много будет.
есть смысл еще тут поискать ://forum.ru-board.com/topic.cgi?forum=62&topic=10650&glp
|
laipisas02 |
11-03-2010 13:19 1366133 |
Похоже на правду. С копированием проходит, но как только доходит до строчки 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
)
|
Цитата:
Цитата laipisas02
Подскажите где поправить »
|
без каких-нибудь реальных значений переменных/файлов сложно делать выводы, нужен минимальный тестовый скрипт/набор имен файлов, воспроизводящих ошибку
|
laipisas02 |
11-03-2010 19:09 1366402 |
Вот собственно сам скрипт
Код:
@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
|
Цитата:
Цитата laipisas02
получаю ошибку : A duplicate file name exists, or the file cannot be found. »
|
нельзя переименовать много файлов (по маске) в один, команда:
Код:
ren ping*.xml ping.xml
|
laipisas02 |
12-03-2010 10:29 1366769 |
Цитата:
Цитата amel27
нельзя переименовать много файлов (по маске) в один, команда: »
|
а как можно? надо чтобы каждый файл по порядку проходил цикл.
|
El Sanchez |
12-03-2010 21:23 1367316 |
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 1369205 |
El Sanchez, спасибо. То что надо. Единственное я не понял значения 1>nul 2>&1, с этими значениями скрипт не работал.
|
Время: 17:18.
© OSzone.net 2001-