|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] разбить по строкам txt |
|
CMD/BAT - [решено] разбить по строкам txt
|
Старожил Сообщения: 267 |
есть list.txt
как разбить его на list01.txt, list02.txt ... по 50 строк? т.е. если есть list.txt в котором 400 строк - то разбить его на 8 txt-файлов по 50 строк |
|
Отправлено: 20:40, 29-08-2010 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Alexander_88:
|
|
Отправлено: 06:35, 19-08-2014 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать Спасибо большое, еще и со звукок
![]() |
Отправлено: 10:14, 19-08-2014 | #22 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать а такой код нельзя заставить работать если txt сохранен в формате unicode text file ?
просто программа по умолчанию сохраняет в формате "unicode text file", приходится каждый раз менять тип на "text file" или как - тоизбавится от этого сохранения в unicode text file, чтобы по умолчанию, сразу предлагалось в text file)) |
Отправлено: 03:11, 27-08-2014 | #23 |
Ветеран Сообщения: 874
|
Профиль | Отправить 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 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать Georgio понял, спасибо вам за помощь
|
Отправлено: 12:59, 27-08-2014 | #25 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать Georgio, а имена выводимых файлов не должны меняться? почему то они у меня не много не такие получаются.
если файл называется Alexander, получаются файлы ALEXAN~101, ALEXAN~102, ALEXAN~103 ................ чисел в нумерации установлено 2 |
Последний раз редактировалось Alexander_88, 27-08-2014 в 13:22. Отправлено: 13:17, 27-08-2014 | #26 |
Ветеран Сообщения: 874
|
Профиль | Отправить 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 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать Работает, спасибо
![]() |
Отправлено: 13:53, 27-08-2014 | #28 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Всем привет. Есть такая проблема.Необходимо разбить файл на 3 части. Причем кол-во строк в каждой части разное.
Разбивать так: 1 файл от начала и до строки которая задается переменной; 2ой файл между 2мя переменными(так как переменные получаются по найденым словам в тексте и их номера строк),3й файл - от второй переменной и до конца файла. Желательно через CMD сия мероприятие производить... знаю что найти сномер строки вот так вот Цитата Bruce Wayne:
|
|
------- Отправлено: 20:15, 06-11-2015 | #29 |
Ветеран Сообщения: 874
|
Профиль | Отправить 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|