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

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

Ответить
Настройки темы
CMD/BAT - [решено] разбить по строкам txt

Старожил


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

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


есть list.txt
как разбить его на list01.txt, list02.txt ... по 50 строк?

т.е. если есть list.txt в котором 400 строк - то разбить его на 8 txt-файлов по 50 строк

Отправлено: 20:40, 29-08-2010

 

Ветеран


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

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


Цитата Alexander_88:
…можно сделать в одном bat файле или надо для каждого имени такой bat создавать? »
Вы раз от разу задаёте похожий вопрос. Ответ такой: код выносится в процедуру («:метка» … «exit /b»|«goto :eof»), которая вызывается потребное число раз с передачей ей параметров.

Отправлено: 06:35, 19-08-2014 | #21



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

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


Ветеран


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

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


Спасибо большое, еще и со звукок

Отправлено: 10:14, 19-08-2014 | #22


Ветеран


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

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


а такой код нельзя заставить работать если txt сохранен в формате unicode text file ?
просто программа по умолчанию сохраняет в формате "unicode text file", приходится каждый раз менять тип на "text file" или как - тоизбавится от этого сохранения в unicode text file, чтобы по умолчанию, сразу предлагалось в text file))

Отправлено: 03:11, 27-08-2014 | #23


Ветеран


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

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


Alexander_88, нижеприведённое "достижение науки" с "UTF-8" справляется. Но даже если этот код не подойдёт для обработки Ваших "юникодных" файлов, то используйте его для обработки других файлов, т. к. результаты его работы корректнее результатов работы предыдущего кода.



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

set string_quantity=50
set index_format=4

:: Set the value of the variable: «+» or nothing.
set final_blank_line=+

:: Enter the names of one or more files.
for %%? in (
"list1.txt"
"list2.txt"
"list3.txt"
 ) do (
 call:sub %%?
 )

del .txt .vbs
exit /b


:sub

 setlocal

 (
 echo.
 echo $$$
 for /f "delims=" %%i in ('
  find /n /v ""^<%1
 ') do (
  set string=%%i
  (
  for /f "delims=" %%j in ('
   call set /p"=%%string:*]=%%"^<nul
  ') do (
   echo %%j
   )
  )|| (
  echo.
  )
  set /a count_1+=1
  for /f %%j in ('
   set /a count_1
  ') do (
   if %%j==1 (
    set /a count_2+=1
    )
   if %%j==%string_quantity% (
    echo $$$
    set count_1=
    )
   )
  )
 echo $$$
 )>.txt

 for /f %%i in ('
  set /a index_format-1
 ') do (
  for /l %%j in (1 1 %%i) do (
   call set zeros=0%%zeros%%
   )
  )
 for /l %%i in (1 1 %count_2%) do (
  set $index=%zeros%%%i
  for /f %%j in ('
   call echo %%$index:~-%index_format%%%
  ') do (
   set /p="WScript.StdOut.Write(Split(WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(".txt").ReadAll(), vbCrLf&"$$$"&vbCrLf)(%%i))"<nul>.vbs
   (
   cscript //nologo .vbs
   if "%final_blank_line%"=="+" (
    echo.
    )
   )>"%~dpns1%%j%~xs1"
   )
  )

 set /p="WScript.CreateObject("SAPI.SpVoice").Speak("Processing of the '%~nxs1' file is complete!")"<nul>.vbs
 cscript //nologo .vbs 2>nul

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

Отправлено: 12:57, 27-08-2014 | #24


Ветеран


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

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


Georgio понял, спасибо вам за помощь

Отправлено: 12:59, 27-08-2014 | #25


Ветеран


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

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


Georgio, а имена выводимых файлов не должны меняться? почему то они у меня не много не такие получаются.
если файл называется Alexander, получаются файлы ALEXAN~101, ALEXAN~102, ALEXAN~103 ................ чисел в нумерации установлено 2

Последний раз редактировалось Alexander_88, 27-08-2014 в 13:22.


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


Ветеран


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

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


Alexander_88, попробуйте:



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

set string_quantity=50
set index_format=4

:: Set the value of the variable: «+» or nothing.
set final_blank_line=+

:: Enter the names of one or more files.
for %%? in (
"list1.txt"
"list2.txt"
"list3.txt"
 ) do (
 call:sub %%?
 )

del .txt .vbs
exit /b


:sub

 setlocal

 (
 echo.
 echo $$$
 for /f "delims=" %%i in ('
  find /n /v ""^<%1
 ') do (
  set string=%%i
  (
  for /f "delims=" %%j in ('
   call set /p"=%%string:*]=%%"^<nul
  ') do (
   echo %%j
   )
  )|| (
  echo.
  )
  set /a count_1+=1
  for /f %%j in ('
   set /a count_1
  ') do (
   if %%j==1 (
    set /a count_2+=1
    )
   if %%j==%string_quantity% (
    echo $$$
    set count_1=
    )
   )
  )
 echo $$$
 )>.txt

 for /f %%i in ('
  set /a index_format-1
 ') do (
  for /l %%j in (1 1 %%i) do (
   call set zeros=0%%zeros%%
   )
  )
 for /l %%i in (1 1 %count_2%) do (
  set $index=%zeros%%%i
  for /f %%j in ('
   call echo %%$index:~-%index_format%%%
  ') do (
   set /p="WScript.StdOut.Write(Split(WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(".txt").ReadAll(), vbCrLf&"$$$"&vbCrLf)(%%i))"<nul>.vbs
   (
   cscript //nologo .vbs
   if "%final_blank_line%"=="+" (
    echo.
    )
   )>"%~dpn1%%j%~x1"
   )
  )

 set /p="WScript.CreateObject("SAPI.SpVoice").Speak("Processing of the '%~nx1' file is complete!")"<nul>.vbs
 cscript //nologo .vbs 2>nul

 endlocal
 exit /b


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

Отправлено: 13:34, 27-08-2014 | #27


Ветеран


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

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


Работает, спасибо

Отправлено: 13:53, 27-08-2014 | #28


Аватара для blackeangel

Старожил


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

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


Всем привет. Есть такая проблема.Необходимо разбить файл на 3 части. Причем кол-во строк в каждой части разное.
Разбивать так: 1 файл от начала и до строки которая задается переменной; 2ой файл между 2мя переменными(так как переменные получаются по найденым словам в тексте и их номера строк),3й файл - от второй переменной и до конца файла.
Желательно через CMD сия мероприятие производить...
знаю что найти сномер строки вот так вот
Цитата Bruce Wayne:
for /f "delims=[] tokens=1*" %%a in ('find /i /n "text" ^< "start.txt"') do echo number=%%a »

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 20:15, 06-11-2015 | #29


Ветеран


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

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


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

set "file=example.txt"
set "marker_1=слово (или фраза), по которому нужно определить первую строку"
set "marker_2=слово (или фраза), по которому нужно определить вторую строку"

for /f "delims=:" %%i in ('
 2^>nul (findstr/iln /c:"%marker_1%" /c:"%marker_2%" "%file%"^& ^<"%file%" find/c /v ""^)
') do (
 if not defined x (set x=%%i) else (if not defined y (set y=%%i) else (set z=%%i))
)
for %%i in ("%file%") do <%%i (
 for %%? in (1 2 3) do 2>nul del "%%~ni_%%?%%~xi"
 for /l %%j in (1 1 %z%) do (
  if %%j leq %x% (set n=1) else (if %%j lss %y% (set n=2) else (set n=3))
  for /f %%k in ('set/a n') do (
   set x=& set/p x=& >>"%%~ni_%%k%%~xi" (
   if defined x (cmd/v/c echo.!x!) else (echo.)
   )
  )
 )
)

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

Отправлено: 04:44, 07-11-2015 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] как разбить один txt на несколько shadowbat Скриптовые языки администрирования Windows 7 05-10-2010 07:10
[решено] Вставить строчку из одного txt в оределённое место другого txt ZeroCrash AutoIt 7 13-07-2009 07:35
Shell. Чтение текстового файла по строкам. Delphin911 Общий по Linux 11 07-04-2005 17:58
Разбить винчестер Guest Microsoft Windows 2000/XP 9 01-03-2003 23:50
Разбить MP3 Rom K Хочу все знать 9 09-10-2002 12:45




 
Переход