Показать полную графическую версию : Разбивка файла с делителем
Wicked43
19-05-2023, 13:01
Приветствую. Очень нужна помощь с написанием 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
Читали? http://forum.oszone.net/forumdisplay.php?f=102&filter_string=%D0%E0%E7%E1%E8&filter_by=title
Wicked43
19-05-2023, 14:30
Я в принципе нашел решение данного вопроса на форуме но батник не работает с символом %. Приходится через нотепад заменять % на # и уже тогда все начинает работать. Но хочется исключить нотепад из цепочки.
Использовал несколько готовых решений. Я далек от этой темы если честно.
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
@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
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
}
}
со 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
всем огромное спасибо. Все работает
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.