[Windows] 배치파일(utf8 > ansi)

사용하던 PC를 용도변경을 진행하며,

새 컴퓨터를 구매하게 되었습니다.

 

근데 기존 python 파일도 그렇고,

배치파일 만들었던것도 그렇고

죄다 한글이 깨지더라구요..

 

윈10에서 작업하다가

새 컴퓨터가 윈11이라 그런건지..

 

무튼 이유나 방법은 많겠지만

개인적으로 일단 편해야하고 빠르게 되야하기 때문에

배치파일로 인코딩을 변경하기로 하였습니다.

 

명령어는 powershell 명령어로 아래와 같은 방식입니다.

Get-Content -Raw -Encoding UTF8 "기존파일경로" | Out-File -Encoding Default "새 파일경로"

 

예를 들어 C:\TEMP\utf8file.txt 라는 파일을

ansi 인코딩으로 바꿔서 저장하고 싶다면,

Get-Content -Raw -Encoding UTF8 "C:\temp\utf8file.txt" | Out-File -Encoding Default "C:\new\ansifile.txt"

 

간단하죠?

결과물을 보자면

저는 C에 무슨 권한문제가 또 나와서 일단 문서폴더에 작성했는데,

이것도 바꿔야하네요..ㅎ

 

무튼 인코딩을 변경하는건 완료하였습니다.

 

이제 여기서 배치파일로 만들건데,

이왕이면 폴더의 파일들이 일괄로 변경되면 좋겠죠?

 

@echo off
setlocal

REM ====== 사용자 입력 ======
set "ROOT=%~1"
if not defined ROOT set "ROOT=%cd%"

set "PAT=%~2"
if not defined PAT set "PAT=*"

set "RECUR=%~3"

REM ====== 출력 폴더/파일 ======
set "OUTDIR=%ROOT%\..\new"
if not exist "%OUTDIR%" mkdir "%OUTDIR%" 2>nul
set "OUT=%OUTDIR%\filelist.txt"
if exist "%OUT%" del "%OUT%" 2>nul

REM ====== 목록 생성 ======
if /i "%RECUR%"=="recursive" (
    for /r "%ROOT%" %%F in (%PAT%) do (
        echo %%~fF >> "%OUT%"
    )
) else (
    for %%F in ("%ROOT%\%PAT%") do (
        echo %%~fF >> "%OUT%"
    )
)

echo 목록 저장 완료: "%OUT%"
echo.

REM ====== 한 줄씩 처리 ======
for /f "usebackq delims=" %%L in ("%OUT%") do call :process "%%~L"

echo 처리 완료.
endlocal
goto :eof

:process
REM %1 = 파일 경로
set "FILE=%~1"
set "NAME=%~nx1"

echo 처리 중: "%FILE%"
powershell -Command ^
  "Get-Content -Raw -Encoding UTF8 '%FILE%' | Out-File -Encoding Default '%OUTDIR%\%NAME%' "
::echo "Get-Content -Raw -Encoding UTF8 '%FILE%' | Out-File -Encoding Default '%OUTDIR%\%NAME%' "

goto :eof

 

네.

사용법은

배치파일명.bat "폴더경로" [패턴:txt,bat,py 등] [recursive]

 *폴더 경로는 기존 UTF8 파일이 있는곳으로 넣어주시면 되고,

 *패턴은 기본적으로는 전체로 잡혀있는데,

  txt나 py 등 입맛에 맞게 변경할 수 있습니다.

 *recursive 사용 시 하위 폴더 포함.

  단, 이동 될 폴더에는 일괄입니다.

 

하여 incoding.bat "C:\Users\user\Documents\temp"

요렇게 넣으면 "C:\Users\user\Documents\new" 밑에 리스트와 인코딩 된 파일이 생기는겁니다.

 

incoding.bat
0.00MB

 

 

그리고, 반대의 경우(ansi > UTF8).

위 파일에서 가장 아래쪽.

"Get-Content -Raw -Encoding UTF8 '%FILE%' | Out-File -Encoding Default '%OUTDIR%\%NAME%' " 내용을

"Get-Content '%FILE%' | Set-Content -Encoding utf8 '%OUTDIR%\%NAME%' "

로 바꿔주면 됩니다.

 

반응형