Добрый день! Помогите пожалуйста с написанием скрипта.
Суть такая, человек выгружает на локальный диск текстовые файлики с данными, далее они должны быть переименованы и перемещены на сетевой диск.
На данный момент процесс выглядит так:
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 мин.
Знаю, что возможно тут всё криво, но эта простая схема работала, до текущего момента.
Сейчас же нужно сделать так, что бы файлы переименовывались не датой создания а в соответствии с датой выгрузки указанной в самом файле.
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 в папках которые туда попадают должны получить имя по маске по маске #rДДММГГ (#r нужно для программы в которую позже будут загружать файлы) должно получится (#r221018).
Далее отправлены в свои соответствующие папки на сетевой диск.
Несколько файлов одним днём не выгружаются, так что файлов с одним именем быть не может.
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) это важно.
@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).
@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).