Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Последнее значение в строке (http://forum.oszone.net/showthread.php?t=301810)

ncmps 29-06-2015 13:18 2523736

Последнее значение в строке
 
Добрый день! прошу о помощи. Долго искал, но так и не нашёл подходящего решения для задачи.
Есть текстовый файл в который скидываются данные в одну строку в виде:

Код:

---------- TESTLOG.TXT/23.06.2015-username-18:15:18,31-unblocked//23.06.2015-username-20:53:08,33-unblocked//23.06.2015-username-20:53:08,43-unblocked/ /23.06.2015-username-20:53:08,77-unblocked/ /23.06.2015-username-20:53:08,93-unblocked//23.06.2015-username-20:53:15,52-unblocked//23.06.2015-username-20:53:16,83-unblocked//23.06.2015-username-21:04:48,97-unblocked/
Необходимо из этой строки забирать первое и последнее значения между разделителями "/"
С первым значением всё просто:
Код:

for /f "tokens=2 delims=/" %%a in (temp.txt) do echo %%a>>username.txt"
А вот как выдирать последнее значение из строки так и не могу понять. Т.е. в данном примере последним значением должно быть записано:
Код:

23.06.2015-username-21:04:48,97-unblocked
При этом все значения могут меняться и быть разными, за исключением username. Соответственно и кол-во значений до последнего тоже постоянно будет разным.

Foreigner 29-06-2015 13:41 2523753

Код:

@echo off
setlocal

<temp.txt set /p "text="

for %%i in (%text:/=" %) do set "res=%%~i"

echo %res: =%


ncmps 29-06-2015 14:04 2523767

Спасибо. А можно хотя бы краткий комментарий по каждой из строк? )

ncmps 29-06-2015 17:40 2523897

Не работает в общем скрипте :\

Код:

@echo off

set temp=temp.txt

set log=log.txt

set user1=name1

set user2=name2

set user3=name3

set user4=name4

set user5=name5

::user1

for /f "delims=" %%i in ('find "/%date%-%user1%-" %log%') do <nul Set /p $V=%%i>>"%temp%"

for /f "tokens=2 delims=/" %%a in (%temp%) do echo %%a >> %user1%.txt"

setlocal

<temp.txt set /p "text="

for %%i in (%text:/=" %) do set "res=%%~i"

echo %res: =% >> %user1%.txt"

endlocal

if exist "%temp%" del "%temp%" /f /q

::user2

for /f "delims=" %%i in ('find "/%date%-%user2%-" %log%') do <nul Set /p $V=%%i>>"%temp%"

for /f "tokens=2 delims=/" %%a in (%temp%) do echo %%a>>%user2%.txt"

setlocal

<temp.txt set /p "text="

for %%i in (%text:/=" %) do set "res=%%~i"

echo %res: =% >> %user2%.txt"

endlocal

if exist "%temp%" del "%temp%" /f /q

::user3

и т.д.

Что я упускаю? (

Georgio 29-06-2015 19:52 2523954

Цитата:

Цитата ncmps
Не работает в общем скрипте »

.




А Вы уверены, что в лог-файле присутствует текущая дата ("%date%"), которую Вы ищете? Если уверены, то попробуйте такой "общий скрипт":


Код:

@echo off

set "log=log.txt"

set "$user1=name1"
set "$user2=name2"
set "$user3=name3"
set "$user4=name4"
set "$user5=name5"
:: и. т. д.

for /f %%i in ('set $user^| find/c /v ""') do (
 for /l %%j in (1 1 %%i) do (
  for /f "delims=/" %%k in ('^<"%log%" cmd/v/c find "/%date%-!$user%%j!-"') do (
  set/a n+=1
  cmd/v/c echo !n!| >nul findstr/x 1&& cmd/v/c ">"!$user%%j!.txt" echo %%k"|| set x=%%k
  )
  if defined x cmd/v/c ">>"!$user%%j!.txt" echo !x!"
  set x=& set n=
 )
)

exit/b


.

ncmps 30-06-2015 12:06 2524225

Цитата:

Цитата Georgio
А Вы уверены, что в лог-файле присутствует текущая дата ("%date%"), которую Вы ищете? Если уверены, то попробуйте такой "общий скрипт": »

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

Спасибо, буду пытаться разобраться.


Время: 23:45.

Время: 23:45.
© OSzone.net 2001-