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

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

Ответить
Настройки темы
CMD/BAT - Разбивка файла с делителем

Новый участник


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

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


Приветствую. Очень нужна помощь с написанием bat файла. Есть исходный файл с расширением file.anc в котором присутствует код. Код разделен делителем %. Собственно нужно разделить весь код на отдельные файлы с кодом с таким же расширением.
пример file.anc
%
N20 G90 G49
N30 G40 G80
N40 G54
N50 M5
N60 M7
%
%
N20 G90 G49
N30 G40 G80
N40 G54
%
%
N40 G54
N50 M5
N60 M7
%

нужно что бы получились файлы
file1.anc с кодом

%
N20 G90 G49
N30 G40 G80
N40 G54
N50 M5
N60 M7
%

file2.anc с кодом

%
N20 G90 G49
N30 G40 G80
N40 G54
%

file3.anc с кодом

%
N40 G54
N50 M5
N60 M7
%
и т.д

Отправлено: 13:01, 19-05-2023

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Читали? http://forum.oszone.net/forumdisplay...ilter_by=title

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:21, 19-05-2023 | #2



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

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


Новый участник


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

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


Я в принципе нашел решение данного вопроса на форуме но батник не работает с символом %. Приходится через нотепад заменять % на # и уже тогда все начинает работать. Но хочется исключить нотепад из цепочки.
Использовал несколько готовых решений. Я далек от этой темы если честно.

ren *.anc *.txt

@echo off
set "f=file.txt"

setlocal enabledelayedexpansion
<"%f%" (for /f "delims=" %%a in ('find /v ""') do @echo %%a|>nul find "#" && (set /a n+=1& rem:>"f!n!.txt") || (if exist "f!n!.txt" >>"f!n!.txt" echo:%%a))

endlocal
del /f /s /q file.txt,f2.txt,f4.txt,f6.txt,f8.txt,f10.txt,f12.txt,f14.txt,f16.txt,f18.txt,

setlocal enabledelayedexpansion
set "count=1001"
set a="*.txt"
for /f "usebackq delims=*" %%f in (`dir /b /o:-d %a%`) do (ren "%%f" list-!count:~1!.anc
set /a count+=1
)
pause>nul

Отправлено: 14:30, 19-05-2023 | #3


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off &Cls
	Set "FileIn=Z:\Box_In\file.anc"
	Set "BoxOut=Z:\Box_Out"

	Set /A N=0, M=0
	For /F "usebackq delims=" %%i In (`2^>nul More "%FileIn%"`) Do Call :Out "%FileIn%" "%%i"
Pause
Exit /B

:Out
	If %2=="" If %N% EQU 0 (Set /A M+=1, N=1 &Exit /B) Else (Set /A N=0 &Exit /B)
	If %N% EQU 1 2>nul Del "%BoxOut%\%~n1%M%%~x1" 
	Set /A N+=1
	>>"%BoxOut%\%~n1%M%%~x1" Echo %~2
Exit /B
Вариант с лидирующими нулями в номере файла
Код: Выделить весь код
@Echo Off &Cls
	Set "FileIn=Z:\Box_In\file.anc"
	Set "BoxOut=Z:\Box_Out"

	Set /A N=0, M=1000
	For /F "usebackq delims=" %%i In (`2^>nul More "%FileIn%"`) Do Call :Out "%FileIn%" "%%i"
Pause
Exit /B

:Out
	If %2=="" If %N% EQU 0 (Set /A M+=1, N=1 &Exit /B) Else (Set /A N=0 &Exit /B)
	If %N% EQU 1 2>nul Del "%BoxOut%\%~n1%M:~-3%%~x1" 
	Set /A N+=1
	>>"%BoxOut%\%~n1%M:~-3%%~x1" Echo %~2
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-05-2023 в 17:29.

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

Отправлено: 17:22, 19-05-2023 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Powershell
Код: Выделить весь код
$inputFile = 'C:\temp\file.anc'
$outputFolder = 'C:\temp'
$enc = @{
    Encoding = 'default'
}

$c = 1
gc $inputFile |% {
$outputFile = "$outputFolder\file$($c).anc"
    if ($_ -eq '%') {
        if ($writing) {
            $writing = $false
            "%" |Out-File $outputFile @enc -Append
            $c++
        }
        else {
            $writing = $true
            "%" |Out-File $outputFile @enc
        }
    }
    else {
        $_ |Out-File $outputFile @enc -Append
    }
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 19-05-2023 в 19:40. Причина: идемпотентность, хэш-таблица для кодировки

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

Отправлено: 17:34, 19-05-2023 | #5


Deadooshka


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

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


со split'ом ещё
Код: Выделить весь код
$file = 'file.anc'
(Get-Content $file -Raw).trim('%') -split '%\r?\n?%' |
  ForEach-Object {
    '%{0}%' -f $_ |
    Set-Content -Path ($file -replace '\.\w+$', "$(++$c; $c)$&")
  }
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:01, 20-05-2023 | #6


Новый участник


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

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


всем огромное спасибо. Все работает

Отправлено: 22:02, 20-05-2023 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - Разбивка строк общего файла на отдельные csv файлы jordan_74 Программирование и базы данных 64 22-11-2018 08:50
CMD/BAT - [решено] Разбивка текстового файла файла Seryoga204 Скриптовые языки администрирования Windows 1 04-10-2010 21:19
Установка - Разбивка файла .gho на куски Pavelnt Microsoft Windows 2000/XP 2 15-05-2009 12:15
HDD - Разбивка диска andvict73 Накопители (SSD, HDD, USB Flash) 9 20-03-2009 00:20
Разбивка дисков Neto Хочу все знать 2 22-11-2003 16:01




 
Переход