[CMD] Переименовать файл по данным внутри него

local J

Новый пользователь
Сообщения
9
Реакции
1
Добрый день! Помогите пожалуйста с написанием скрипта.

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

На данный момент процесс выглядит так:
CMD/BATCH:
::Рога и Копыта
for /F "delims=. tokens=1-3" %%a in ('echo %date:.=%') do rename *.txt "#r%%c%%b%%a.txt"
move /y "C:\файл\Рога и Копыта\*.txt" "\\192.168.1.1\Рога и Копыта\файл"
::Рога и Копыта 2
for /F "delims=. tokens=1-3" %%a in ('echo %date:.=%') do rename *.txt "#r%%c%%b%%a.txt"
move /y "C:\файл\Рога и Копыта2\*.txt" "\\192.168.1.1\Рога и Копыта2\файл"
::Рога и Копыта 3
for /F "delims=. tokens=1-3" %%a in ('echo %date:.=%') do rename *.txt "#r%%c%%b%%a.txt"
move /y "C:\файл\Рога и Копыта3\*.txt" "\\192.168.1.1\Рога и Копыта3\файл"
и тд

Данный bat стоит в планировщике задач и выполняется с интервалом в 10 мин.

Знаю, что возможно тут всё криво, но эта простая схема работала, до текущего момента.

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

Вот так выглядит нужный кусок:

ДатаНачала=19.10.2018
ДатаКонца=19.10.2018
 
Последнее редактирование модератором:
Здравствуйте, @local О!
Добро пожаловать на SafeZone.

Прикрепите пример файла txt с этим кусочком:

ДатаНачала=19.10.2018
ДатаКонца=19.10.2018

в той же кодировке, в которой он выгружается.

Решение будет выглядеть примерно так:

CMD/BATCH:
for /f "UseBackQ tokens=1,2 delims==" %%a in ("имя файла") do if "%%a"=="ДатаНачала" set "d=%%b"
for /F "delims=. tokens=1-3" %%a in ("%d%") do rename *.txt "#r%%c%%b%%a.txt"

Батник нужно будет сохранить в соответствующей кодировке.
"имя файла" - подставите нужное. Только не совсем понятно rename *.txt "#r ... - это что? переименование первого попавшегося файла? А с остальными в этой папке что?
 
Прикрепите пример файла txt с этим кусочком:

Прикрепил. Только часть строк с ненужной для Вас информацией переименовал, в плане структуры файл оригинальный.

Только не совсем понятно rename *.txt "#r ... - это что? переименование первого попавшегося файла? А с остальными в этой папке что?

rename *.txt "#r .. Это переименование.

Все *.txt в папках которые туда попадают должны получить имя по маске по маске #rДДММГГ (#r нужно для программы в которую позже будут загружать файлы) должно получится (#r221018).
Далее отправлены в свои соответствующие папки на сетевой диск.
Несколько файлов одним днём не выгружаются, так что файлов с одним именем быть не может.
 

Вложения

  • #r221018.txt
    6 KB · Просмотры: 2
Последнее редактирование:
for /f "UseBackQ tokens=1,2 delims==" %%a in ("имя файла") do if "%%a"=="ДатаНачала" set "d=%%b" for /F "delims=. tokens=1-3" %%a in ("%d%") do rename *.txt "#r%%c%%b%%a.txt"

Этот скрипт конечно работает, но не совсем так как нужно.

1. В скрипте нужно указывать имя файла, какая же это автоматизация)) Хотелось бы абстрагироваться от имени файла, т.к. я не знаю как его может обозвать пользователь. Попробовал просто вместо имени прописать *.txt, не помогло))
2. В скрипте файл переименовывается по маске #rГГММДД (#r20180927), а нужно #rДДММГГ (#r271018) это важно.
 
Последнее редактирование:
CMD/BATCH:
@echo off
SetLocal EnableExtensions
for %%n in (*.txt) do for /f "UseBackQ tokens=1,2 delims==" %%a in ("%%n") do if "%%a"=="ДатаНачала" set "d=%%b"
for /F "delims=. tokens=1-3" %%a in ("%d%") do call :renX *.txt %%a %%b %%c
goto :eof

:renX [orig] [dd] [mm] [yyyy]
set dd=%~2
set mm=%~3
set yy=%~4
set yy=%yy:~2%
ren "%~1" "#r%dd%%mm%%yy%.txt"
exit /b

Сохранить в обычной кодировке блокнота (Win-1251).
 
CMD/BATCH:
@echo off
SetLocal EnableExtensions
for %%n in (*.txt) do for /f "UseBackQ tokens=1,2 delims==" %%a in ("%%n") do if "%%a"=="ДатаНачала" set "d=%%b"
for /F "delims=. tokens=1-3" %%a in ("%d%") do call :renX *.txt %%a %%b %%c
goto :eof

:renX [orig] [dd] [mm] [yyyy]
set dd=%~2
set mm=%~3
set yy=%~4
set yy=%yy:~2%
ren "%~1" "#r%dd%%mm%%yy%.txt"
exit /b

Сохранить в обычной кодировке блокнота (Win-1251).

Спасибо большое, Вы гений) Работает как нужно, теперь буду разбираться как работает сам скрипт и займусь переносом файлов. Ещё раз спасибо!
 
Последнее редактирование:
Назад
Сверху Снизу