![]() |
Копирование в папку исходя из вложенных файлов
Добрый день. Есть файлы для отправки BV100_ZNOXXXXXXXX_XXXXXXXXXXXX_NNNNNN.txt , где X - постоянные не меняющиеся числа, а N - меняется. Данные файлы хранятся в папках вида YYYY-MM-DD. На эти файлы приходят ответные файлы вида
KWTFCB_BV100_ZNOXXXXXXXX_XXXXXXXXXXXX_NNNNNN.txt Дата в наименовании папки не текущая. Нужно чтобы ответный файл кидался в папку, где лежит файл для отправки. Подскажите как это можно реализовать. |
Цитата:
|
BV100_ZNOXXXXXXXX_XXXXXXXXXXXX_NNNNNN.txt лежит в папке YYYY-MM-DD
KWTFCB_BV100_ZNOXXXXXXXX_XXXXXXXXXXXX_NNNNNN.txt приходит в папку temp, и его нужно переместить в YYYY-MM-DD YYYY-MM-DD не текущая дата |
Код:
@Echo Off В соответствии с постановкой задачи в папке E:\Delete\Out хранятся подпапки с датами, в которых имеются отправленные файлы (я предполагаю, что иных папок там нет, иначе батник будет дольше работать), а в папку E:\Delete\TMP приходят ответные файлы. Желательно, чтобы Tmp не была внутри Out |
Спасибо, если возможно, поясните пожалуйста строчки
Код:
Set x=%%i Set x=!x:%PIn%=! !x! ~dpj и что означают восклицательные знаки ? |
Как это работает.
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 /? ) |
Огромное Спасибо за разъяснения!!!
|
Время: 11:17. |
Время: 11:17.
© OSzone.net 2001-2025