Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование в папку исходя из вложенных файлов

Ответить
Настройки темы
CMD/BAT - [решено] Копирование в папку исходя из вложенных файлов

Старожил


Сообщения: 186
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день. Есть файлы для отправки BV100_ZNOXXXXXXXX_XXXXXXXXXXXX_NNNNNN.txt , где X - постоянные не меняющиеся числа, а N - меняется. Данные файлы хранятся в папках вида YYYY-MM-DD. На эти файлы приходят ответные файлы вида
KWTFCB_BV100_ZNOXXXXXXXX_XXXXXXXXXXXX_NNNNNN.txt Дата в наименовании папки не текущая.

Нужно чтобы ответный файл кидался в папку, где лежит файл для отправки. Подскажите как это можно реализовать.

Отправлено: 11:07, 20-08-2012

 

Ветеран


Contributor


Сообщения: 2727
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Цитата:
На эти файлы приходят ответные файлы вида
- Изначально в какую папку (папки?) - в какую-то одну? Или тоже по датам? Или файлы приходят в те же папки, что и отправленные но не в нужную дату?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 21-08-2012 в 19:53.


Отправлено: 19:48, 21-08-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Старожил


Сообщения: 186
Благодарности: 0

Профиль | Отправить PM | Цитировать


BV100_ZNOXXXXXXXX_XXXXXXXXXXXX_NNNNNN.txt лежит в папке YYYY-MM-DD

KWTFCB_BV100_ZNOXXXXXXXX_XXXXXXXXXXXX_NNNNNN.txt приходит в папку temp, и его нужно переместить в YYYY-MM-DD

YYYY-MM-DD не текущая дата

Отправлено: 09:08, 22-08-2012 | #3


Ветеран


Contributor


Сообщения: 2727
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

Set In=E:\Delete\TMP
Set Out=E:\Delete\Out

Set PIn=KWTFCB_
Set POut=BV100_ZNO

FOR /F "usebackq delims=" %%i IN (`Dir "%In%\%PIn%%POut%*.txt" /b /A:-D`) DO (
	Set x=%%i
	Set x=!x:%PIn%=!
        FOR /F "usebackq delims=" %%j IN (`Dir "%Out%\!x!" /b /s /A:-D`) DO Move "%In%\%%i" "%%~dpj"
)
Проследите, чтобы при определении путей и префиксов в батнике в конце строки не было пробелов
В соответствии с постановкой задачи в папке E:\Delete\Out хранятся подпапки с датами, в которых имеются отправленные файлы (я предполагаю, что иных папок там нет, иначе батник будет дольше работать), а в папку E:\Delete\TMP приходят ответные файлы. Желательно, чтобы Tmp не была внутри Out

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-08-2012 в 11:58.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:48, 22-08-2012 | #4


Старожил


Сообщения: 186
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, если возможно, поясните пожалуйста строчки

Код: Выделить весь код
Set x=%%i
	Set x=!x:%PIn%=!
        FOR /F "usebackq delims=" %%j IN (`Dir "%Out%\!x!" /b /s /A:-D`) DO Move "%In%\%%i" "%%~dpj"
)
особо интересуют
Set x=!x:%PIn%=!
!x!
~dpj

и что означают восклицательные знаки ?

Отправлено: 15:07, 22-08-2012 | #5


Ветеран


Contributor


Сообщения: 2727
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Как это работает.
Dir "%In%\%PIn%%POut%*.txt - выдаёт список файлов по указанной маске в инбоксе. В конкретном случае здесь
E:\Delete\TMP\KWTFCB_BV100_ZNO*.txt
(смотрите подсказку по команде Dir /? )
Для того, чтобы направить результаты вывода команды Dir в переменную %%i использую For (смотрите подсказку по команде For /? )
Переменной x присваиваю имя файла, выданное командой Dir из инбокса. Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования. Режим включается командой
setlocal enabledelayedexpansion (Почитайте здесь)
Ушедшие из аутбокса файлы отличаются по имени от пришедших только отсутствием префикса (у Вас это KWTFCB_)
Командой Set x=!x:%PIn%=! я в имени пришедшего файла удаляю этот префикс (точнее, заменяю строку префикса на пустую строку (смотрите подсказку по команде Set /? ), этим самым я получаю имя ушедшего файла.
Далее командой Dir в аутбоксе E:\Delete\Out во всех поддиректориях ( /s ) ищу полное имя отправленного файла ( /b ), причём при поиске имена директорий не рассматриваю ( /A:-D - по видимому, здесь это лишнее).
Если файл найден, перемещаю (Move) пришедший файл в папку с отправленным (%%~dpj из полного имени отправленного файла %%j выделяет диск и путь)(смотрите подсказку по команде For /? )

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-08-2012 в 19:01.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:53, 22-08-2012 | #6


Старожил


Сообщения: 186
Благодарности: 0

Профиль | Отправить PM | Цитировать


Огромное Спасибо за разъяснения!!!

Отправлено: 09:10, 23-08-2012 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование в папку исходя из вложенных файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2007 - Ошибка "OLE" при открытии вложенных файлов. kulthu Microsoft Office (Word, Excel, Outlook и т.д.) 5 21-09-2011 07:03
CMD/BAT - [решено] архив-копирование файлов в папку-запуск исполняемого. cher Скриптовые языки администрирования Windows 11 12-06-2011 11:42
CMD/BAT - [решено] Копирование с флешки в папку на компьютере файлов с текущей датой bazik83 Скриптовые языки администрирования Windows 6 19-05-2010 10:17
[решено] SVN, как добавить папку в svn-репозиторий без вложенных в папку файлов? pingUIN Хочу все знать 1 03-11-2009 17:16
CMD/BAT - +VBS: копирование файлов с сервера в папку установки проги la_vanille_ciel Скриптовые языки администрирования Windows 27 09-04-2008 11:53




 
Переход