![]() |
переименовать файл по данным внутри него
Добрый день! Помогите пожалуйста с написанием скрипта.
Суть такая, человек выгружает на локальный диск текстовые файлики с данными, далее они должны быть переименованы и перемещены на сетевой диск. На данный момент процесс выглядит так: Код:
::Рога и Копыта Данный bat стоит в планировщике задач и выполняется с интервалом в 10 мин. Знаю, что возможно тут всё криво, но эта простая схема работала, до текущего момента. Сейчас же нужно сделать так, что бы файлы переименовывались не датой создания а в соответствии с датой выгрузки указанной в самом файле. Вот так выглядит нужный кусок: ДатаНачала=19.10.2018 ДатаКонца=19.10.2018 |
Цитата:
2. Какое имя должны получить файлы - оно всегда одинаково, если несколько файлов выгружаются в одном дне? Более свежий файл переписывает более старый? Приведите пример конечного имени Хотелось бы увидеть сам файл - прикрепите его к сообщению. Интимные подробности можете забить незначащими символами |
Цитата:
|
Вложений: 1
Цитата:
ДатаКонца=19.10.2018 Это и есть дата "выгрузки" просто сам файл может быть например создан позже, поэтому по дате создания самого файла скрипт не годится. Цитата:
Несколько файлов одним днём не выгружаются, так что файлов с одним именем быть не может. Цитата:
Цитата:
Файл 154661 |
Deminart,
Сохраните код в 1251 ("Windows") кодировке
Код:
@Echo off И еще, дату я беру в строке с "ДатаКонца". В примере таких строк у Вас две. |
Цитата:
Скрипт выполняется, без ошибок, но в то же время как будто ничего не делает. Скрытый текст
C:\test>Chcp 1251 1>nul
C:\test>Set "FindData=ДатаКонца" C:\test>Set "Pref=#r" C:\test>Call :ReMove "C:\test\1\#r??????.txt" "\\192.168.1.88\share\1\" C:\test>FOR %f IN ("C:\test\1\#r??????.txt") DO Call :DFind "%f" "ДатаКонца" "\\192.168.1.88\share\1\" "#r" C:\test>GoTo :Eof C:\test>Call :ReMove "C:\test\2\#r??????.txt" "\\192.168.1.88\share\2\" C:\test>FOR %f IN ("C:\test\2\#r??????.txt") DO Call :DFind "%f" "ДатаКонца" "\\192.168.1.88\share\2\" "#r" C:\test>GoTo :Eof C:\test>Call :ReMove "C:\test\3\#r??????.txt" "\\192.168.1.88\share\3\" C:\test>FOR %f IN ("C:\test\3\#r??????.txt") DO Call :DFind "%f" "ДатаКонца" "\\192.168.1.88\share\3\" "#r" C:\test>GoTo :Eof C:\test>Call :ReMove "C:\test\#r??????.txt" "\\192.168.1.88\share\4" C:\test>FOR %f IN ("C:\test\#r??????.txt") DO Call :DFind "%f" "ДатаКонца" "\\192.168.1.88\share\4" "#r" C:\test>GoTo :Eof C:\test>GoTo :Eof |
На WSH:
Скрытый текст
Код:
Option Explicit Примерный пакетный файл для обработки на основе Вашего пакетного файла: Скрытый текст
Код:
@echo off Имейте в виду: если в каталоге назначения будет находиться одноимённый файл — переместить туда исходный файл, дав ему то же самое имя, будет невозможно, и произойдёт ошибка. Подумайте, что делать с этим. P.S. Я бы сделал проще — залез внутрь обработки выгрузки из 1C и сделал бы всё зараз там. |
Вложений: 1
Цитата:
Цитата:
Цитата:
Скрытый текст
C:\test>C:\test\test1.bat
Том в устройстве C не имеет метки. Серийный номер тома: 9AD6-96C6 Содержимое папки C:\test\1 Файл не найден Содержимое папки C:\test Содержимое папки C:\test Файл не найден Содержимое папки C:\test\1 Файл не найден Том в устройстве \\192.168.1.68\share имеет метку local Серийный номер тома: 62C8-A2BB Содержимое папки \\192.168.1.68\share\1 22.10.2018 14:21 <DIR> . 22.10.2018 14:21 <DIR> .. 0 файлов 0 байт 2 папок 28*139*134*976 байт свободно Том в устройстве C не имеет метки. Серийный номер тома: 9AD6-96C6 Содержимое папки C:\test\1 Файл не найден Содержимое папки C:\test Содержимое папки C:\test Файл не найден Содержимое папки C:\test\2 Файл не найден Том в устройстве \\192.168.1.68\share имеет метку local Серийный номер тома: 62C8-A2BB Содержимое папки \\192.168.1.68\share\2 22.10.2018 14:17 <DIR> . 22.10.2018 14:17 <DIR> .. 0 файлов 0 байт 2 папок 28*139*134*976 байт свободно Том в устройстве C не имеет метки. Серийный номер тома: 9AD6-96C6 Содержимое папки C:\test\1 Файл не найден Содержимое папки C:\test Содержимое папки C:\test Файл не найден Содержимое папки C:\test\3 Файл не найден Том в устройстве \\192.168.1.68\share имеет метку local Серийный номер тома: 62C8-A2BB Содержимое папки \\192.168.1.68\share\3 22.10.2018 14:17 <DIR> . 22.10.2018 14:17 <DIR> .. 0 файлов 0 байт 2 папок 28*139*134*976 байт свободно Том в устройстве C не имеет метки. Серийный номер тома: 9AD6-96C6 Содержимое папки C:\test\1 Файл не найден Содержимое папки C:\test Содержимое папки C:\test Содержимое папки C:\test 19.10.2018 14:40 6*966 #r270918.txt 1 файлов 6*966 байт 0 папок 19*197*730*816 байт свободно Том в устройстве \\192.168.1.68\share имеет метку local Серийный номер тома: 62C8-A2BB Содержимое папки \\192.168.1.68\share\4 22.10.2018 14:52 <DIR> . 22.10.2018 14:52 <DIR> .. 0 файлов 0 байт 2 папок 28*139*134*976 байт свободно C:\test>dir "C:\test\1\#r??????.txt" Файлик прикрепил: Файл 154676 Цитата:
Или Вы имели в виду что бы 1С-ка сразу всё забирала с локального диска?...Кроме 1С есть ещё одна программы для загрузки этих файлов, в общем не вариант... |
В общем пока отвечал, уже помогли на другом известном форуме. В целом решение рабочее и для моих нужд подходит.
Код:
@echo off @echo off думаю добавить cd C:\test\1 далее сам скрипт после ren "%~1" "#r%dd%%mm%%yy%.txt" добавить непосредственно перенос move /y "C:\test\1\*.txt" "\\192.168.1.68\share\1" ну и так далее для всех папок с файлами... ... cd C:\test\2 ... move /y "C:\test\2\*.txt" "\\192.168.1.68\share\2" ... |
Deminart,
У Вас нет файлов по указанной маске. Возможно, Ваши исходные txt-файлы имеют другую маску. Попробуйте
Код:
@Echo off |
Цитата:
Большое спасибо за помощь! megaloman, Iska |
Цитата:
|
Время: 23:12. |
Время: 23:12.
© OSzone.net 2001-