Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Разбивка файла с делителем (http://forum.oszone.net/showthread.php?t=353585)

Wicked43 19-05-2023 13:01 3009290

Разбивка файла с делителем
 
Приветствую. Очень нужна помощь с написанием 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
%
и т.д

DJ Mogarych 19-05-2023 14:21 3009300

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

Wicked43 19-05-2023 14:30 3009304

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

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

megaloman 19-05-2023 17:22 3009325

Код:

@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


DJ Mogarych 19-05-2023 17:34 3009327

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
    }
}


Sham 20-05-2023 09:01 3009351

со split'ом ещё
Код:

$file = 'file.anc'
(Get-Content $file -Raw).trim('%') -split '%\r?\n?%' |
  ForEach-Object {
    '%{0}%' -f $_ |
    Set-Content -Path ($file -replace '\.\w+$', "$(++$c; $c)$&")
  }


Wicked43 20-05-2023 22:02 3009376

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


Время: 14:43.

Время: 14:43.
© OSzone.net 2001-