|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Соединить несколько текстовых файлов в один |
|
|
CMD/BAT - [решено] Соединить несколько текстовых файлов в один
|
Новый участник Сообщения: 6 |
Профиль | Отправить PM | Цитировать Привет форумчане.
Нужен bat, который сможет соединить несколько текстовых файлов в один и второй bat, который сможет их разделить. (создавая подкаталоги) Нашел вот такой неплохой вариант. Соединитель: @echo off set "result=outfile.txt" >nul subst/d ?:& subst ?: .& pushd ?:\ >"%result%" ( for /f "tokens=* delims=?:\" %%i in ('2^>nul dir/a-d/b/s *.txt') do @( if "%%i" neq "%result%" ( echo [%%i] <"%%i" more| more ) ) ) subst/d ?:& popd exit/b 0 @echo off set "result=outfile.txt" for /f %%i in ('^<"%result%" find/c /v ""') do <"%result%" ( for /l %%j in (1 1 %%i) do @( set "x=" set/p x= if defined x ( ( for /f "delims=" %%k in (' cmd/v/c if "!x!" equ "[!x:~1,-1!]" echo "!x:~1,-1!" ') do @( 2>nul md "%%~dpk" rem:>"%%k" set y=%%k ) )|| if defined y cmd/v/c ">>!y! echo.!x!" ) else if defined y cmd/v/c ">>!y! echo." ) ) exit/b 0 Но при разделении файлов, в каждом файле образуется по новой, пустой строчке... (после текста) И если такое возможно, то можно не изменять кодировку текстовика? У меня файлы в кодировке UCS-2 LE BOM, а после разделения файлы меняют кодировку на OEM 866. Буду очень благодарен если поможете. |
|
Отправлено: 17:38, 28-07-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Какова глобальная цель?
Цитата uraabk:
Главный вопрос после прочтения изложенного — зачем Вы изобретаете велосипед? К чему эти слияния-извлечения (см. вопрос в начале сообщения)? Если только для указанного — возьмите 7-Zip/WinRAR и пользуйте. |
|
Отправлено: 17:52, 28-07-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать 1. Есть много папок с текстовыми файлами. Что бы не лазить по каждой папки/файлу, удобнее все собрать в один текстовик и потом с ним работать. А по окончанию запустить "разделитель", что бы все разложилось по полочкам)
2. [] - их там нет, не волнуйтесь) 3. Да, к примеру если случайно будут удалены некоторые папки, такой bat сможет восстановить папку и файл. Цитата Iska:
|
|
Отправлено: 18:09, 28-07-2017 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата uraabk:
Цитата uraabk:
Цитата uraabk:
Упакуйте несколько таких файлов (и со вложенными каталогами) в архив, каковой прикрепите к сообщению, либо выложите на RGhost или Яндекс.Диск. |
|||
Отправлено: 18:22, 28-07-2017 | #4 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
|
||||
Отправлено: 18:31, 28-07-2017 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата uraabk:
Цитата uraabk:
Цитата uraabk:
Цитата uraabk:
Зачем всё вот это нужно.
Например, задача (задача! не выбранный Вами способ решения, а сама задача) может не нуждаться в решении или может нуждаться в ином решении, нежели выбранное Вами. Например, чтобы мне, либо кому-то другому не пришлось самостоятельно изготавливать каталоги с файлами в формате UTF-16 LE с BOM для того, чтобы написать и отладить код. А затем внезапно обнаружить, что у Вас код не работает, например, потому, что Ваши файлы, вопреки изложенному, не в этом формате. Или концы строк отличаются от Windows-стандарта, а идут в Unix или Mac-формате. Или представляют собой одну длинную строку, на которой код тупо не работает. Или ещё что. Подобное бывало не раз, не два, и не три. А происходит стабильно.
Потому и задаётся два вопроса: изложите задачу и приложите образцы исходных данных. И только. Ни чем именно Вы там заниматесь, ни содержание Ваших секретных файлов абсолютно не интересно, пусть Вы там хоть нетленку в стиле садомазо ваяете, не в этом дело. Понимаете? |
||||
Отправлено: 19:18, 28-07-2017 | #6 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Гениально! - вот как можно работать с кодом на iPad! - возьму на заметку.
|
Отправлено: 20:31, 28-07-2017 | #7 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Ну вот, смотрите. Кстати попробовал свои бат введя в тексте "[текст]" и все нормально работало...)
|
Отправлено: 20:40, 28-07-2017 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Busla:
Цитата uraabk:
Как-то так (PowerShell): Joiner.ps1
Param( [System.String]$DestFile = 'outfile.txt' [System.String]$SourceFolder = $pwd, ) if(Test-Path -Path $SourceFolder -PathType Container) { $cContent = Get-ChildItem -Path $SourceFolder -File -Recurse -Include '*.txt' -Exclude $DestFile | ForEach-Object -Process { "[$(($_.FullName).Remove(0, $SourceFolder.Length + 1))]`r`n" + [System.IO.File]::ReadAllText($_.FullName, [System.Text.Encoding]::Unicode) + "`r`n" } [System.IO.File]::WriteAllLines((Join-Path -Path $SourceFolder -ChildPath $DestFile), $cContent, [System.Text.Encoding]::Unicode) } else { Write-Host "Can't find source folder [$SourceFolder]." -ForegroundColor Red } Splitter.ps1
Param( [System.String]$SourceFile = 'outfile.txt', [System.String]$DestFolder = $pwd ) if(Test-Path -Path $SourceFile -PathType Leaf) { if(Test-Path -Path $DestFolder -PathType Container) { $sContent = [System.IO.File]::ReadAllText($SourceFile, [System.Text.Encoding]::Unicode) $oRegExp = New-Object -TypeName 'System.Text.RegularExpressions.Regex' -ArgumentList '\[(.+)\]\r\n([\s\S]*?)(?:\r\n){2}(?=\[.+\]|$)' if($oRegExp.IsMatch($sContent)) { $oRegExp.Matches($sContent) | ForEach-Object -Process { $sCurrDestFile = Join-Path -Path $DestFolder -ChildPath $_.Groups[1].Value $sCurrDestFolder = Split-Path -Path $sCurrDestFile -Parent if(-not (Test-Path -Path $sCurrDestFolder -PathType Container)) { New-Item -ItemType Directory -Path $sCurrDestFolder -Force | Out-Null } [System.IO.File]::WriteAllText($sCurrDestFile, $_.Groups[2].Value, [System.Text.Encoding]::Unicode) } } else { Write-Host "Can't find any match in file [$SourceFile]." -ForegroundColor Red } } else { Write-Host "Can't find destination folder [$DestFolder]." -ForegroundColor Red } } else { Write-Host "Can't find source file [$SourceFile]." -ForegroundColor Red } |
||
Отправлено: 05:18, 29-07-2017 | #9 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Iska, спасибо вы просто великолепны!) Правда пришлось изменить скрипт, что бы он работал, но тут я и сам понял в чем ошибка))
Так я уже говорил про глобальную цель - намного удобнее редактировать все в одном файле, особенно если в каждом текстовике по одному предложению, а их огромное кол-во. |
Отправлено: 11:06, 29-07-2017 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - [решено] Обработка текстовых файлов и вывод всех значение в один файл | Snap_Naprolom | Скриптовые языки администрирования Windows | 2 | 24-03-2016 15:44 | |
2007 - [решено] Ошибка при установке - не удаётся обновить один или несколько защищённых файлов | Golybec | Microsoft Office (Word, Excel, Outlook и т.д.) | 11 | 05-01-2016 18:28 | |
[решено] Как автоматически один за другим воспроизвести несколько файлов в VLC на андроиде | Yewgeniy | Хочу все знать | 2 | 06-05-2015 12:08 | |
Службы - [решено] Параметры безопасности интернета не позволили открыть один или несколько файлов | dd300 | Microsoft Windows 8 и 8.1 | 5 | 17-02-2013 19:42 | |
Как соединить несколько подсетей??? | Guest | Сетевые технологии | 1 | 29-09-2004 09:41 |
|