Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] копирование указанного количества случайных блоков текста из текстового файла

Ветеран


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

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


Здравствуйте. Подскажите возможно ли из txt файла, в котором куча блоков текста разделенные через символ //================== скопировать указанное количество случайных блоков в другой txt файл, а также после каждого блока добавить тот же символ //==================
Т.е. к примеру у меня txt файл:

//==================
блок1
//==================
блок2
//==================
блок3
//==================
блок4
//==================
........................
//==================
блок5000
//==================

Я указал 5 случайных блоков. После применения кода должен получиться такой txt:

блок453
//==================
блок3126
//==================
блок784
//==================
блок5
//==================
блок2451
//==================

в блоках бывает такое, что пропускается 1 строка, т.е. присутствуют пустые строки, к примеру блок 2 с текстом:

я гулял в лесу

мне было хорошо

Отправлено: 12:57, 26-08-2014

 

Ветеран


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

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


Здравствуйте, Alexander_88.




Код: Выделить весь код
@echo off
chcp 1251>nul

set quantity=5
set "source=example.txt"
set "border=//=================="

for %%i in ("%source%") do (
 set new=%%~dpni_new%%~xi
 call copy nul %%new%%>nul
 )
set temp_file="%temp%\%random%.vbs"
for /f %%i in ('
 findstr /rx "%border:/=\/%" "%source%"^| find /c /v ""
') do (
 for /f %%j in ('
  set /a %%i-1
 ') do (
  if %%j lss %quantity% (
   call:# %%j
   ) else (
   call:# %quantity%
   )
  )
 )
del %temp_file%

exit /b



:#


 for /l %%i in (1 1 %1) do (
  call set $%%random%%= %%i
  )
 for /f "tokens=* delims=$0123456789=" %%i in ('
  set $^| findstr /v "^0"
 ') do (
  echo WScript.StdOut.Write^(Split^(WScript.CreateObject^("Scripting.FileSystemObject"^).OpenTextFile^("%source%"^).ReadAll^(^),"%border%"^&vbCrLf^)^(%%i^)^)>%temp_file%
  (
  cscript //nologo %temp_file%
  set /p="%border%"<nul
  echo.
  )>>"%new%"
 )

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

Отправлено: 15:28, 26-08-2014 | #2



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

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


Ветеран


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

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


Georgio, спасибо, а нельзя сделать, чтобы он размах выбирал побольше? пока он берет только блоки изпервой десятки, а их там 700, и еще если ставить quantity 1 , он всегда выбирает 1ый блок

Отправлено: 16:08, 26-08-2014 | #3


Ветеран


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

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


Цитата Alexander_88:
а нельзя сделать, чтобы он размах выбирал побольше? »



Код: Выделить весь код
@echo off
chcp 1251>nul

set quantity=5
set "source=example.txt"
set "border=//=================="

for %%i in ("%source%") do (
 set new=%%~dpni_new%%~xi
 call copy nul "%%new%%">nul
 )
set temp_file="%temp%\%random%.vbs"
for /f %%i in ('
 more^<"%source%"^|findstr /x "%border:/=\/%"^| find /c /v ""
') do (
 for /f %%j in ('
  set /a %%i-1
 ') do (
  if %%j lss %quantity% (
   call:# %%j %%j
   ) else (
   call:# %%j %quantity%
   )
  )
 )
del %temp_file%

exit /b



:#


 for /l %%i in (1 1 %1) do (
  call set $%%random%%= %%i
  )
 for /f "tokens=2 delims==" %%i in ('
  set $
 ') do (
  set /a count+=1
  for /f %%j in ('
   set /a count
  ') do (
   if %%j leq %2 (
    echo WScript.StdOut.Write^(Split^(WScript.CreateObject^("Scripting.FileSystemObject"^).OpenTextFile^("%source%"^).ReadAll^(^),"%border%"^&vbCrLf^)^(%%i^)^)>%temp_file%
    (
    cscript //nologo %temp_file%| findstr /vx "%border:/=\/%"
    set /p="%border%"<nul
    echo.
    )>>"%new%"
    ) else (
    exit /b
    )
   )
  )

 exit /b

Последний раз редактировалось Georgio, 26-08-2014 в 21:06. Причина: уточнение и сокращение кода.

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

Отправлено: 16:16, 26-08-2014 | #4


Ветеран


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

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


Georgio Супер, спасибо вам за помощь

Отправлено: 16:28, 26-08-2014 | #5


Ветеран


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

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


Alexander_88, Вам с такими запросами давно пора переходить на WSH/PoSH .

Отправлено: 17:39, 26-08-2014 | #6


Ветеран


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

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


Если бы я понимал о чем вы говорите , это наверно языки программирования)

Отправлено: 18:18, 26-08-2014 | #7


Ветеран


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

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


Цитата Alexander_88:
это наверно языки программирования) »
Ага.

Отправлено: 18:36, 26-08-2014 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование в переменную значения из текстового файла idlazarev_alex@vk Скриптовые языки администрирования Windows 1 05-04-2014 22:11
CMD/BAT - [решено] Создание текстового файла с последовательными числами указанного диапазона 91892823 Скриптовые языки администрирования Windows 2 03-08-2012 06:43
CMD/BAT - [решено] Выборочное копирование из текстового файла. odin1 Скриптовые языки администрирования Windows 5 09-03-2012 22:00
CMD/BAT - Поиск и копирование нескольких строк из текстового файла. valen Скриптовые языки администрирования Windows 0 07-11-2011 17:27
VBS/WSH/JS - [решено] Поиск и копирование текста из файла KaKTuZ49 Скриптовые языки администрирования Windows 2 03-11-2011 13:38




 
Переход