Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - Скрипт, читающий некоторые символа в первой строке нескольких файлов.

Новый участник


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

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


Доброго дня!
Есть дурацкая задача - в каталог (мусорка, разных файлов много) падают определенные файлы (по имени) определенной структуры.
Задача- в шедулере поставить батник, который при наличии таких файлов (от 0 до 30 в определенный момент времени) считывал первую строку, из нее вычленял несколько символов из нескольких позиций и в зависимости от значений делал какие-либо манипуляции с файлом (в основном - копирование с посылом сообщения).
Проблемы - файла начинаются с ~, внутри файла - разделитель |
(пример первой строки файлов
1|20210727|131511|YSN20802.742|898|898|0
1|20210727|115807|YSB20847.742|35|35|0
1|20210727|115801|YTI20825.742|5140|5140|0)
Нужно вытащить с 3 символа 18-й позиции и 2 символа с 24-й
Столкнулся с чем:
1. Если работать напрямую с файлом, то вроде норм
set /p val=<~yh2080f.742
set val1=%val:~18,3%
set val2=%val:~24,2%
echo %val1%
echo %val2%
pause

результат:
D:\cmail>echo YSN
YSN
D:\cmail>echo 02
02
D:\cmail>pause
Для продолжения нажмите любую клавишу . . .

2. если работать с циклом, то начинается приколизм
@echo off
rem Setlocal Enabledelayedexpansion Enableextensions
if not exist D:\111\?Y*.* goto end

rem echo.%%i
for %%i in ("D:\111\?Y*.*") do (
set val=
set val1=
set val2=
echo.begin
echo.%%i
set /p val=<%%i
rem set val=%val:|=1%
set val
set val1=%val:~18,3%
set val2=%val:~24,2%
echo %val1%
echo %val2%
echo .end
)
:end
echo .bye

результат
D:\111\~YH2080A.742
val=1|20210727|115712|YSB20853.742|32|31|1
Режим вывода команд на экран (ECHO) отключен.
Режим вывода команд на экран (ECHO) отключен.
.end

Думал, что проблема в разделителе в файле - разремил замещение разделителя на 1
получилось вообще непонятно
begin
D:\111\~YH2080A.742
"1" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

прошу помощи.

Отправлено: 15:43, 13-08-2021

 

Ветеран


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

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


1.
пример файла в архиве чтобы видеть его структуру, кодировку и расширение
2.
Цитата Alexeyshka:
Нужно вытащить »
куда? В отдельный файл или что делать с этим.
3.
четко не понятно что делать в цикле, кроме как вычленять что-то из файлов, а какие файлы выбирать, откуда, по какой маске или какому критерию и в какой промежуток времени, если это будет из планировщика. Или это сами сделаете?
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:42, 13-08-2021 | #2



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

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


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\~???????.???"
	For %%f In ("%FileIn%") Do Call :OutFirst "%%f" 18 3 24 2
Pause
Exit /B 0

:OutFirst
	Set /P First=<%1
	Call Set "First1=%%First:~%2,%3%%"
	Call Set "First2=%%First:~%4,%5%%"
	Echo %First1% %First2%   %1
Exit /B
Alexeyshka,
Ваш вариант
Код: Выделить весь код
@Echo Off
cls
	For %%i In ("Z:\Box_In\~y??????.???") Do (
		Set /P val=<"%%i"
		Call Set "val1=%%val:~18,3%%"
		Call Set "val2=%%val:~24,2%%"
		Call Echo %%val1%% %%val2%%   %%i
	)
Pause
Exit /B 0
или так:
Код: Выделить весь код
@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion
	For %%i In ("Z:\Box_In\~y??????.???") Do (
		Set /P val=<"%%i"
		Set "val1=!val:~18,3!"
		Set "val2=!val:~24,2!"
		Echo !val1! !val2!   %%i
	)
Pause
Exit /B 0
Если хочется увидеть на экране первую строку, то в Echo её надо взять в кавычки, так как символ "|" служебный
Код: Выделить весь код
		Call Echo %%val1%% %%val2%%   %%i   "%%val%%"
или так:
Код: Выделить весь код
@Echo Off
cls
	For %%i In ("Z:\Box_In\~y??????.???") Do Set /P val=<"%%i" &Call :OutFirst %%val:~18,3%% %%val:~24,2%% %%i
Pause
Exit /B 0

:OutFirst
	Echo %1 %2  %3
Exit /B

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


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

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

Отправлено: 16:42, 13-08-2021 | #3



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удаление последнего символа в каждой строке txt - файла Мария_Айдарова@vk Скриптовые языки администрирования Windows 14 01-08-2019 18:23
PowerShell - [решено] скрипт, читающий из текстового файла список расширений IVa_ Скриптовые языки администрирования Windows 1 10-12-2014 19:01
CMD/BAT - [решено] Как в строке оставить лишь 2 символа, не зная её размера white155 Скриптовые языки администрирования Windows 4 09-07-2011 21:43
[решено] Замена символа в строке, по номеру [PERL] WestBronx Вебмастеру 1 22-03-2008 14:31
Номер символа в строке Nealles Программирование и базы данных 3 22-05-2003 00:41




 
Переход