기 타 여러 텍스트 파일을 하나의 줄로 저장 하고 싶어요
2022.06.04 17:52
폴더내에 여러 텍스트파일을 합치고 싶은데요
텍스트 파일 하나당 한줄로 나오게 할 수 있을까요?
한줄이 텍스트 파일 하나인셈인거죠
그리고 역으로 한줄로 저장된 텍스트 파일을
개별로 따로 저장이 가능한지요?
댓글 [15]
-
VᴇɴᴜꜱGɪʀʟ 2022.06.04 22:46
-
지후빠 2022.06.04 23:50
배치파일로 골격만 잡았습니다. 원본 소스의 인코딩 등을 고려하셔서 필요한 방향으로 수정해보시면 좋겠습니다. ^^;
textjoin.cmd 같은 폴더에 있는 모든 .txt 파일을 파일 하나당 한줄로 정리합니다. 편의상 줄사이 스페이스를 하나 추가하였습니다.
@echo off & cd /d "%~dp0" & setlocal enabledelayedexpansion
for %%# in (*.txt) do (set "line="
for /f "delims=" %%a in (%%~s#) do set "line=!line!%%a "
echo !line! >> textjoin.out
)
endlocal & pause
textsplit.cmd textjoin.out 텍스트 파일을 한줄씩 각 파일로 분리하여 out숫자.txt 로 저장합니다.
@echo off & cd /d "%~dp0" & setlocal enabledelayedexpansion
set "file=textjoin.out"
for /f "delims=" %%a in (%file%) do set /a i+=1 & echo %%a > out!i!.txt
endlocal & pause
-
고북 2022.06.05 07:53
감사합니다.
-
메리아 2022.06.05 11:01
이런건 VBscript가 나을거 같아 VBS로 짜봤습니다.
위의 배치파일에 비해 길고 복잡해보이긴 합니다만
원하는대로 조건 걸고 제어하기는 훨씬 좋죠.(물론 문법을 알아야하지만요...)
지금 첨부하는 파일로는 완벽히 원하는 동작이 나오지는 않겠지만
내용을 잘 뜯어보신다면 어느 부분을 고쳐야할지 보일겁니다.
파워셸이나 배치파일은 좀 복잡한 조건을 거르는게 참 힘들거든요. VBS는 그런 쪽에서 훨씬 유리합니다.
-
고북 2022.06.05 12:47
파일 합칠때 내용을 발췌해서 파일명을 정하는것도 가능하신가요?
날짜 이름vs이름
이렇게요
-
메리아 2022.06.05 14:56
무슨 의미인지 언뜻 이해가 잘 안가는데요
파일 합치기를 원하는데 앞부분 발췌나 날짜를 원한다면
1 txt 내용 합치기 test.vbs 파일에서
objTxtfs.WriteLine(eachFile.Path)
objTxtfs.WriteLine(tmp_ReadAll + vbNewLine)
이 부분을 고쳐야하는데요
각각 파일 FullPath랑 읽은거 한줄로 만들어 쓰기하는 부분인건 아시겠죠?
저기서 [파일명 : 내용] 이런구조를 원한다면, 두 줄을 하나로 합치고 아래와 같이 쓰면 됩니다.
objTxtfs.WriteLine(eachFile.Name & " : " & tmp_ReadAll & vbNewLine)
위에서 [수정날짜 / 파일명 : 내용]을 원한다면
objTxtfs.WriteLine(eachFile.DateLastModified & " / " & eachFile.Name & " : " & tmp_ReadAll & vbNewLine)
위에서 [수정날짜 / 내용앞부분 : 내용] (대충 앞부분 10글자라고 치고)
objTxtfs.WriteLine(eachFile.DateLastModified & " / " & Left(tmp_ReadAll, 10) & " : " & tmp_ReadAll & vbNewLine)
그리고 파일 분리를 원하는데 파일명을 내용 발췌하는걸 원하는건가 싶어서 또 말씀드리자면
2 txt 내용 분리하기 test.vbs 에서
Set objTxtfs_sub = objFSO.OpenTextFile("output_" & idx & ".txt", ForWriting, True)
이 부분을 고쳐야 할텐데요,
Set objTxtfs_sub = objFSO.OpenTextFile(Left(tmp_ReadAll, 10) & ".txt", ForWriting, True)
이런식으로 쓸 수 있습니다.
문제는 "파일명 불가능 문자"가 있습니다.
이거 거르는 명령 써야하는데 일단 좀 찾아보고 올려드릴게요.
-
메리아 2022.06.05 15:26
파일명 불가능 문자 거르는 코드입니다.(Function 부분을 맨뒤든 앞이든 복붙하면 됩니다.)
VBscript로 만들어 놓은게 없어서 다른거 찾아다 고쳐서 손본다고 좀 늦었네요.
뭐, 파일명 불가능 문자 쓰실일 없다면야 필요는 없을겁니다만,
필요하면 쓰셔야할겁니다.
그리고 보다시피 불가능 문자 중에 C:\abc\def.txt 같은 전체경로를 넣으면 안되고
반드시 def.txt같은 파일명만 넣고 상위경로와 합쳐야합니다.(확장자는 가능)
불가능 문자에 :와 \가 있기 때문에요.
new_FileName = win_FileName(Left(tmp_ReadAll, 10) & ".txt", "")
Set objTxtfs_sub = objFSO.OpenTextFile(new_FileName, ForWriting, True)
이런식으로 쓰시면 됩니다.
MsgBox win_FileName("def.txt", "")MsgBox win_FileName("de?*:f.txt", "")MsgBox win_FileName("de?*:f.txt", "_")' Function win_FileName(inFileFolderName, Optional other_char = "") 'As StringFunction win_FileName(inFileFolderName, other_char)'//경로를 넣으면 안됨. 경로 구분자를 위한 처리까지 하게 되어있음.'ex) C:\abc\de?*:f.txt -> 입력하면 경로 깨짐' de?*:f.txt -> de?×:f.txt (아스키가 아닌 유사한 유니코드 문자로 변경)Dim retFileFolderNameretFileFolderName = inFileFolderNameretFileFolderName = Trim(retFileFolderName)If Len(other_char) = 0 ThenretFileFolderName = Replace(retFileFolderName, "?", "?")retFileFolderName = Replace(retFileFolderName, "\", "\")retFileFolderName = Replace(retFileFolderName, "/", "/")retFileFolderName = Replace(retFileFolderName, ":", ":")retFileFolderName = Replace(retFileFolderName, "*", "×")retFileFolderName = Replace(retFileFolderName, """", "¨")retFileFolderName = Replace(retFileFolderName, "<", "〈")retFileFolderName = Replace(retFileFolderName, ">", "〉")retFileFolderName = Replace(retFileFolderName, "|", "|")ElseretFileFolderName = Replace(retFileFolderName, "?", other_char)retFileFolderName = Replace(retFileFolderName, "\", other_char)retFileFolderName = Replace(retFileFolderName, "/", other_char)retFileFolderName = Replace(retFileFolderName, ":", other_char)retFileFolderName = Replace(retFileFolderName, "*", other_char)retFileFolderName = Replace(retFileFolderName, """", other_char)retFileFolderName = Replace(retFileFolderName, "<", other_char)retFileFolderName = Replace(retFileFolderName, ">", other_char)retFileFolderName = Replace(retFileFolderName, "|", other_char)End Ifwin_FileName = retFileFolderNameEnd Function -
고북 2022.06.05 11:43
감사합니다
-
고북 2022.06.05 11:49
지후빠님
파일 첨부했습니다.
-
지후빠 2022.06.05 12:19
txt 파일 형태를 보니 줄 구분자를 넣을 필요 없겠다 싶어서 스페이스 추가 부분 없앴습니다.
한가지 더 추가했습니다. 용도에 따라 수정이 편하신 것을 사용할 수 있겠습니다.^^
@echo on & cd /d "%~dp0" & setlocal enabledelayedexpansion
for %%# in (*.txt) do (set "line="
for /f "eol= delims=" %%a in (%%~s#) do set "line=!line!%%a"
echo !line! >> textjoin.out
)
endlocal & pause
@echo off & cd /d "%~dp0" & setlocal enabledelayedexpansion
for %%# in (*.txt) do (
for /f "eol= delims=" %%h in (%%~s#) do (>>textjoin.out <nul set /p unused=%%h)
echo.>>textjoin.out
)
endlocal & pause
-
고북 2022.06.05 12:24
감사합니다
잘 작동합니다.
-
지후빠 2022.06.05 14:11
원본 파일명 정보도 포함하도록 하였습니다.
@cd /d "%~dp0" & setlocal enabledelayedexpansion
for %%# in (*.txt) do (set "line=%%#|"
for /f "eol= delims=" %%a in (%%~s#) do set "line=!line!%%a"
echo !line! >> textjoin.out
)
endlocal & pause
원본 파일명으로 분리토록하였습니다. 혹시 줄바꿈도 원본처럼 복원해야하나요?
@cd /d "%~dp0" & setlocal enabledelayedexpansion
@set "file=textjoin.out"
for /f "tokens=1* delims=|" %%a in (%file%) do echo %%b >> %%a
endlocal & pause
-
고북 2022.06.05 16:56
그래주시면 감사합니다.
대단하세요~ ^^
-
지후빠 2022.06.05 18:37
합칠때는 "|"로 연결하고 분리할때 "|"를 기준으로 줄을 나눕니다.
파일 이름도 저장하고 복원합니다.
원본 텍스트 파일 줄이 26줄 이상이면 마지막 줄은 분리되지 않고 한줄로 나옵니다. 샘플파일에서는 21줄 이하라 문제 없을듯...
@cd /d "%~dp0" & setlocal enabledelayedexpansion
for %%# in (*.txt) do (set "line=%%#"
for /f "eol= delims=" %%a in (%%~s#) do set "line=!line!|%%a"
echo !line!>> textjoin.out
)
endlocal & pause
@cd /d "%~dp0" & setlocal enabledelayedexpansion
for /f "tokens=1-25* delims=|" %%a in (textjoin.out) do (
call :APPEND "%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h" "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o" "%%p" "%%q" "%%r" "%%s" "%%t" "%%u" "%%v" "%%w" "%%x" "%%y" "%%z")
endlocal & pause & exit /b
:APPEND
set out=%1
:loop
shift
if "%~1"=="" (exit /b) else echo %~1>> %out%
goto loop
-
고북 2022.06.05 19:19
완벽히 구현되었습니다.
꾸벅~~
번호 | 제목 | 글쓴이 | 조회 | 등록일 |
---|---|---|---|---|
[공지] | 질문과 답변 게시판 이용간 유의사항 | gooddew | - | - |
98179 | 윈 도 우| 23h2 부터 무인설치 에러가 나타납니다. [3] | 엔씨다이노 | 530 | 10-28 |
98178 | 윈 도 우| 윈도우11 작업표시줄에 있는 아이콘에 오른쪽버튼을 누르면... [2] | 켄치 | 248 | 10-28 |
98177 | 소프트웨어| pe.wim 파일에 우클릭 1회성 부팅 병합 어떻게 하나요? [3] | ksire | 328 | 10-28 |
98176 | 하드웨어| 인탤 cpu 앞에 붙는 i5 i7 i9 차이가 뭔가요? [2] | 복두꺼비 | 448 | 10-28 |
98175 | 소프트웨어| 트루이미지 복구 관련 문의 드립니다 [2] | hwasung | 231 | 10-28 |
98174 | 하드웨어| CPU 내장그래픽 및 그래픽카드 영상 코덱 관련 질문입니다. [2] | 예스어데이 | 312 | 10-28 |
98173 | 소프트웨어| Zoom의 화면 공유에서 음성공유 가능한지... | asklee | 83 | 10-27 |
98172 | 윈 도 우| 윈도우11 업데이트 관련 문의 드립니다. [4] | 맹물 | 590 | 10-27 |
98171 | 소프트웨어| 크롬 즐겨찾기 순서 변경 문의 [4] | asklee | 207 | 10-27 |
98170 | 소프트웨어| 유니콘pro 오류 [1] | 개척자 | 230 | 10-27 |
98169 | 윈 도 우| 윈도우테마 변경방법 | 짱구박 | 161 | 10-27 |
98168 | 소프트웨어| mp3파일이름과 곡목이 맞지 않습니다 [5] | brucex | 266 | 10-27 |
98167 | 윈 도 우| 윈도우11 테마 수정 방법 [3] | 짱구박 | 518 | 10-27 |
98166 | 윈 도 우| <확장하여 폴더 열기> 사용 불가? [1] | LastLife | 127 | 10-27 |
98165 | 하드웨어| SATA 컨트롤러가 이상합니다. | 밤이슬216 | 172 | 10-27 |
98164 | 윈 도 우| 오늘 윈도우 업데이트 [14] | svp | 1186 | 10-27 |
98163 | 윈 도 우| win11 22H2 2506으로 업데이트 하신 분께 질문 드립니다 [2] | 오두막과시 | 348 | 10-27 |
98162 | 하드웨어| RTX 4060TI 16G 지금 이가격 구입하기 적절한가요?? [2] | 윈도우스타 | 448 | 10-27 |
98161 | 윈 도 우| easy 시리즈 pe 바탕화면 펼치기 어떻게 하나요? [1] | ksire | 189 | 10-27 |
98160 | 모 바 일| 스마트폰 음악플레이어앱 하나 추천 부탁합니다. [4] | joe | 436 | 10-27 |
줄 끌의 줄 바꿈을 한 엔터의 처리에 따라 다르겠죠.
병합하기전에 미리 줄 바꿈을 한 엔터를 없애거나 병합하고 나서 줄 바꿈을 한 엔터를 없애야 겠죠.
대부분의 텍스트 에티터에는 줄바꿈 엔터를 없애는 기능은 문단 부호를 보이게 하고 없애는 기능은 있습니다.
그리고 역으로 한줄로 저장된 텍스트 파일을 개별로 따로 저장은 일일이 수작업을 해야겠죠. 새로운 파일을 만들어야 하니까요!