|
Компьютерный форум 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 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать добрый день, подскажите как исправить проблему в этом варианте
@echo off set $n=50 for /f "tokens=1* delims=[]" %%i in ('find /v /n "" ^<list.txt') do set "$j=%%j"& call :sub %%i exit :sub set /a $m=(%~1-1)/%$n%+1 set $m=0%$m% set $m=%$m:~-2% if not "%$i%"=="%$m%" type nul >list%$m%.txt >>list%$m%.txt echo.%$j% set $i=%$m%& exit /b Дак вот в выходных файлах этот знак удаляется, как избежать этого? |
Отправлено: 14:32, 16-08-2014 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата AlexanderSh88:
|
|
Отправлено: 15:34, 16-08-2014 | #12 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать @echo off set "$file=list.txt" set $n=50 for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%$file%"') do set $j=%%j& call :sub %%i exit :sub set /a $m=(%~1-1)/%$n%+1 set $m=0%$m% for %%i in ("%$file%") do ( if not "%$i%"=="%$m:~-2%" ( type nul>"%%~ni%$m:~-2%%%~xi" ) ( set /p="%$j%"<nul echo. )>>"%%~ni%$m:~-2%%%~xi" ) set $i=%$m:~-2% exit /b |
Отправлено: 15:39, 16-08-2014 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Georgio, сейчас окажется, что некоторые строки начинаются и с «:»
![]() |
Отправлено: 15:46, 16-08-2014 | #14 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать спасибо, работает!
|
Последний раз редактировалось AlexanderSh88, 16-08-2014 в 21:44. Отправлено: 18:42, 16-08-2014 | #15 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата AlexanderSh88:
Цитата AlexanderSh88:
@echo off set "$file=list.txt" set $n=50 set $format=4 for /f %%i in (' set /a $format-1 ') do ( for /l %%j in (1 1 %%i) do ( call set zeros=0%%zeros%% ) ) for /f "tokens=1* delims=:" %%i in (' findstr /n "^" "%$file%" ') do ( set $j=%%j call :sub %%i ) exit :sub set /a $m=(%1-1)/%$n%+1 set $m=%zeros%%$m% call set $m=%%$m:~-%$format%%% for %%i in ("%$file%") do ( if not "%$i%"=="%$m%" ( type nul>"%%~ni%$m%%%~xi" ) set /a count+=1 ( if defined $j ( for /f %%j in (' call echo %%count%% ') do ( if not %%j==%$n% ( set /p="%$j%"<nul echo. ) else ( set /p="%$j%"<nul set count= ) ) ) else ( echo. ) )>>"%%~ni%$m%%%~xi" ) set $i=%$m% exit /b |
||
Последний раз редактировалось Georgio, 17-08-2014 в 03:36. Отправлено: 00:19, 17-08-2014 | #16 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Уже не страшно. Пусть начинаются хоть с «:::::» при использовании «findstr», хоть с «[[[[[» или «][][][» при использовании «find»: 1) @echo off set "$file=list.txt" set $n=50 set $format=4 for /f %%i in (' set /a $format-1 ') do ( for /l %%j in (1 1 %%i) do ( call set zeros=0%%zeros%% ) ) for /f "delims=" %%j in (' findstr /n "^" "%$file%" ') do ( for /f "delims=:" %%i in ("%%j") do ( call :sub %%i "%%j" ) ) exit :sub set /a $m=(%1-1)/%$n%+1 set $m=%zeros%%$m% call set $m=%%$m:~-%$format%%% set "$string=%~2" for %%i in ("%$file%") do ( if not "%$i%"=="%$m%" ( type nul>"%%~ni%$m%%%~xi" ) set /a count+=1 ( for /f %%j in (' call echo %%count%% ') do ( if not %%j==%$n% ( ( for /f "delims=" %%k in ("%$string:*:=%") do ( echo.%%k ) )|| ( echo. ) ) else ( ( for /f "delims=" %%k in ("%$string:*:=%") do ( set /p=%%k<nul set count= ) )|| ( echo. set count= ) ) ) )>>"%%~ni%$m%%%~xi" ) set $i=%$m% exit /b ; 2) @echo off set "$file=list.txt" set $n=50 set $format=4 for /f %%i in (' set /a $format-1 ') do ( for /l %%j in (1 1 %%i) do ( call set zeros=0%%zeros%% ) ) for /f "delims=" %%j in (' "find /n /v ""<"%$file%"" ') do ( for /f "delims=[]" %%i in ("%%j") do ( call :sub %%i "%%j" ) ) exit :sub set /a $m=(%1-1)/%$n%+1 set $m=%zeros%%$m% call set $m=%%$m:~-%$format%%% set "$string=%~2" for %%i in ("%$file%") do ( if not "%$i%"=="%$m%" ( type nul>"%%~ni%$m%%%~xi" ) set /a count+=1 ( for /f %%j in (' call echo %%count%% ') do ( if not %%j==%$n% ( ( for /f "delims=" %%k in ("%$string:*]=%") do ( echo.%%k ) )|| ( echo. ) ) else ( ( for /f "delims=" %%k in ("%$string:*]=%") do ( set /p=%%k<nul set count= ) )|| ( echo. set count= ) ) ) )>>"%%~ni%$m%%%~xi" ) set $i=%$m% exit /b . |
|
Отправлено: 07:43, 17-08-2014 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Ага
![]() ![]() |
Отправлено: 08:14, 17-08-2014 | #18 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать Спасибо, все работает. А можно еще такой же вариантик, только с пустой строкой в конце (как раньше), но с переменной "format".
И еще вопросик, а если к примеру, надо 3 файла так обработать (list1, list2, list3), это можно сделать в одном bat файле или надо для каждого имени такой bat создавать? |
Отправлено: 20:38, 18-08-2014 | #19 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата Alexander_88:
Всё "в одном флаконе": @echo off 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 (' findstr /n "^" %1 ') do ( set string=%%i for /f "delims=" %%j in (' call set /p"=%%string:*:=%%"^<nul ') do ( echo.%%j ) 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 . |
|
Отправлено: 04:21, 19-08-2014 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|