윈도우 배치 스크립트 질문 드립니다.

   조회 5950   추천 0    

script.bat (1.1K), Down : 3, 2015-10

윈도우 서버용 일일점검 배치 스크립트를 짜던중 막히는 부분이 있어 문의 드립니다.
 
일단 "OS 정보""메모리 갯수"에 대한 정보를 텍스트 파일로 저장하는 스크립트 입니다.
 
명령어는 2가지를 사용했습니다.
1. wmic os get Caption, CSDVersion, Version >> C:\SECURITY\Result.txt
2. wmic memorychip get BankLabel  >> C:\SECURITY\Result.txt

 
위 명령어를 기반으로 스크립트를 작성했는데 내용은 아래와 같습니다.
@echo off
set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
set HOUR=%time:~0,2%
set MIN=%time:~3,2%
set DATETIME=%YEAR%%MONTH%%DAY%_%HOUR%%MIN%
echo *************************************************************************** >> C:\%datetime%.txt
echo 1.1. OS Informatiom >> C:\%datetime%.txt
echo *************************************************************************** >> C:\%datetime%.txt
wmic os get Caption, CSDVersion, Version >> C:\%datetime%.txt
echo.>> C:\%datetime%.txt
echo *************************************************************************** >> C:\%datetime%.txt
echo 1.2. Memorychip Information >> C:\%datetime%.txt
echo *************************************************************************** >> C:\%datetime%.txt
wmic memorychip get BankLabel >> C:\%datetime%.txt
for /f "tokens=2 delims==" %%a in ('wmic MEMORYCHIP get BankLabel /format:list') do set BankLabel=%%a
echo %BankLabel% >> C:\%datetime%.txt
echo.>> C:\%datetime%.txt

그런데 위 스크립트 내용을 배치파일(*.bat)작성해서 돌려보내 결과파일(*.txt)에 "nul" 이 삽입되어 결과가 저장되는데...
결과에서 nul 을 제거해여 저장할려면 어떻게 해야 할까요?


구글을 뒤져보다가 지쳐서 질문 올립니다.
아시는분 도움 부탁 드립니다...ㅠ.ㅜ;;
짧은글 일수록 신중하게.
2015-10
널문자를 치환해보세요.
바꿀단어부분이 비어있으면 지우는거구요, 특정문자를 넣으면 치환되는겁니다.

http://withserver.tistory.com/entry/notepad-%EC%97%90%EC%84%9C-%EB%B9%88%EC%A4%84%EC%A0%9C%EA%B1%B0-%EB%B0%8F-%EA%B3%B5%EB%B0%B1%EC%A1%B0%EC%A0%88%EC%A0%9C%EA%B1%B0%EB%B0%A9%EB%B2%95
2015-10
그러고보니 쉘에서의 치환을 원하시는거죠?
도스에서는 좀 어렵고, 서버라니 파워쉘에서 가능한듯합니다.
https://social.technet.microsoft.com/Forums/sharepoint/en-US/1df1ae68-4425-438f-8f0c-727ad70a1576/replacing-null-characters-in-file?forum=winserverpowershell

아니면 cygwin 깔아서 sed로 치환해도 좋습니다.
태무진 2015-10
아래 처럼 테스트 한번 해보세요.

@echo off
set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
set HOUR=%time:~0,2%
set MIN=%time:~3,2%
set DATETIME=%YEAR%%MONTH%%DAY%_%HOUR%%MIN%
echo *************************************************************************** >> C:\SECURITY\%datetime%.txt
echo 1.1. OS Informatiom >> C:\SECURITY\%datetime%.txt
echo *************************************************************************** >> C:\SECURITY\%datetime%.txt
wmic /output:z.txt os get Caption, CSDVersion, Version >> C:\SECURITY\%datetime%.txt

type z.txt >> C:\SECURITY\%datetime%.txt


echo.>> C:\SECURITY\%datetime%.txt

echo *************************************************************************** >> C:\SECURITY\%datetime%.txt
echo 3.2. Memorychip Information >> C:\SECURITY\%datetime%.txt
echo *************************************************************************** >> C:\SECURITY\%datetime%.txt
wmic  /output:z.txt  memorychip get BankLabel >> C:\SECURITY\%datetime%.txt

type z.txt >> C:\SECURITY\%datetime%.txt


for /f "tokens=2 delims==" %%a in ('wmic MEMORYCHIP get BankLabel /format:list') do set BankLabel=%%a
echo %BankLabel% >> C:\SECURITY\%datetime%.txt
echo.>> C:\SECURITY\%datetime%.txt
pause
린드버그 2015-10
저도 좀 찾아봤습니다. 찾고 와보니, 위 태무진님 답변에도 비슷한 내용이 있네요.

http://stackoverflow.com/questions/10210553/cmd-is-somehow-writing-chinese-text-as-output

일단 위 링크구요.. 첫번째 답변 말고 두번째 답변에 A와 B 두 가지 방법이 제시되어 있는데, 그 중 B가 위 태무진님처럼 별도의 임시파일로 일단 받고 그걸 다시 type 해서 최종 결과 파일에 덧붙이는 식입니다.

근본적인 원인은, 기본적으로 명령창에서의 출력은 ANSI인데 WMIC의 출력이 리다이렉트될 때 유니코드로 출력이 된다는 거.. 그래서 최초 echo로 출력된 문자들이 ANSI코드인데 WMIC의 리다이렉트된 출력이 유니코드로 들어오니 하나의 파일 안에서 코드가 섞여서 그렇게 되는 거네요.

한편, A방법은 애초에 명령창 자체를 유니코드로 띄워서, WMIC 외의 다른 출력도 전부 유니코드로 해버리는 방법이네요. ㅎㅎ 즉, 파일 자체가 처음부터 유니코드로 생성되므로 크기는 커지지만, 일단 코드가 통일되어 있으니 보는데는 문제가 없다는 거죠. (바이너리 에디터로 보면 각 문자가 2바이트씩 잡혀 있는 게 보이겠지만요. ㅎㅎ)
송진홍 2015-10
답변 달아주신 모든분들 정말로 감사드립니다.

태무진님께서 흰트를 주셔서 임시파일을 생성한 후 type을 이용해 임시파일 내용을 결과파일에 덧붙이는 식으로 문제를 해결하였습니다.
다시한번 감사의 말씀드립니다.^^


QnA
제목Page 2670/5728
2014-05   5256194   정은준1
2015-12   1781161   백메가
2015-10   5273   김재헌
2015-10   6324   미니TM
2015-10   7332   r이승원r
2015-10   6254   FreeBSD
2015-10   14184   deegie
2015-10   4140   배병렬
2015-10   3911   미니TM
2015-10   20966   천외천oo노…
2015-10   5951   송진홍
2015-10   3915   AI입니다
2015-10   6237   방o효o문
2015-10   4409   김진영JK
2015-10   7504   심우철
2015-10   4188   차평석
2015-10   4396   김건우
2015-10   5298   2CPU최주희
2015-10   4827   파렌
2015-10   3618   김건우
2015-10   4969   죠슈아
2015-10   3948   아롱사태