기 타 배치파일 실행 시간을 줄일수 있나요?
2017.08.27 10:41
무협소설.txt를 Balabolka로 듣고 있습니다.
그런데 ()의 내용은 읽어주고 <>의 내용은 무시 됩니다.
(),<>가 바뀌어서 읽혀저야 되는데...
Balabolka에서 바꾸기로 사용하다가
구걸(?)링으로 배치파일을 만들어서 사용하고 있습니다.
문제는 배치파일 실행 시간입니다.
철이님 PE에서는 2~3분이면 되는데 실컴(Windows 10RS3)에서는
10분 넘게 걸립니다. (1M 기준)
실행시간을 줄일수 있게 도와 주세요.
그리고 .txt 파일의 빈줄이 무시되는데 이것도...
부탁합니다.
배치파일과 .txt파일(하나만)을 같은 폴더에 두고 실행 합니다.
@echo off
title txt 파일 rename
mode con cols=35 lines=10
color F0
for /f "tokens=* usebackq" %%a in (`"dir /o:n /b *.txt"`) do set old="%%a"
for /f "tokens=* usebackq" %%b in (`"dir /o:n /b *.txt"`) do (set text="%%b" & goto _rename)
goto _error
:_rename
set name=%text%
rename %name% "test.txt"
timeout /t 3 /nobreak >nul
setlocal enabledelayedexpansion
FOR /F "delims=" %%i in (test.txt) do (
set "line=%%i"
set "line=!line:<={!"
set "line=!line:>=}!"
set "line=!line:(=<!"
set "line=!line:)=>!"
set "line=!line:{=(!"
set "line=!line:}=)!"
echo.!line!>>newtest.txt
)
pause
rename "test.txt" %old%
rename "newtest.txt" new%old%
exit
:_error
cls
color 4F
echo.
echo.
echo txt 파일을 찾을 수 없습니다.
echo txt 파일을 배치파일이 있는
echo 폴더에 복사해주세요.
echo.
timeout /t 5 /nobreak >nul
exit
감사합니다.
댓글 [6]
-
불감자 2017.08.27 12:03
-
adda 2017.08.27 13:03
아는게 배치파일 그것도 아주 조금 뿐 입니다.
감사합니다.
-
이세라 2017.08.27 12:03 관리자 권한 실행 하여도 마찬가지 입니까? -
adda 2017.08.27 13:07
2번째 줄에 pushd %~DP0 넣고 관리자 권한으로 실행 해도 마찬가지 입니다.
감사합니다.
-
메리아 2017.08.27 12:38
배치파일을 버리란 말 밖엔 할말이 없겠군요.
그리고 하고자 하는게,
()를 <>로 바꾸는 건가요?
그럼 더더욱 깔끔하게 정규식으로 처리할 수 있을텐데,
vbscript로 하면 따로 아무것도 깔 필요없이, 더 빠르게 가능할겁니다.
양이 어느정도인지는 모르지만,
보아하니 무협지 같고, 무협지 txt가 그까이꺼 일반적으로 1MB도 안되는 텍스트인데 몇초도 안걸릴거 같은데...
1초나 걸릴까 싶네요.
vbscript 파일 입출력과 정규식 예제를 검색해보시면 해결이 될듯하네요.
참고로
vbscript는 윈도우이기만 하면 윈2000 이후 어디서나 가능할거고(그 이전도 될거지만 장담은 못함)
저정도 바꾸는거면 줄단위로 읽을 필요없이 통째로 읽어서 정규식 먹이면 됩니다.
정규식이 좀 어렵겠지만요...
대강 [(]([^\r\n()]+)[)] 이정도 식이면 되지 않을까 싶은데...
정규식 쓰실거면 패턴에 위 내용을 넣으세요.
-------------------------------------------------------
아무래도 정규식은 스스로 해결이 어려울듯 하니,
대강의 vbscript 예제를 써보자면,
Dim orgTxt, retTxt
orgTxt = "ab(cd(efg)hijk"Dim objRegEx
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.IgnoreCase = TrueobjRegEx.pattern = "[(]([^\r\n()]+)[)]"
retTxt = objRegEx.Replace(orgTxt, "<$1>")MsgBox orgTxt & vbNewLine & retTxt
대략적으로 이런식으로 쓰면 될겁니다.
(윈도우에서 새 텍스트 문서 만들고 위 코드 복붙하고, 확장자를 vbs로 바꾼후 더블클릭하면 어떤식으로 동작하는지 나옴)
-
adda 2017.08.27 13:16
정년 후 교통 사고로 머리가 맑지 못해서 처음인 것들은 이해가 어렵습니다.
직업(몸으로...)에 충실하느라 컴퓨터를 가까이 하지 못했습니다.
() ⇒ <>, <> ⇒ () 이렇게 교체하는 겁니다.
감사합니다.
텍스트 파일을 이런 식으로 배치 파일에서 처리하는 것은... 대단히 비효율적인 일입니다.
텍스트 에디터에서 매크로를 만들어서 저장한 후 그걸 사용하심이 빠르지 않을지 싶네요.
배치 파일 실행 시간 차이는 그게 pe라거나 실컴이라서 그런 게 아닐 겁니다.... ㅋ