Alexeyshka
13-08-2021, 15:43
Доброго дня!
Есть дурацкая задача - в каталог (мусорка, разных файлов много) падают определенные файлы (по имени) определенной структуры.
Задача- в шедулере поставить батник, который при наличии таких файлов (от 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" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
прошу помощи.
Есть дурацкая задача - в каталог (мусорка, разных файлов много) падают определенные файлы (по имени) определенной структуры.
Задача- в шедулере поставить батник, который при наличии таких файлов (от 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" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
прошу помощи.