날짜를 이름으로 갖는 파일이 있는데 그 파일 내용을 파워쉘 스크립트로 주기적으로 치환을 해야할 일이 있었는데 그 때 작성했던 내용입니다.

아주 간단하게 작성을 해봤는데요

 

우선 배치 파일 내용입니다.

 

==================================================================================================================

@echo off

set var_date=20140205


Powershell.exe -noprofile -executionpolicy bypass -file "C:\Users\3\Desktop\test\powersh_test.ps1" %var_date%

exit

==================================================================================================================

 

보면 날짜를 var_date에 넣어줬습니다.(날짜 구하는 스크립트는 제 블로그 Windows / Script 란에 있습니다)

그리고 간단하게 파워쉘 스크립트를 실행시킵니다.

여기서 var_date의 값을 파워쉘로 전달해주기 위해 빨간색을 표시 한 것 처럼 써주시면 됩니다.

그러면 파워쉘 내에서 인자값으로 받아들일 수 있더군요

 

파워쉘 내용

==================================================================================================================

$date=$args
$test=Get-Content C:\Users\3\Desktop\test\BACKUP_$date.txt
$test -creplace '전체','Total' -creplace '복사됨','Copied' -creplace '건너 뜀','Passed' -creplace '불일치','Missmatch' -creplace '실패','Failed' -creplace '추가','Add' -creplace '디렉터리 :   ','Directory :' -creplace '파일','File' -creplace '바이트',' Byte' -creplace '시간','Time' -creplace '속도','Speed' -creplace '초','Sec' -creplace '메가','M' -creplace '분','Min' -creplace '종료됨','EndTime' -creplace '년 ','-' -creplace '월 ','-' -creplace '일','' -creplace '화요','Tue' -creplace '오전','AM' >> C:\Users\3\Desktop\test\result.txt

==================================================================================================================

파워쉘 내용을 보면 date라는 변수에 args라는 값을 넣습니다.

args는 다들 알고 계신 그 값 맞습니다.

배치 파일에서 인자값을 한 개만 줬기 때문에 따로 지정을 하지 않고 args만 잡아줘도 됩니다.(코딩쪽을 몰라서 원래 그런건지는 잘 모르겠내요..)

굳이 변수에 따로 저장하지 않아도 파란색으로 표시된 부분에 바로 $args를 입력하셔도 되지 않을까 싶습니다.

이렇게 간단한거였는데 정작 저는 꽤 긴 시간을 검색을 해서 찾았내요..

아마 조금 더 수정을 하면 한 개의 인자값이 아니라 여러 개의 인자값도 파워쉘로 넘겨줄 수 있지 않을까 싶습니다.

어쨌든 이렇게 작성을 하고 작업 스케줄러에 배치파일을 등록하면 주기적으로 파일내용을 치환할 수 있습니다 ~

아, 그리고 보라색으로 표시된 부분은 리디렉트로 파일을 저장한건데 Out-File을 이용하시면 좀 더 저장할 때 파일에 대한 설정을 할 수 있습니다.

가령 파일 인코딩이라던지 그런 것들을 설정 할 수 있더라구요 ~

 

(치환 내용이 저렇게 지저분한건 .. 아시는분은 아시겠지만 robocopy 로그를 영어로 변환하는 내용입니다.. 시간이 없어 급히 저렇게 만들었지만 혹시 robocopy 한글 Windows에서 영어로 로그 남게 하는거 아시는분은 연락좀 주세요 ㅠㅠ)

' 2016년 이전 > PowerShell' 카테고리의 다른 글

PowerShell로 텍스트 치환하기  (0) 2014.01.22

간단하게 어떤 텍스트 파일 내에 있는 문자나 문자열을 치환하고 싶을 때 사용하면 될 것 같습니다.

 

대상 텍스트 파일 : Replace_text.txt

Replace_text.txt 파일 내용

 

 

테스트할 파일의 내용을

'문자'는 텍스트로

'1'은 A로

'4'는 D로

바꾸겠습니다.

 

우선 PowerShell에서 $replace 라는 변수에 파일 내용을 넣습니다.

(사진 2번 째 줄에 있는 echo는 입력해도, 안해도 변수값이 출력되내요..)

 

그리고 이제 저장된 값을 치환하고 파일을 저장합니다.

 

 

치환된 파일의 내용

 

 

아주 간단하게 치환이 끝났습니다.

단지 변수명 뒤에 -creplace 라는 옵션만 주면 손 쉽게 치환이 가능합니다.

좀 더 테스트해본 결과 -creplace 옵션을 많이 사용해도 상관이 없는듯 합니다.

그리고 당연하겠지만 한글<->영어 치환도 가능합니다..(전 한영 전환 때문에 치환하는법을 찾다가 알게 됬내요..)

저 한 줄을 이용해서 PowerShell 스크립트를 만들고 Batch File과 작업스케줄링을 활용해서 주기적으로 치환작업도 가능합니다.

그 내용은 나중에 다시 올리겠습니다.

 

첫 번째 명령줄 내용

$replace=get-content C:\가져올경로\파일명

두 번째 명령줄 내용

$replace -creplace '문자','텍스트' -creplace '1','A' -creplace '4','D' >> C:\새로저장할경로\Replace_text2.txt

----------------------------------- 추가 내용 -----------------------------------------

위 두 번째 명령줄 처럼 리디렉션으로 파일을 생성하면 인코딩이 유니코드로 지정되어 파일이 생성됩니다.

적절하게 파일 인코딩을 선택하고 싶으시다면 리디렉션을 이용하기보단 Powershell에서 제공되는

out-file 명령을 통해 생성하면 인코딩을 선택할 수 있습니다.

$replace -creplace '문자','텍스트' -creplace '1','A' -creplace '4','D' | out-file -encoding ascii C:\저장할경로Replace_text2.txt

 

 

 

+ Recent posts