<POWERSHELL 활용>
제 파워쉘 버전은 5.1버전입니다

## GET-...
" PROCESS 프로세스 정보를 확인합니다
(gps)# get-process

" PROCESS [s] 로 시작하는 모든 프로세스를 확인합니다
# get-process [s]*

" PROCESS 어떤 프로세스가 700개 이상의 핸들을 점유하고 있는 지 확인합니다
# get-process | where handles -gt 700 | sort cpu -descending

" PROCESS workingset 메모리가 100M 이상인 프로세스를 확인합니다
# get-process | where-object {$_.workingset -gt 100mb} | sort pm -descending

" PROCESS 프로세스 중 마지막 10개만 정렬해서 htm 문서화합니다
# get-process | select-object -last 10 | select-object name, handle, cpu, id, workingset | convertto-html | out-file c:\process.htm

" PROCESS 프로세스 이름이 sv로 시작하는 프로세스를 확인합니다
# get-process | where ProcessName -Like sv*

" PROCESS gvim 프로세스의 자세한 정보를 확인합니다
# get-process gvim | format-list *

"" PROCESS wmi*로 시작하는 프로세스를 전부 종료합니다
# get-process | where processname -like wmi* | kill

"" PROCESS vmw*로 시작하는 프로세스를 전부 종료합니다
# get-process | where processname -like vmw* | stop-process -Force






"" SCHEDULEDTASK ashley라는 이름의 예약작업 정보를 확인합니다
# get-scheduledtask | where taskname -like *ashley* | fl *





"WMIOBJECT win32_pingstatus를 이용해 IP를 확인합니다
# get-wmiobject win32_pingstatus -filter "address='localhost'"

"" WMIOBJECT win32_logicaldisk를 이용해 c:\ 정보를 확인합니다
# get-wmiobject win32_logicaldisk

"" WMIOBJECT 설치된 프로그램 중 sql이 포함된 프로그램을 확인합니다
# get-wmiobject win32_product | where-object -filterscript { $_.tostring() -match "sql"}








" CHILDITEM dir 과 비슷한 명령어입니다
(dir)# get-childitem

"" CHILDITEM 현재 폴더에서 *.html 파일 중 100mb 이하인 파일을 모두 삭제합니다
# get-childitem .\* -include *.html | where-object -filterscript { $_.length -lt 100mb} | remove-item -force

"" CHILDITEM 해당 폴더에서 .jpg 파일을 전부 찾은 다음 이름순에 따라 겹치는 항목 없이 정렬합니다
# get-childitem c:\users\gyurs\desktop\edward\ -include *.jpg -recurse | sort-object -property directoryname -unique

"" CHILDITEM 현재 폴더에 있는 .jpg 파일들 중 20160101 이후에 수정되거나 생성된 파일만 해당 경로로 강제로 복사합니다 (백업시 사용)
# get-childitem .\* -recurse -include *.jpg | where-object {($_.lastwritetime -gt 2016-01-01) -and ($_.creationtime -gt 2016-01-01)} | copy-item -destination c:\users\gyurs\downloads\ -force




" PSDRIVE 현재 드라이브 정보를 조회할 수 있습니다
# get-psdrive


" COMMAND 특정 명령어의 커맨드 리스트를 보여줍니다
# get-command get-member


" COMMAND form이라는 동사 커맨드가 들어간 커맨드를 찾을 때 사용합니다
# get-command -verb *form*


" HELP 특정 커맨드의 사용법을 알려줍니다
# get-help get-member


" HELP GET-MEMBER의 상세한 설명을 확인합니다
# get-help get-member -detailed


" HELP GET-MEMBER의 모든 설명을 봅니다
# get-help get-member -full



" ALIAS 모든 별칭의 리스트를 볼 수 있습니다
# get-alias



" DATE 현재의 시간을 구합니다
# get-date



" ITEM c:\Windows 폴더에 가장 최근 접근한 시간을 보여줍니다
# (get-item C:\Windows).LastAccessTime

" ITEM c:\Windows\의 모든 파일을 w를 제외하고 보여줍니다
# get-item c:\Windows\*.* -exclude w*




" HISTORY 지금까지 입력한 command의 목록을 볼 수 있습니다
# get-history



" EVENTLOG 이벤트로그 목록을 확인합니다
# get-eventlog -list

" EVENTLOG 이벤트로그를 20160805 이후에 생성된 installer 구문이 들어간 로그를 10개만 확인합니다
# get-eventlog -logname application -message *installer* -after 2016-08-05 -newest 10

"" EVENTLOG 이벤트로그(6009)로 시스템 부팅 시 발생한 로그를 확인합니다
# get-eventlog system | Where-Object {$_.eventid -eq 6009} | more

"" EVENTLOG 이벤트로그를 통해 에러가 났던 로그를 확인합니다 (format-table형식으로)
# get-eventlog system | Where-Object {$_.entrytype -match "error"} | format-table eventid, source, timewritten -autosize | more






"" SERVICE 현재 running 상태인 서비스 목록을 확인합니다
(gsv)# get-service | where-object {$_.status -eq "running"}

"" SERVICE running 서비스 중에서 sql 글자가 들어간 서비스를 검색합니다
# get-service | where-object {$_.status -eq "running"} | where Name -like *sql*

"" SERVICE sql*로 시작하는 프로세스 중 동작 중인 프로세스를 종료합니다
# get-service | where Name -like sql* |where status -eq running | Stop-Service -Force




"" APPXPACKAGE 파워쉘을 이용해 microsoft EDGE를 설치합니다
# get-appxpackage -allusers -name microsoft.microsoftedge | foreach {add-appxpackage -disabledevelopmentmode -register "$($_.installlocation)\appxmanifest.xml" -verbose}

"" APPXPACKAGE get started 윈도우 10 app을 삭제합니다
# get-appxpackage *getstarted* | remove-appxpackage






## STOP-...
" PROCESS lmgrd 프로세스를 종료하면 어떤 결과가 발생할 지 예측합니다
# stop-process -name lmgrd -whatif

" PROCESS lmgrd 프로세스를 종료할 때 확인 프롬프트를 띄웁니다
# stop-process -name lmgrd -confirm





## SET-...
" EXECUTIONPOLICY 스크립트 실행 보안을 해제합니다
# set-executionpolicy remotesigned


" EXECUTIONPOLICY 공유폴더에 위치한 서명안된 스크립트를 실행합니다
# set-executionpolicy unrestricted





## EXPORT-..., IMPORT-...
" CSV process 목록을 csv로 저장시킨 후 정렬해서 불러옵니다
# ps | export-csv pslist.csv
# import-csv pslist.csv | select-object starttime | sort processname -Descending




## NEW-...
" ITEM mkdir과 비슷하게 폴더를 만듭니다
(ni)# new-item -type directory -path "path_name"

"" ITEM 새로운 txt 파일을 내용을 갖춘채로 만듭니다
# new-item .\new_file.txt -type file -force -value "this is text added to the file"

" ITEM 디렉토리를 만들면 어떤 결과물이 나올지를 확인합니다(whatif)
# new-item -path c:\ -name dirtest -itemtype directory -whatif




## REMOVE-...
"" ITEM alias로 등록되어 있는 get_event를 지웁니다
# remove-item alias::get_event





## .NET FRAMEWORK
" MATH::POW .net에서 함수를 가져와 2의 3승을 계산합니다
# [math]::pow(2,3)




=================================================================================
<POWERSHELL 스크립트>

## show_uptime.ps1 { $Machine }

" 지정 한 서버의 uptime 을 출력합니다.
param([string] $Machine = ".")
" Win32_OperationSystem 오브젝트를 변수에 저장.
$OS = Get-WmiObject Win32_OperatingSystem -ComputerName $Machine
" 시스템 관리용 시간 값을 일반적인 시간 값으로 변경하여 변수에 저장.
$LastBootUpTime = [System.Management.ManagementDateTimeconverter]::ToDateTime($OS.LastBootUpTime)
" 현재 시간을 구함.
$Now = Get-Date
" Uptime 계산.
$UpTime = $Now - $LastBootUpTime
" 각 값을 계산하여 string 형식으로 변환 후 출력
[string]$UpTime.Days + " Days, " + [string]$UpTime.Hours + " Hours, " + [string]$UpTime.Minutes + " Minutes."





=================================================================================
<$ 변수의 활용>

## $ Variables
" PowerShell 버전을 확인할 수 있습니다 
# $PSVersionTable 

" ComputerName 컴퓨터 이름을 확인합니다 
# $env:computername 



## EXAMPLES
# 1
$a = 5
$a.gettype() " .net 내장타입을 알 수 있습니다
$a.gettype().name " .net의 내장타입을 알 수 있습니다2


# 2 (iexplore 프로세스를 여는 예제코드)
$ie = new-object -comobject "internetexplorer.application"
$ie | get-member -membertype method
$ie.navigate("http://www.naver.com")
$ie.visible = $true


# 3 (%userprofile% 로 이동합니다)
cd $env:userprofile




# 4 (schtasks에서 ashley 글자가 들어간 예약내용을 확인합니다)
$tasks = schtasks.exe /query /fo csv | ConvertFrom-Csv
$tasks | Where-Object {$_.taskname -like "*ashley*"}




=================================================================================
<POWERSHELL 함수>

## Variable Functions

"" 핑을 날려 서버상태를 확인합니다
# pingsrv "ip_adrress"

function pingsrv ([string] $srv )
{
$wmiobj=get-wmiobject win32_pingstatus -filter "address='$srv'"
if($wmiobj.statuscode -eq 0)
{
write-host $srv "연결됐습니다!"
}
else
{
write-host $srv " 연결이안되네요!"
}
}


"" POWERSHELL 프롬프트 형식을 바꿉니다
# Prompt
function prompt
{
$historyList = @(get-history)
if($historyList.count -gt 0)
{
$lastcommand = $historyList[$historyList.count - 1]
$lastid = $lastcommand.id }
write-host ("PS(" + ($lastid+1) + ") " + $(get-location) +">") -nonewline
return " "
}

Posted by jjblaid

<WMIC 명령어 활용>

' OS 관련정보 출력 (간략하게)
wmic os list brief /format:list  
 
' OS 정보를 html 형식으로 출력해서 확인합니다
wmic /output:osinfo.html os get /format:hform  

'' OS 시스템을 종료하거나 리부팅합니다 
wmic os where "status='ok'" call shutdown
wmic os where "status='ok'" call reboot


' CPU 관련정보 출력 (간략하게)
wmic cpu list brief /format:list


' LOGICALDISK 관련정보를 확인합니다
wmic logicaldisk where drivetype=3 get name,size,freespace,systemname /format:list  


' VOLUME 볼륨 정보를 확인합니다
wmic volume list brief /format:list 



'' LOGON 모든 로그온 세션의 목록을 확인합니다
# wmic logon list full /format:list | more




'' ENVIRONMENT 환경설정 목록을 확인합니다
# wmic environment list full /format:list | more




'' DESKTOP 데스크탑 화면 설정을 확인합니다
# wmic desktop list full /format:list | more 




' SERVICE 정보를 확인합니다
wmic service list brief /format:list


' SERVICE 정보를 html table 형식으로 출력해서 확인합니다
wmic /output:service.html service list brief /format:htable 
 
'' SERVICE %ora% 구문이 들어가있는 이름의 서비스를 확인합니다
wmic service where "name like '%ora%'" list brief
 
'' SERVICE 특정 서비스를 시작하거나 중지합니다
wmic service where name="service_name" call startservice
wmic service where name="service_name" call stopservice




' COMPUTERSYSTEM 정보를 html 형식으로 출력해서 확인합니다
wmic /output:compsystem.html computersystem get /format:hform 


'  BIOS 컴퓨터 s/n 넘버 확인하기
wmic bios get serialnumber 


' MEMORYCHIP 메모리 확인하기
# wmic memorychip get banklabel, capacity


' PATH 프로세스 시작 (생성)시간 확인하기
wmic path win32_processor get numberofcores, numberoflogicalprocessors, processorid





' PROCESS processid가 7332인 프로세스의 정보를 간략하게 확인합니다
wmic process where processid=7332 list brief /format:list

' PROCESS 해당 프로세스를 종료합니다
wmic process where processid=7836 delete

' PROCESS 해당 프로세스를 디버깅합니다
wmic process where processid=5256 call attachdebugger

'' PROCESS 해당 cmd 명령을 실행합니다 
wmic process call create "cmd.exe /c ipconfig" >> result.txt

'' PROCESS iexplore.exe 를 종료합니다
wmic process where name="iexplore.exe" call terminate

'' PROCESS notepad.exe 의 우선순위를 64로 설정합니다 
wmic process where name="notepad.exe" call setpriority 64




'' CSPRODUCT 장비의 사양을 확인합니다
# wmic csproduct list brief /format:list



'' DISKDRIVE 디스크 모델명을 확인합니다 
# wmic diskdrive list brief /format:list



'' STARTUP 시작프로그램 목록을 확인합니다
# wmic startup list brief



'' PRODUCT 설치된 프로그램 리스트를 확인합니다
# wmic product get name 

'' PRODUCT  설치된 프로그램을 삭제합니다
# wmic product where name="Adobe Reader 9" call uninstall




'' USERACCOUNT 이름에 ad가 포함된 계정을 확인합니다
# wmic useraccount where "name like '%ad%'" list full

'' USERACCOUNT 관리자(administrator)의 이름을 edward로 바꿉니다
# wmic useraccount where name="administrator" call rename name="edward"



'' SYSDRIVER 시스템 드라이버를 간략하게 확인합니다
# wmic sysdriver list brief /format:list



---------------------------------------------------------------------------------------------------------
<Batch 스크립트>


'' OS, COMPUTERSYSTEM, SERVICE 관련 정보를 수집하는 스크립트입니다
'' .bat 파일로 저장하신 후 실행하시면 됩니다
# getsysteminfo.bat 

@echo off
if %1$==$ (
 rem use the localcomputername if nothing is specified
set computer=%computername%
) else (
rem use the computername passed as a parameter
set computer=%1
)
rem  Creating report for %computer%
set htmlfile=%computer%.html

rem redirect wmic output to NULL since we don't really need to see it
wmic OS get /format:hform   > "%htmlfile%"
wmic computersystem get /format:hform  >> "%htmlfile%"
wmic service where state="running" get caption,name,pathname,state,status,acceptpause,acceptstop,processid,systemname,startname  /format:htable >> "%htmlfile%"
wmic service where state="stopped" get caption,name,pathname,state,status,acceptpause,acceptstop,processid,systemname,startname  /format:htable >> "%htmlfile%"
wmic csproduct list brief /format:htable >> "%htmlfile%"
wmic cpu list brief /format:htable >>"%htmlfile%"
wmic diskdrive list brief /format:htable >>"%htmlfile%"
wmic logicaldisk list brief /format:htable >>"%htmlfile%"
wmic volume list brief /format:htable >>"%htmlfile%"
wmic NICCONFIG list brief /format:htable >>"%htmlfile%"


---------------------------------------------------------------------------------------------------------
<여러가지 옵션들>

# /format : csv, list ...

# list full, brief, free, status, system...

'' OS의 속성을 확인할 수 있습니다 (컬럼)
# wmic os get /?



---------------------------------------------------------------------------------------------------------
<WMI란 무엇인가?>

## Windows Management Instrumentation 
     # WMI는 네트워크에서 관리정보를 액세스하고 공유하는 표준을 만들기 위해 Microsoft에서 구현한 프로그램입니다
     
     # WMIC(Windows Management Instrumentation Command-line) 이란
          # WMI에 대한 간단한 명령줄 프로그램입니다

Posted by jjblaid

<CMD 명령어 모음>
모든 명령어는 win + R키나 cmd 명령창에서 실행하실 수 있습니다
아랫쪽에 SYSINTERNALS 도구와 NIRSOFT 도구, 기타 명령어 목록도 있습니다

$$ CMD 명령어
$ .MSC

eventvwr.msc(이벤트뷰어)
gpedit.msc(로컬 그룹 정책 설정)
secpol.msc(로컬 보안 설정)
wmimgmt.msc(WMI 관리자)
certlm.msc (인증서관리자 - 로컬컴퓨터)
certmgr.msc(인증서관리자 - 현재사용자)
fsmgmt.msc(공유폴더)
lusrmgr.msc(로컬 사용자 및 그룹)
printmanagement.msc(프린터 관리)
wf.msc(방화벽고급관리자)
devmgmt.msc (장치 관리자)(= hdwwiz.cpl)
compmgmt.msc(컴퓨터관리)
perfmon.msc(성능모니터)
taskschd.msc(작업 스케쥴러)
comexp.msc (구성요소 COM,COM+,DCOM 서비스)(= dcomcnfg.exe)








$ .EXE

$ type.exe (파일 내용 확인)(리눅스 cat과 같은 명령어)
        # edward.txt 파일의 내용을 cmd창에 표시합니다
        $ type edward.txt



$ takeown.exe (파일 권한 부여)
        # 20130202.png 파일의 소유자를 현재 계정으로 설정합니다
        $ takeown.exe /f C:\Users\gyurs\Downloads\20130202.png

        # 20130202.png 파일의 소유자를 Administrators 그룹으로 넘깁니다
        $ takeown.exe /f C:\Users\gyurs\Downloads\20130202.png /A

        # Downloads 폴더 안에 있는 모든 파일의 권한을 Administrators 그룹으로 넘깁니다
        # Administrators 그룹으로 넘김, 모든 하위파일까지 적용, 중간에 읽기 권한없는 폴더를 만나도 권한을 부여하고 계속 실행
        $ takeown.exe /f C:\Users\gyurs\Downloads\* /A /r /d y





$ attrib.exe (파일 속성 설정 도구)
        # edward.txt 파일의 속성을 숨김, 읽기전용, 시스템파일로 변경합니다
        $ attrib.exe +h +r +s edward.txt

        # edward.txt 파일의 숨김, 읽기전용, 시스템파일 속성을 해제합니다
        $ attrib.exe -h -r -s edward.txt

        # 현재 cmd창이 가리키는 폴더와 하위파일,폴더를 전부 숨김, 읽기전용, 시스템파일로 변경합니다
        $ attrib.exe +h +r +s /s /d





$ icacls.exe (파일의 사용권한 설정 도구)
        # test.txt 파일의 권한 중 edward 계정이 파일의 모든 권한을 획득합니다
        $ icacls.exe C:\Users\edward\Downloads\test.txt /grant edward:F

        # 20130202.png파일의 권한 중 edward 계정의 모든 접근을 거부합니다 (쓰기, 읽기, 수정,삭제...)
        $ icacls.exe C:\Users\edward\Downloads\20130202.png /deny edward:F

        # 20130203.png 파일의 권한 상속을 제거합니다
        $ icacls.exe C:\Users\edward\Downloads\20130203.png /inheritance:R

        # fire.txt 파일의 권한 중 edward 계정이 가지고 있는 모든 권한을 제거합니다 (edward 계정은 해당 파일에 어떤 수정도 못합니다)
        $ icacls.exe C:\Users\edward\Downloads\fire.txt /remove:g edward

        # fire.txt 파일의 권한 중 edward 계정이 가지고 있는 모든 접근 제한들을 제거합니다
        $ icacls.exe C:\Users\edward\Downloads\fire.txt /remove:d edward

        # Downloads 파일 안에 있는 모든 파일과 폴더를 edward는 접근할 수 없게 합니다
        $ icacls.exe C:\Users\edward\Downloads\* /deny edward:F /T /C

        # 모든 변경사항을 DEFAULT 값으로 되돌립니다
        $ icacls.exe C:\Users\edward\Downloads\* /reset

        # modify.txt 파일의 권한을 확인합니다
        $ icacls.exe C:\Users\edward\Downloads\modify.txt

        # modify.txt 파일의 권한을 edward 계정에게 오직 읽기 권한만 줍니다 (쓰기, 삭제 등등 불가)(상속이 안되어있는 경우에만)
        $ icacls.exe C:\Users\edward\Downloads\modify.txt /grant edward:R








$ ver.exe (윈도우 버전 확인)




$ findstr.exe (문자열 검색)
        # create 구문이 oracledatabase_admin2.sql 파일안에 있는지 검색합니다
        # 라인수, 파일이름, 대소문자를 구분없이
        $ findstr.exe /n /s /i create oracledatabase_admin2.sql

        # C드라이브의 모든 파일 중 create 구문이 들어간 파일을 검색합니다
        $ findstr.exe /n /s /i create c:\*

        # gyurs 유저 폴더 안에서 create 구문을 검색하고 결과를 result.txt에 저장합니다
        $ findstr.exe /n /s /i create c:\users\gyurs\* > result.txt






$ w32tm.exe (Windows Time 서비스 설정)
        # 현재의 TimeZone을 확인합니다
        $ w32tm.exe /tz

        # 현재 로컬컴퓨터의 시간을 동기화합니다
        $ w32tm.exe /resync

        # 1601년 1월 1일부터 지난 시간(초)를 계산해 날짜를 표시해줍니다(NT 시스템 시간)
        $ w32tm.exe /ntte 131028948948477834

        # 1900년 1월 1일부터 지난 시간(초)를 계산해 날짜를 표시해줍니다 (NTP 시스템 시간)
        $ w32tm.exe /ntpte 3763314900





$ schtasks.exe (윈도우 스케쥴러)(예약작업)(taskschd.msc로 쉽게 확인가능합니다)
        # 현재 등록된 모든 예약작업을 확인합니다
        $ schtasks.exe /query /fo LIST /v | more

        # Ashley라는 이름으로 매주 월요일 아침 8시마다 시스템계정으로 calc.exe 프로그램을 실행합니다
        $ schtasks.exe /create /tn "Ashley" /tr "c:\windows\system32\calc.exe" /sc weekly /d MON /st 08:00:00 /ru "System"

        $ ashley2라는 이름으로 1분마다 notepad.exe 프로그램을 최고권한으로 실행합니다
        $ schtasks.exe /create /tn ashley2 /tr "c:\windows\system32\notepad.exe" /sc minute /mo 1 /rl highest

        # ashley3라는 이름으로  최고권한으로 실행해서1분마다 hello라는 메세지창을 출력합니다
        $ schtasks.exe /create /tn ashley3 /tr "c:\windows\system32\msg.exe * /v /w hello" /sc minute /mo 1 /rl highest

        # ashley라는 이름의 예약작업을 강제로 삭제합니다
        $ schtasks.exe /delete /tn ashley /f

        # 생성한 ashley라는 예약작업의 계정 (SID)를 확인합니다
        $ schtasks.exe /ShowSid /TN "\ashley





$ winmgmt.exe (WMI 관리도구)
$ color.exe (프롬프트 색상을 바꿉니다)
        # 흰 색상에 검정글씨로 바꿉니다
        $ color f0


$ fsquirt.exe (블루투스를 이용한 파일 송수신)
$ getmac.exe (MAC주소를 출력하는 프로그램)
        # MAC주소를 자세히 확인합니다
        $ getmac.exe /v





$ cls.exe (cmd창 깨끗하게 정리해주는 도구)




$ nbtstat.exe (NETBIOS 프로토콜 확인)
        # 현재 캐시에 저장된 NBT 상태를 확인합니다
        $ nbtstat.exe -c

        # 저장된 NBT 세션들의 목록을 보여줍니다
        $ nbtstat.exe -S





$ label.exe (디스크 볼륨레이블 지정)
$ pnputil.exe (pnp 디바이스 열거/설치/삭제)
        # c:\drivers에 모든 패키지를 추가합니다
        $ pnputil.exe -a c:\drivers\*.inf
        
        # 패키지를 열거합니다
        $ pnputil.exe -e


$ psr.exe (단계레코더)
$ qprocess.exe (tasklist의 단순형 프로그램)
$ launchtm.exe (작업관리자)(taskmgr.exe와 동일합니다)
$ makecab.exe (cab 파일 만들기)
$ narrator.exe (음성지원 나레이터)
$ ping.exe (ping을 날리는 프로그램)
$ pathping.exe (ping + 패킷이 전달되는 루트를 추적합니다)
$ ftp.exe (ftp 클라이언트 프로그램)
$ useraccountcontrolsettings.exe (UAC 세팅)
$ bdehdcfg.exe (bitlocker 드라이브 준비도구)
$ dfrgui.exe (디스크 조각 모음)
$ changepk.exe (윈도우즈 제품키 입력)
$ certutil.exe (인증서 유틸리티)
$ diskpart.exe (디스크 파티션 설정)
$ eventcreate.exe (사용자 지정 이벤트 생성)
$ chkntfs.exe (디스크검사 예약)
        $ chkntfs.exe c: /c

$ chkdsk.exe (디스크 검사)
        # D드라이브를 검사하고 에러가 나면 복구합니다
        $ chkdsk.exe D: /f /r



$ sfc.exe (시스템 파일 복구)
        # 시스템파일을 검사하고 이상이 있으면 복구합니다
        $ sfc.exe /scannow
        # 시스템파일을 검사만 합니다
        $ sfc.exe /verifyonly



$ certreq.exe (요청을 인증기관으로 제출하는 유틸리티)
$ mrt.exe(악성소프트웨어 제거도구)
$ cprintui.exe(프린터 UI)
$ sigverif.exe(File Signature Verification Tool)
$ resmon.exe(리소스 모니터)
$ robocopy.exe (견고한 파일복사)
        # desktop에 있는 파일들을 c:\test에 복사합니다
        # 비어있는 디렉토리 제외, Multi Thread 20개 사용, 복사실패 시 1번 재시도, 대기시간 1초, 7개의 하위디렉토리 복사
        $ robocopy.exe C:\Users\edward\Desktop c:\test /S /MT:20 /R:1 /W:1 /LEV:7



$ xcopy.exe (파일복사 프로그램)
        # deskop에 있는 파일들을 c:\test에 복사합니다
        # 하위 디렉토리, 오류가 생겨도 계속 복사, 조용히 복사, 겹치는 파일 묻지 않고 복사, 특성을 복사, 숨겨진파일과 시스템파일 모두 복사합니다
        $ xcopy.exe C:\Users\edward\Desktop c:\test /s /c /q /y /k /h
        # WebcacheV01.dat 파일을 바탕화면에 복사합니다 (taskhost, dllhost 프로세스를 먼저 종료해야합니다)
        $ xcopy.exe /s /h /i /y "%Localappdata%\Microsoft\Windows\Webcache\*.dat" %userprofile%\desktop



$ copy.exe (간단한 파일복사)
$ charmap.exe(문자표)
$ wbemtest.exe(WMI 테스터)
$ magnify.exe(돋보기)
$ setx.exe
        # path 환경변수를 영구적으로 설정합니다
        $ setx.exe path "%path%;경로" /m  

$ shutdown.exe (컴퓨터 종료)
        # 컴퓨터를 바로 강제로 종료합니다
        $ shutdown.exe /s /t 0 /f

        $ shutdown.exe /r /t 0 /f
        $ shutdown.exe /l


$ tlntsvr.exe (텔넷서버실행) (추가기능 설치에서 telnet을 설치해야합니다)
$ tlntadmn.exe (텔넷서버관리) (윈도우8부터는 없어진듯합니다)
$ wbadmin.exe(윈도우 백업관리자)
$ fsutil.exe(디스크 구성 도구)
$ fltmc.exe(필터 드라이버 로딩 언로딩 목록 보기)
$ cleanmgr.exe(디스크 정리)
$ sndvol.exe (스피크 볼륨 콘트롤)
$ wevtutil.exe(이벤트로그 수집도구)
$ slidetoshutdown.exe (화면을 슬라이드해서 종료)
$ esentutl.exe(서버데이터베이스 관리 도구)
        # 해당 .dat 파일의 상태를 확인합니다
        $ esentutl.exe /mh WebCacheV01.dat
        # 해당 .dat 파일이 dirty shutdown 상태이면 clean shutdown 상태로 고쳐줍니다
        $ esentutl.exe /p WebCacheV01.dat



$ mmc.exe (콘솔 루터)
$ msconfig.exe (시스템 구성요소 유틸리티)
$ mstsc.exe (원격 데스크톱 연결)
$ odbcad32.exe(odbc 데이터 원본 관리자)
$ wuapp.exe(윈도우 업데이트)
$ dxdiag.exe (다이렉트X 정보)
$ msinfo32.exe (시스템 정보)
$ slui.exe (라이센스 등록)
$ slmgr.exe (라이센스 등록2)
        $slmgr.exe /ipk /dlv /ato


$ osk.exe (화상 키보드)
$ wmplayer.exe (미디어 플레이어)
$ mkdir.exe (디렉토리 만들기)
$ mklink.exe (바로가기 폴더 만들기)
        # aaa 폴더의 바로가기 폴더 bbb를 만듭니다
        $ mklink.exe /d c:/bbb c:/aaa


$ taskmgr.exe (작업 관리자)
$ cmd.exe (명령 프롬프트)
$ explorer.exe (윈도우 탐색기)
$ rstrui.exe(시스템복원)
$ systeminfo.exe(시스템정보)
$ taskkill.exe (프로세스 종료)
        # 메모장 프로세스를 강제로 자식노드까지 전부 종료합니다
        $ taskkill.exe /f /im "notepad.exe" /t

        # PID가 1000보다 큰 모든 프로세스들을 종료합니다
        $ taskkill.exe /fi "pid gt 1000" /f




$ tasklist.exe (프로세스 목록)
       # svchost.exe 프로그램의 서비스목록을 확인합니다 
       $ tasklist /svc /fi "imagename eq svchost.exe" 

        
       $ tasklist.exe /svc /fi "services eq <servicename>"
     
       $ tasklist.exe | find /i "explorer"

       # tasklist.exe 프로그램이 사용하는 dll 목록을 확인합니다
       $ tasklist.exe /m /fi "imagename eq tasklist.exe"




$ timeout.exe (지정된 시간을 기다리는 프로그램)
        $ timeout.exe /t 100 /nobreak

$ tskill.exe (간단한 프로세스 종료 프로그램)
$ systempropertiesadvanced.exe (시스템속성 - 고급)
$ systempropertiesdataexecutionprevention.exe (시스템속성 - 데이터실행방지 dep)
$ systempropertiescomputername.exe (시스템속성 - 컴퓨터이름)
$ systempropertieshardware.exe (시스템속성 - 장치관리자)
$ systempropertiesperformance.exe (시스템속성 - 성능옵션)
$ systempropertiesremote.exe (시스템속성 - 원격)
$ gpupdate.exe(그룹 정책 업데이트)
        $ gpupdate.exe /force


$ cmdkey.exe(자격증명 저장 관리)
        $ cmdkey.exe /add:<targetname> /user:<username> /pass:<password>

$ find.exe (특정 문자열 찾기)
        # mysql_ed.sql 파일에서 create가 들어간 구문을 찾습니다
        $ find.exe mysql_ed.sql "create" /n /i

        # abc.txt 파일의 라인 수를 셉니다
        $ find.exe /c /v abc.txt ""

        # 현재 동작하는 프로세스 중 대소문자를 구분하지 않고 sql 글자가 들어간 구문을 검색합니다
        $ tasklist.exe | find.exe /i "sql"



$ optionalfeatures.exe(윈도우 기능 켜기/끄기)
$ forfiles.exe (하위파일까지 전체탐색)(루프돌리는 배치파일 만들 때 유용)
$ regedit.exe (레제스트리 GUI 편집도구)
$ regsvr32.exe (COM 모듈 등록/해제)
$ cleanmgr.exe(Disk Clean Up)
$ rundll32.exe
        # 절전 모드
        $ rundll32.exe powrprof.dll SetSuspendState 0,1,0
        # 환경 변수
        $ rundll32.exe sysdm.cpl EditEnvironmentVariables
        # 화면 잠금
        $ rundll32.exe user32.dll LockWorkStation
        # 자격증명 저장 관리
        $ rundll32.exe keymgr.dll KRShowKeyMgr


$ runas.exe (권한상승 후 프로그램 실행)
$ snippingtool.exe(캡처도구)
$ dcomcnfg.exe(구성요소 COM,COM+,DCOM 서비스)(=comexp.msc)
$ winver.exe(윈도우버전)
$ where.exe (Linux find와 비슷한 명령어, 검색명령어)
        # 바탕화면에서 edw로 시작하는 파일을 전부 검색합니다
        $ where.exe edw* /r c:\users\gyurs\Desktop\


$ control.exe (제어판)
$ sc.exe (서비스컨트롤 명령어)
$ powercfg.exe (전원옵션 명령어)
$ soundrecorder.exe (음성 녹음기)
$ reg.exe (레지스트리 추가/수정 명령어)
        # 해당 레지스트리 값을 추가합니다 (psexec을 사용하기 위해)
        $ reg.exe add hklm\software\microsoft\windows\currentversion\policies\system /v LocalAccountTokenFilterPolicy /t reg_dword /d 1 /f
        # UAC 세팅을 해제합니다 (재부팅 필요)
        $ reg.exe add hklm\software\microsoft\windows\currentversion\policies\system /v EnableLua /t reg_dword /d 0 /f
        # IPC$의 기본공유를 해제합니다
        $ reg.exe add hkey_local_machine\system\currentcontrolset\control\lsa\ /v RestrictAnonymous /t reg_dword /d 2 /f
        # ADMIN$, C$의 기본공유를 해제합니다
        $ reg.exe add hkey_local_machine\system\currentcontrolset\services\lanmanserver\parameters /v AutoshareWks /t reg_dword /d 0 /f


$ net.exe (네트워크 설정 명령어)

$ NET STATS
        # 시스템 마지막 부팅시간을 확인합니다
        $ net stats work

$ NET SHARE
        # IPC$ 자동공유를 중지합니다 (C$, ADMIN$도 삭제할 수 있습니다)
        $ net.exe share IPC$ /delete
        # IPC$ 자동공유를 다시 설정합니다
        $ net.exe share IPC$ /grant:gyurse,full

$ NET USER
        # ashley 라는 계정을 생성합니다. 비밀번호는 qwer1234 fullname은 Iron Man, comment는 hello guys, 계정은 활성화상태입니다
        $ net.exe user ashley qwer1234 /add /fullname:"Iron Man" /comment:"hello guys" /active:yes
        
        # ashley의 자세한 정보를 확인합니다
        $ net.exe user ashley

        # ashley 계정을 삭제합니다
        $ net.exe user ashley /delete

$ NET LOCALGROUP
        # ashleygroup 이라는 이름의 localgroup을 생성합니다 comment도 같이 생성합니다
        $ net.exe localgroup ASHLEYGROUP /add /comment:"here is ashley world"

        # ashley 계정을 ASHLEYGROUP 그룹에 추가시킵니다
        $ net.exe localgroup ASHLEYGROUP ashley /add

$ NET USE
        # localhost의 컴퓨터 자체에 계정명 ashley, 패스워드 qwer1234로 접속합니다 (사용자와 연결이 아닙니다)
        $ net.exe use \\localhost\IPC$ /user:ashley qwer1234

        # localhost의 share라는 폴더에 계정명/패스워드로 접속합니다
        $ net.exe use \\localhost\share /user:ashley qwer1234


$ NET TIME
        # localhost의 시간을 확인할 수 있습니다
        $ net time \\localhost




$ msg.exe (네트워크 사용자들에게 메세지 보내는 명령어)
        # 컴퓨터의 모든 사용자들에게 5초동안 유효한 hello guys 메세지를 보냅니다
        $ msg.exe * /v /time:5 hello guys

        # localhost의 모든 세션 사용자들에게 hello guys2 메세지를 보냅니다
        $ msg.exe * /server:localhost /v /w hello guys2



$ subst.exe (디렉토리, 주소를 가상 드라이브로 치환해주는 명령어)
        # c:\temp 경로를 X: 드라이브로 치환합니다
        $ subst.exe X: C:\temp\

        # X 드라이브에 접속합니다
        $ cmd> X:

        # 해당 치환경로를 삭제합니다
        $ subst.exe X: /d




$ netsh.exe (IP, 방화벽 등등 네트워크 설정 명령어 )

$ NETSH ADVFIREWALL (cmd> wf를 통해 확인할 수 있습니다)
        # 새로운 방화벽 허용룰을 추가합니다 이름은 TCP-445이고 tcp 445번 포트의 접속을 허용합니다
        $ netsh.exe advfirewall firewall add rule name="TCP-445" dir=in action=allow protocol=tcp localport=445

        # tcp-445라는 이름을 가진 방화벽 정책을 확인합니다
        $ netsh.exe advfirewall firewall show rule name="tcp-445"

        # 현재 방화벽 설정을 파일로 저장하고 나중에 가져올 수 있습니다
        $ netsh.exe advfirewall export c:\advfirewallpolicy.wfw
        $ netsh.exe advfirewall import c:\advfirewallpolicy.wfw

        # 현재 방화벽 설정을 볼 수 있습니다
        $ netsh.exe advfirewall firewall show rule name=all | more

        # 2000 - 3000 번 포트 접속을 막습니다
        $ netsh.exe advfirewall firewall add rule name="Block_2000_3000" dir=in action=block protocol=tcp localport=2000-3000


$ NETSH INTERFACE
        # 네트워크 인터페이스 목록을 확인합니다
        $ netsh.exe interface show interface

        # 모든 네트워크 인터페이스 목록을 확인합니다
        $ netsh.exe interface dump

        # 원격포트가 443번인 모든 ipv4 tcp 연결을 확인합니다
        $ netsh.exe interface ipv4 show tcpconnections remoteport=443

        # ipv4 프로토콜의 여러 매개변수들을 확인합니다
        $ netsh.exe interface ipv4 show global

        # 현재 네트워크카드의 IP 관련된 설정을 확인합니다
        $ netsh.exe interface ipv4 show config

        # IP를 DHCP로 설정합니다
        $ netsh.exe interface ip set address name ="Ethernet" source=dhcp
        $ netsh.exe interface ip set dns "Ethernet" dhcp



$ sihost.exe (explorer.exe 다시 시작하는 프로그램)

$ smartscreensetting.exe (smartscreen on/off 하는 명령어)

$ systemreset.exe (시스템초기화 명령어)

$ sdclt.exe (백업 & 복구 관리자)

$ quser.exe (현재 사용자 출력)

$ logoff.exe (현재 계정 로그오프)


$ dism.exe (배포 이미지 서비스 및 관리도구)
        # Winsxs 폴더를 정리합니다. 구성요소저장소에 있는 모든 구성요소의 교체된 버전이 제거됩니다
        $
dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase












$ .CPL (CONTROL PANEL 제어판)

$ powercfg.cpl(전원옵션)
$ firewall.cpl(방화벽 관리)
$ desk.cpl(디스플레이)
$ appwiz.cpl(프로그램추가/제거)
$ main.cpl(마우스)
$ mmsys.cpl(사운드 및 오디오장치)
$ hdwwiz.cpl (장치관리자)(= devmgmt.msc)
$ sysdm.cpl(시스템속성)
$ inetcpl.cpl(인터넷속성)
$ netplwiz.cpl(사용자계정2) (= control userpasswords2)
$ ncpa.cpl(네트워크 연결)
$ wscui.cpl(관리센터)
$ timedate.cpl(날짜 시간 속성)
$ control /name Microsoft.NetworkandSharingCenter(네트워크 공유센터)
$ control desktop(개인 설정)
$ control /name Microsoft.Troubleshooting(문제해결)
$ control userpasswords(사용자 계정)
$ control userpasswords2 (사용자계정2) (= netplwiz)
$ control printers(장치 및 프린터)
$ control folders(폴더옵션)
$ control keyboard(키보드 옵션)
$ control admintools(관리 도구)







$ 기본 명령어
$ dir (디렉토리 목록 확인)
        # 숨겨진 파일, 시스템 파일 등 모든 파일을 확인합니다
        $ dir /a
        # 디렉토리에 붙은 PROGRA~1 같은 별칭들을 확인합니다
        $ dir /x
        # 간단하게 이름만 확인합니다
        $ dir /b
        # 내컴퓨터의 모든 파일을 하위디렉토리까지 전부 확인해서 myallfiles.txt로 저장합니다 
        $ dir /s c:\ > myallfiles.txt
        # 해당 디렉토리에서 edw로 시작하는 파일만 확인합니다
        $ dir /a /x edw*
        # 해당 디렉토리의 소유자를 확인합니다
        $ dir /q





$ cd (디렉토리 이동)
        # c 드라이브로 이동합니다
        $ cd c:\
        # 사용자 계정폴더로 이동합니다
        $ cd %userprofile%





$ date (날짜)
        # 현재 날짜를 확인합니다
        $ date /t



$ time (시간)
        # 현재 시간을 확인합니다
        $ time /t



$ chcp (cmd창 언어)
        # cmd창 언어코드를 한글로 설정합니다
        $ chcp 949
        # cmd창 언어코드를 영어로 설정합니다
        $ chcp 437




$ start (파일 또는 폴더 열기)
        # 현재 cmd창이 가리키는 폴더를 엽니다
        $ start .

        # edward.txt라는 파일을 메모장으로 생성합니다
        $ start notepad edward.txt




$ tree (디렉토리 구조 확인)





-----------------------------------------------------------------------------------------------------------
<SYSINTERNALS & NIRSOFT 명령어>
$$ SYSINTERNALS 명령어

$ psexec.exe (원격명령어 실행 도구)
        # 원격컴퓨터에서 실행해야할 명령어들
        # ADMIN$, IPC$ 공유가 설정되어있어야 합니다
        $ net.exe share

        # 타겟컴퓨터에 해당 레지스트리 값을 추가합니다
        $ reg.exe add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

        # 타겟컴퓨터에 445번 포트를 개방합니다
        $ netsh.exe advfirewall firewall add rule name="TCP-445" dir=in action=allow protocol=tcp localport=445

        # 타겟컴퓨터 Start -> Run -> secpol.msc -> Local Policies -> Security Options -> Network Access: Sharing > and security model for local accounts > Classic – local users authenticate as themselves

        # 내컴퓨터, psexec 명령어를 사용합니다
        $ psexec \\172.30.1.15 -u <hostname> -p <password> <command>






$ autorunsc.exe (자동실행 목록 확인)
        # service 자동시작프로그램들을 확인합니다
        # 띄어쓰기로 구분, 서비스목록만 확인, EULA 서약 자동 확인
        $ autorunsc.exe -ct -a s /accepteula


        # 컴퓨터 시작시 동작하는 프로그램들을 확인합니다
        # 띄어쓰기로 구분, 시간형식 timestamp로, 로그온목록만 확인, EULA 서약 자동 확인
        $ autorunsc.exe -ct -t -a lb /accepteula








$$ NIRSOFT 명령어
$ nircmd.exe (nirsoft cmd)
        # 프로그램을 hide 모드로 실행합니다
        $ nircmd.exe exec hide <processname>

        # 컴퓨터 음량을 최대치로 설정합니다
        $ nircmd.exe setsysvolume 65535

        # 컴퓨터의 음량을 음소거합니다
        $ nircmd.exe mutesysvolume 1

        # chrome.exe 프로그램의 볼륨을 제거합니다
        $ nircmd.exe changeappvolume chrome.exe -1

        # 컴퓨터의 밝기를 최저로 합니다
        $ nircmd.exe setbrightness 0




        # cmd 프로그램을 관리자권한으로 엽니다
        $ nircmd.exe elevate cmd

        # 주파수가 500 정도인 소리를 2초동안 냅니다
        $ nircmd.exe beep 500 2000

        # explorer.exe 프로세스를 강제로 재시작합니다
        $ nircmd.exe restartexplorer

        # cdrom을 엽니다
        $ nircmd.exe cdrom open

        # 시스템에서 로그아웃하거나 종료합니다
        $ nircmd.exe exitwin logoff
        $ nircmd.exe exitwin poweroff force

        # 시스템을 잠급니다
        $ nircmd.exe lockws

        # 시스템을 절전모드로 합니다
        $ nircmd.exe standby

        # 시스템을 강제로 최대절전모드로 합니다
        $ nircmd.exe hibernate force


        # 컴퓨터의 화면을 끕니다
        $ nircmd.exe monitor off

        # 휴지통을 비웁니다
        $ nircmd.exe emptybin



        # 현재화면을 스크린샷으로 찍어서 해당 계정 폴더에 pic.png 파일로 저장합니다
        $ nircmd.exe savescreenshot %userprofile%\pic.png
        # 현재 화면을 10번씩 5초단위로 찍어서 scr~.png이름으로 저장합니다
        $ nircmd.exe loop 10 5000 savescreenshot %userprofile%\scr~$loopcount$.png




        # 마우스를 우클릭하게 합니다
        $ nircmd.exe sendmouse right click

        # 마우스를 더블클릭하게 합니다
        $ nircmd.exe sendmouse left dblclick

        # 마우스를 (30,-20)픽셀만큼 이동합니다
        $ nircmd.exe sendmouse move 30 -20

        # A를 타이핑합니다
        $ nircmd.exe sendkey A press

        # ctrl 키를 계속 누른상태로 유지합니다 (shift, esc 가능)
        $ nircmd.exe sendkey ctrl down



        # hello라는 이름의 메세지 창을 2초 간격으로 3번 생성합니다
        $ nircmd.exe loop 3 2000 infobox "hello" "message"

        # open calc?라는 물음창이 뜨고 확인을 누르면 calc.exe를 생성합니다
        $ nircmd.exe qbox "open calc?" "message" "calc.exe"






----------------------------------------------------------------------------------------------------------
<기타 여러 프로그램들 명령어>
$$ 기타 여러 프로그램들 명령어

$ putty.exe (윈도우 환경 SSH 클라이언트 프로그램)
        # putty에 저장해놓은 192.168.0.123 세션으로 접속합니다
        $ putty.exe -load 192.168.0.123

        # ssh 서버로 edward라는 계정이름을 이용해 192.168.0.234의 6645 포트로 접속합니다
        $ putty.exe -ssh edward@192.168.0.234 6645





$ pscp.exe (putty 파일 전송 프로그램)
        # pscp를 이용해 tempuser 계정과 qwer1234 비밀번호를 사용해서 원격에  tigerk 하위폴더의 모든 내용을 내 컴퓨터의 바탕화면에 복사합니다
        $ pscp.exe -r -pw qwer1234 tempuser@172.30.1.25:C:\\Users\\tigerk0430\\Desktop\\tigerk c:\\users\\gyurs\\Desktop



$ msd.exe (커맨드라인 이메일 전송 프로그램) 
        # smtp.dum.net:465 이메일 서버를 이용해서 gyurse 유저가 qwer1234 비밀번호를 사용해서 hello man! 이라는 제목으로 edward.txt 파일을 첨부해서 buddy@naver.com 으로 전송합니다 
        $ msd.exe -smtp smtp.daum.net -port 465 -ssl -t buddy@naver.com -f gyurse@naver.com -sub "hello man!" -auth -user gyurse -pass qwer1234 -attach edward.txt,a 



$ rar.exe (RAR 압축 커맨드라인 프로그램) (하루에 10번정도 사용할 수 있는 라이센스 제한이 걸려있습니다)
        # 바탕화면에 있는 파일들을 24MB 단위로 분할압축해서 현재 cmd창이 가리키는 폴더에 컴퓨터이름.rar로 저장합니다 
        $ rar.exe a .\%computername%.rar %userprofile%\desktop\ -v24000k -vntry 

Posted by jjblaid

※ 윈도우2000/XP용 배치 파일입니다.


하드디스크의 논리적 구조는 언제라도 깨어질 수 있습니다. 특히 컴퓨터가 다운(먹통)되었을 때 그렇습니다. 그래서 chkdsk 라는 하드디스크 검사 프로그램을 적어도 보름에 한 번 정도는 해주어야 합니다.

그런데 이 배치 파일을 사용하면 위의 작업을 좀더 간단하게 할 수 있습니다. 이 배치 파일을 한 번 클릭하는 것으로, 모든 하드를 한꺼번에 검사할 수 있습니다.

컴퓨터에
C: D: E:
3개의 하드(또는 파티션)가 있다고 가정합니다. 만약 여러분의 PC에 D: 나 E: 드라이버가 없다면 아래의 코드에서 D: 나 E: 부분을 지워야 합니다.


@echo off

color f

echo C:
chkdsk c:
echo ERRORLEVEL=%ERRORLEVEL%
echo ================================================================================
echo.

echo D:
chkdsk d:
echo ERRORLEVEL=%ERRORLEVEL%
echo ================================================================================
echo.

echo E:
chkdsk e:
echo ERRORLEVEL=%ERRORLEVEL%
echo.

pause > nul


위의 코드를 Check Disks.bat 등의 적당한 이름으로 바탕화면 등에 저장한 후, 마우스로 클릭하면, 명령 프롬프트 창이 뜨며, 하드디스크에 대한 검사가 즉시 실시됩니다.




코드에 대한 설명:



color f
명령 프롬프트 창은, 검은 색 바탕에 회색 글자가 기본입니다. 좀더 글자가 선명히 보이도록 글자를 하얀색으로 바꾸는 명령어입니다.


echo C:
화면에 "C:" 라는 문자열을 단순히 출력하는 것입니다. 현재 어떤 드라이브를 검사하는지 표시하는 것입니다.

chkdsk c:
이것은 이 배치 파일의 핵심입니다. chkdsk 라는 디스크 검사 프로그램을 호출합니다. chkdsk 는 윈도우에 기본으로 설치되어 있습니다.

echo ERRORLEVEL=%ERRORLEVEL%
chkdsk 라는 프로그램을 비롯한 거의 모든 프로그램은, 성공적으로 끝나면 0을, 문제가 있으면 0이 아닌 값을 반환하며 끝납니다. chkdsk 가 어떤 값을 반환하며 끝났는지는 알아보는 것입니다.

ERRORLEVEL=0 이라면 아무 문제가 없는 것입니다. 그런데 2나 3을 반환하는 경우가 있습이다. 제 경험상으로 ERRORLEVEL=2 라면 심각하지 않은 문제가 있는 것이고 ERRORLEVEL=3 이라면 약간 심각한 문제가 있는 것입니다. 이때는 3이 아닌 숫자가 나올 때까지 디스크 검사를 여러 번 반복해야 했습니다. 그러나 걱정할 정도의 문제는 아닙니다.

echo.
화면에 빈 줄을 하나 출력하는 명령입니다.

pause > nul
사용자가 아무 키나 누를 때까지 기다리고 있으라는 명령입니다. 디스크 검사가 끝나자마자 명령 프롬프트 화면이 닫혀 버리면 결과를 확인할 수 없기 때문에 이렇게 대기 명령을 주었습니다. 그리고 원래 pause 명령을 사용하면 "계속하려면 아무 키나 누르십시오 . . ." 라는 문자열이 나오는데 화면을 간결하게 하기 위해 "> nul" 로 재지향하여 이 문자열이 나오지 않도록 하였습니다.





배치 파일 실행 결과:


C:
파일 시스템 유형은 NTFS입니다.
볼륨 레이블은 Foo입니다.

경고! F 매개 변수가 지정되지 않았습니다.
CHKDSK를 읽기 전용 모드로 실행합니다.

CHKDSK에서 파일을 확인합니다. (1/3 단계)
파일 확인 작업을 완료했습니다.
CHKDSK에서 색인을 확인합니다. (2/3 단계)
색인 확인 작업을 완료했습니다.
CHKDSK에서 보안 설명자를 확인합니다. (3/3 단계)
보안 설명자를 확인했습니다.

전체 디스크 공간:    8385898KB
   1920188KB (10228개 파일)
색인 1078개:       3652KB
잘못된 섹터:          0KB
시스템 사용:      61230KB
로그 파일이      43984KB가 되었습니다.
사용 가능한 디스크 공간:    6400828KB

각 할당 단위 크기:       4096바이트
디스크의 전체 할당 단위 개수:    2096474개
디스크에서 사용 가능한 할당 단위 개수:    1600207개
ERRORLEVEL=2
================================================================================


D:
파일 시스템 유형은 NTFS입니다.
볼륨 레이블은 Bar입니다.

경고! F 매개 변수가 지정되지 않았습니다.
CHKDSK를 읽기 전용 모드로 실행합니다.

CHKDSK에서 파일을 확인합니다. (1/3 단계)
파일 확인 작업을 완료했습니다.
CHKDSK에서 색인을 확인합니다. (2/3 단계)
색인 확인 작업을 완료했습니다.
CHKDSK에서 보안 설명자를 확인합니다. (3/3 단계)
보안 설명자를 확인했습니다.

전체 디스크 공간:  100438348KB
  43506632KB (20613개 파일)
색인 1510개:       7660KB
잘못된 섹터:          0KB
시스템 사용:      95740KB
로그 파일이      65536KB가 되었습니다.
사용 가능한 디스크 공간:   56828316KB

각 할당 단위 크기:       4096바이트
디스크의 전체 할당 단위 개수:   25109587개
디스크에서 사용 가능한 할당 단위 개수:   14207079개
ERRORLEVEL=2
================================================================================


E:
파일 시스템 유형은 FAT32입니다.
FooBar 볼륨을 2005-12-02 오후 2:15에 만들었습니다.
볼륨 일련 번호는 273D-5EC1입니다.
파일과 폴더를 확인하는 중입니다...
파일과 폴더를 확인했습니다.
Windows에서 파일 시스템에 문제가 없음을 확인했습니다.
전체 디스크 공간:     8,369,532KB
숨김 파일 3개:            12KB
폴더 1개:             4KB
      445,252KB (3개 파일)
사용 가능한 공간:     7,924,260KB

각 할당 단위:         4,096바이트
디스크의 전체 할당 단위 개수:     2,092,383개
디스크에서 사용 가능한 할당 단위 개수:     1,981,065개
ERRORLEVEL=0


위와 같은 결과가 명령 프롬프트 창에 나타납니다.

위에서 말하는 "볼륨"이라는 것은, 하드 혹은 하드의 파티션을 말합니다. 쉽게 말해서 C: D: E: 같은 드라이브가 볼륨입니다.

NTFS 볼륨에서는 ERRORLEVEL=2 가 나오는 것이 보통이었습니다.



단, 이 검사는 하드의 표면 전체를 검사하지는 않습니다. 파일의 정보가 담긴 영역만을 검사합니다. 그래서 빨리 끝나는 것입니다.
Posted by jjblaid

윈도우에 내장된, 디스크 검사 프로그램인 chkdsk 의 도움말은 이렇습니다:

D:\Z>chkdsk /?
디스크를 검사하고 상태를 화면에 표시합니다.

CHKDSK [볼륨:[[경로]파일 이름]] [/F] [/V] [/R] [/X] [/I] [/C][/L[:크기]]


  볼륨          검사할 탑재 포인트나 볼륨 이름, 드라이브 문자를
                ":"을 포함하여 지정합니다.
  파일이름      검사할 파일 이름을 지정합니다. (FAT 전용)
  /F            디스크에 있는 오류를 고칩니다.
  /V            FAT 또는 FAT32에서는 디스크에 있는 모든 파일의
                전체 경로와 이름을 표시합니다.
                NTFS에서는 자세한 메시지를 표시합니다.
  /R            손상된 섹터를 찾아서 읽을 수 있는 정보를 복구합니다.
                (/F 포함)
  /L:크기       로그 파일 크기를 지정된 크기 만큼의 KB로 변경합니다.
                크기가 지정되지 않으면 현재 크기를 표시합니다.
                (NTFS 전용)
  /X            필요하면 우선 볼륨을 분리하도록 합니다.
                그러면 볼륨에 대한 모든 핸들을 사용할 수 없습니다.
                (NTFS 전용) (/F 포함)
  /I            색인 항목 확인을 건너뜁니다. (NTFS 전용)
  /C            폴더 구조에서 사이클 항목 확인을 건너뜁니다. (NTFS 전용)

/I 또는 /C 스위치는 지정한 볼륨의 일부에 대한 검사를 건너뛰므로
CHKDSK에 사용되는 시간을 줄일 수 있습니다.

D:\Z>


chkdsk 로 디스크 검사를 하면, /F 옵션을 붙이라는 경고문이 자꾸 나옵니다. /F 옵션을 붙이지 않아도 기본적인 에러 수정은 되지만, 심각한 문제가 있다면 고칠 수 없는 것으로 알고 있습니다.

현재 사용하는 하드에 대해서는 /F 옵션으로 검사할 수 없기에, 다음번 부팅시에 검사하도록 예약해 두어야 합니다. (윈도우를 부팅할 때마다 검사하는 것이 아니라 단 1회만.) 그런데 모든 하드를 부팅 시에 검사하려면 모든 하드에 chkdsk /F 이런 명령을 각각 실행해 주어야 하기에 불편합니다. 이 배치 파일은 그런 과정을 한 번에 처리하도록 만든 것입니다.


FAT32 로 포맷된 하드는 파일 테이블의 구조가 단순하기 때문에 이럴 필요가 없을 것입니다. NTFS로 포맷된 하드나 파티션만을 이 배치 파일 속에 포함시켰습니다. 만약 D: 가 없거나 NTFS가 아니라면 D: 부분을 배치 파일에서 지우고, NTFS로 된 E: 가 있다면 포함시켜야 합니다.


@echo off

C:
echo C:
cd \
chkdsk /F
echo ================================================================================
echo.

D:
echo D:
cd \
chkdsk /F

pause


위의 코드를 Check Disks on Boot.bat 등의 이름으로 하드에 저장한 후 마우스로 클릭하여 실행시킵니다.





배치 파일을 실행한 결과:


C:
파일 시스템 유형은 NTFS입니다.
현재 드라이브를 잠글 수 없습니다.

다른 프로세스가 볼륨을 사용하고 있으므로 CHKDSK를
실행할 수 없습니다. 다음에 시스템이 다시 시작할 때
이 볼륨을 검사하도록 하시겠습니까(Y/N)? y

다음에 시스템을 다시 시작할 때 이 볼륨을 검사합니다.
================================================================================


D:
파일 시스템 유형은 NTFS입니다.
현재 드라이브를 잠글 수 없습니다.

다른 프로세스가 볼륨을 사용 중이기 때문에 Chkdsk를 실행할 수 없습니다.
이 볼륨을 우선 분리하면 Chkdsk를 실행할 수 있을 것입니다.
그러면 이 볼륨에 대해 열린 모든 핸들을 사용할 수 없습니다.
이 볼륨에서 분리하도록 하시겠습니까(Y/N)? y

볼륨이 시스템 드라이브이거나 볼륨에 활성 페이징 파일이 있기 때문에
Chkdsk가 볼륨을 분리할 수 없습니다. 다음에 시스템을 다시 시작할 때
이 볼륨을 확인하도록 예약하시겠습니까(Y/N)? y

다음에 시스템을 다시 시작할 때 이 볼륨을 검사합니다.
계속하려면 아무 키나 누르십시오 . . .


보시다시피 복잡한 메시지가 나옵니다. 모두 y 를 선택하시면 됩니다. 다음 번에, 윈도우를 부팅할 때에 부팅 화면 대신에, 디스크 검사 화면이 나올 것인데, 이 배치 파일의 설정에 따른 정상적인 화면이니 전혀 놀라지 마시길 바랍니다. 검사가 끝나면 자동으로 부팅이 됩니다. 윈도우가 실행된 상태에서는 할 수 없는 종류의 검사를 하고 치료까지 하는 것입니다.
Posted by jjblaid

Chkdsk
파일 시스템 및 파일 시스템 메타데이터 오류를 검사하고 해당 결과의 상태 보고서를 표시합니다. 매개 변수 없이 chkdsk를 사용하면 현재 드라이브의 디스크 상태만 표시하고 오류는 수정하지 않습니다. 오류를 수정하려면 /f 매개 변수를 지정해야 합니다.

중요

  Windows Server 2003 서비스 팩 1(SP1)을 실행하는 컴퓨터에서 chkdsk를 실행하면 볼륨을 검사하기 전에 자동으로 섀도 복사본을 만들기 때문에 다른 프로그램이나 프로세스에서 사용하는 볼륨을 검사할 수 있습니다. 섀도 복사본을 이용하여 chkdsk에서 사용 중인 볼륨에 대한 오류를 정확하게 보고할 수 있습니다.

그러나 Windows Server 2003 SP1이 없는 컴퓨터의 경우 활성 시스템이나 부팅 볼륨 또는 사용 중인 데이터 볼륨에서 매개 변수 없이 chkdsk를 실행하면 오류가 없을 때도 오류를 잘못 보고할 수 있습니다. 이러한 현상을 방지하려면 볼륨에 대해 핸들을 열어 둔 프로그램이나 프로세스를 모두 닫습니다.

Windows Server 2003 SP1이 없는 컴퓨터에서 볼륨을 복구하거나 검사하는 동안 Chkdsk로 볼륨을 잠궈서 chkdsk를 완료할 때까지 볼륨에 저장된 데이터를 사용할 수 없게 합니다. 일반적으로 chkdsk는 손상된 볼륨에서만 실행합니다. Windows는 컴퓨터가 다시 시작될 때 "불량"으로 표시된 볼륨에서 chkdsk를 자동으로 실행합니다.

다시 시작할 수 있는 기회가 많지 않은 서버에서는 chkdsk를 실행하기 전에 chkntfs 또는 fsutil dirty query 명령을 사용하여 볼륨의 불량 비트가 설정되어 있는지를 확인합니다.
 
 chkdsk를 중단하는 것은 권장되지 않는 방법입니다. 그러나 chkdsk를 취소하거나 중단해도 chkdsk를 실행하기 전보다 해당 볼륨이 더 손상되는 것은 아닙니다. chkdsk를 다시 실행하면 볼륨의 나머지 손상이 복구됩니다.
 


구문
chkdsk [Volume:][[Path] FileName] [/f] [/v] [/r] [/x] [/i] [/c] [/l[:Size]]

매개 변수
Volume:

콜론을 포함한 드라이브 문자, 탑재 지점 또는 볼륨 이름을 지정합니다.

[Path] FileName

FAT(파일 할당 테이블) 및 FAT32에서만 사용합니다. chkdsk로 조각난 정도를 검사할 파일이나 파일 집합의 위치와 이름을 지정합니다. 와일드카드 문자(* 및 ?)를 사용하여 여러 파일을 지정할 수 있습니다.

/f

디스크 오류를 수정합니다. 디스크가 잠겨 있어야 합니다. chkdsk 명령으로 드라이브를 잠글 수 없으면 다음에 컴퓨터를 다시 시작할 때 드라이브 검사를 수행할지를 묻는 메시지가 나타납니다.

/v

디스크를 검사할 때 디렉터리에 있는 모든 파일 이름을 표시합니다.

/r

불량 섹터를 찾아서 읽을 수 있는 정보를 복구합니다. 디스크가 잠겨 있어야 합니다.

/x

필요한 경우 먼저 볼륨을 강제로 분리합니다. 이렇게 하면 드라이브에 대해 열어 둔 모든 핸들이 무효로 됩니다. /x는 /f 기능을 수행할 수도 있습니다.

/i

NTFS에서만 사용합니다. chkdsk의 실행 시간을 줄일 수 있도록 인덱스 항목을 자세히 검사하지 않습니다.

/c

NTFS에서만 사용합니다. chkdsk의 실행 시간을 줄일 수 있도록 폴더 내의 순환 구조를 검사하지 않습니다.

/l[:Size]

NTFS에서만 사용합니다. 로그 파일의 크기를 사용자가 입력하는 크기로 변경합니다. size 매개 변수를 생략하면 /I는 현재 크기를 표시합니다.

/?

명령 프롬프트에 도움말을 표시합니다.

설명
 Chkdsk 실행

고정 디스크에서 chkdsk 명령을 실행하려면 Administrators 그룹의 구성원이어야 합니다.
 
 컴퓨터를 다시 시작할 때 잠긴 드라이브 검사

Chkdsk 명령으로 디스크 오류를 수정하려면 드라이브에 열려 있는 파일이 없어야 합니다. 파일이 열려 있으면 다음과 같은 오류 메시지가 나타납니다.

다른 프로세스가 볼륨을 사용하고 있으므로 chkdsk를 실행할 수 없습니다. 다음에 시스템을 다시 시작할 때 이 볼륨을 검사하도록 하시겠습니까? (Y/N)

다음에 컴퓨터를 다시 시작할 때 드라이브를 검사하도록 선택하면 chkdsk는 컴퓨터를 다시 시작할 때 드라이브를 검사하여 자동으로 오류를 수정합니다. 드라이브 파티션이 부팅 파티션이면 chkdsk는 드라이브를 검사한 후 자동으로 컴퓨터를 다시 시작합니다.

또한 chkntfs /c 명령을 사용하여 다음에 컴퓨터를 다시 시작할 때 볼륨을 검사하도록 할 수 있습니다. 컴퓨터를 다시 시작할 때 Windows가 chkdsk를 실행하도록 fsutil dirty set 명령을 사용하여 볼륨의 더티 비트(손상 표시)를 설정합니다.
 
 디스크 오류 보고

Chkdsk는 FAT 및 NTFS 파일 시스템에 대한 디스크 공간과 디스크 사용을 검사합니다. chkdsk는 상태 보고서를 통해 각 파일 시스템에 대한 정보를 제공합니다. 상태 보고서는 파일 시스템에서 발견한 오류를 보여 줍니다. 활성 파티션에서 /f 명령줄 옵션을 사용하지 않고 chkdsk를 실행하면 드라이브를 잠글 수 없기 때문에 잘못된 오류가 보고될 수도 있습니다. chkdsk를 정기적으로 사용하여 디스크 오류를 검사해야 합니다.
 
 디스크 오류 수정

Chkdsk 명령은 /f 명령줄 옵션을 지정한 경우에만 디스크 오류를 수정합니다. chkdsk로 오류를 수정하려면 해당 드라이브를 잠글 수 있어야 합니다.

일반적으로 FAT 파일 시스템의 복구로 인해 디스크의 파일 할당 테이블이 변경되고 때때로 데이터가 손실될 수도 있으므로 chkdsk는 다음과 유사한 확인 메시지를 표시합니다.

3개의 연결에서 10개의 손실된 할당 단위가 발견되었습니다.

끊어진 연결을 파일로 변환하시겠습니까?

Y 키를 누르면 Windows에서 끊어진 연결을 루트 디렉터리에 Filennnn.chk 형식의 이름을 가진 파일로 각각 저장합니다. chkdsk가 종료되면 이 파일을 검사하여 필요한 모든 데이터가 들어 있는지 확인할 수 있습니다. N 키를 누르면 Winodws에서 디스크 오류를 수정하지만 손실된 할당 단위의 내용을 저장하지는 않습니다.

/f 명령줄 옵션을 사용하지 않으면 chkdsk는 파일을 수정해야 한다는 메시지만 표시하고 오류는 수정하지 않습니다.

예를 들어 70GB의 대용량 디스크나 수백만 개의 파일이 있는 디스크에서 chkdsk /f를 사용하면 chkdsk가 작업을 완료하는 데 시간이 오래 걸릴 수 있습니다. chkdsk /f는 복구를 완료될 때까지 디스크 제어를 넘겨주지 않으므로 이 시간 동안에는 컴퓨터를 사용할 수 없게 됩니다.
 
 FAT 디스크 검사

Windows는 FAT 디스크에 대해 다음과 같은 형식으로 chkdsk 상태 보고서를 표시합니다.

볼륨 일련 번호: B1AF-AFBF

전체 디스크 공간: 72,214,528바이트

숨김 파일 3개: 73,728바이트

디렉터리 12개: 30,720바이트

사용자 파일 386개: 11,493,376바이트

잘못된 섹터: 61,440바이트

사용 가능한 디스크 공간: 60,555,264바이트 각 할당 단위 크기: 2,048바이트

디스크의 전체 할당 단위 개수: 35,261개

디스크에서 사용 가능한 할당 단위 개수: 29,568개
 
 NTFS 디스크 검사

Windows는 NTFS 디스크에 대해 다음과 같은 형식으로 chkdsk 상태 보고서를 표시합니다.

파일 시스템 유형은 NTFS입니다.

CHKDSK에서 파일을 확인합니다. 파일 확인 작업을 완료했습니다. CHKDSK에서 인덱스를 확인합니다.

인덱스 확인 작업을 완료했습니다.

CHKDSK에서 보안 설명자를 확인합니다.

보안 설명자를 확인했습니다.

전체 디스크 공간: 12,372KB

사용자 파일 1개: 3KB

인덱스 1개: 2KB

시스템 사용: 4,217KB

사용 가능한 디스크 공간: 8,150KB

각 할당 단위 크기: 512바이트

디스크의 전체 할당 단위 개수: 24,745개

디스크에서 사용 가능한 할당 단위 개수: 16,301개
 
 열려 있는 파일에 chkdsk 사용

/f 명령줄 옵션을 지정하면 디스크에 열려 있는 파일이 있는 경우 chkdsk에서 오류 메시지를 표시합니다. /f 명령줄 옵션을 지정하지 않은 경우 디스크에 열려 있는 파일이 있으면 chkdsk는 디스크의 손실된 할당 단위를 보고할 수도 있습니다. 이러한 상황은 열려 있는 파일이 아직 파일 할당 테이블에 기록되지 않은 경우에 발생할 수 있습니다. chkdsk에서 다수의 할당 단위가 손실되었음을 보고하면 디스크를 수리해야 합니다.
 
 Windows Server 2003 SP1이 없는 컴퓨터에서 공유 폴더용 섀도 복사본에 chkdsk를 사용하는 경우

공유 폴더 섀도 복사본이 활성화된 동안에는 공유 폴더 원본 볼륨에 대한 섀도 복사본을 잠글 수 없으므로 원본 볼륨에 대해 chkdsk를 실행하는 경우 잘못된 오류가 보고되거나 chkdsk가 예상치 않게 종료될 수 있습니다. 그러나 매개 변수 없이 읽기 전용 모드로 chkdsk를 실행하여 공유 폴더 저장소 볼륨의 섀도 복사본을 검사하면 섀도 복사본의 오류를 검사할 수 있습니다.
 
 실제 디스크 오류 찾기

/r 명령줄 옵션을 사용하여 파일 시스템에서 실제 디스크 오류를 찾습니다. recover를 사용하여 물리적으로 손상된 파일을 복구하는 방법에 대한 자세한 내용은 관련 항목을 참조하십시오.
 
 불량 디스크 섹터 보고

Chkdsk에서 보고하는 불량 섹터는 디스크의 초기 준비 단계에서 불량으로 표시된 것입니다. 별다른 위험은 없습니다.
 
 종료 코드

다음 표에서는 작업을 완료한 후 chkdsk 가 보고하는 종료 코드 목록을 보여 줍니다.


종료 코드 설명
0
 오류를 발견하지 못했습니다.
 
1
 오류를 발견하여 수정했습니다.
 
2
 휴지통 비우기와 같은 디스크 정리를 수행했거나 /f가 지정되지 않았기 때문에 디스크를 정리하지 못했습니다.
 
3
 /f가 지정되지 않았기 때문에 디스크를 검사할 수 없거나, 오류를 수정할 수 없거나, 오류가 수정되지 않았습니다.
 
 
 다른 매개 변수를 사용하는 chkdsk 명령은 복구 콘솔에서 사용할 수 있습니다.
 


D 드라이브의 디스크를 검사하여 Windows에서 오류를 수정하게 하려면 다음과 같이 입력합니다.

chkdsk d: /f

오류가 발생하면 chkdsk는 일시 중지하고 메시지를 표시합니다. 디스크 상태가 나열된 보고서가 표시되면 chkdsk는 종료됩니다. chkdsk가 종료될 때까지 지정된 드라이브에 있는 파일은 열 수 없습니다.

FAT 디스크에서 현재 디렉터리에 있는 모든 파일의 연속되지 않은 블록을 검사하려면 다음과 같이 입력합니다.

chkdsk *.*

Chkdsk는 상태 보고서를 표시한 다음 파일 사양과 일치하는 연속되지 않은 블록이 있는 파일의 목록을 표시합니다.

Posted by jjblaid

두 파일 비교하여 다른점 확인 하는 방법

 레지스트리 편집하게 되면 추후에 트러블 슈팅을 하거나 기타 설정들의 변한 상황에 대하여 알 수 없게 되는데...

 

이것을 쉽게 판단(?)을 해볼 수 있는 명령어가 윈도우 비스타에 포함되어 있습니다.

 

그 명령어는 fc.exe 라는 명령어 입니다.

도움말을 참조하면 다음과 같습니다.

2개의 파일을 비교하여 다른점을 표시하는 명령어 입니다.

 

 

그럼 한번 사용법으로 테스트를 해보겠습니다.

 

1. regedit 실행하여 레지스트리 편집기에서 내보내고자 하는 위치를 선택하고 오른쪽 마우스 클릭하여 "내보내기" 하여

파일이름.reg 파일을 생성합니다.

 

2. 테스트하기 위하여 동일위치에 새로운 리지스트키 "test"라는 것을 생성 한 후 1번과 동일하게 "내보내기"하여 파일이름.reg 파일을 생성 합니다.

 

3.시작-실행-cmd.exe 실행하여 명령 프롬프트 창 엽니다.

 

4. 프롬프트 창에서 다음과 같이 입력 합니다.

> Fc.exe /u 1번에서생성한 파일이름.reg 2번에서 생성한 파일이름.reg > 비교내용 결과를 저장할 파일이름.txt

 

5. 다음과 같은 결과를 확인 할 수 있게 됩니다.

 

Posted by jjblaid

제가 메일 서비스를 담당하는 관계로, 메일 서버의 로그나 관련 데이터를 뒤질 일이 적지 않습니다. 데이터량이 적으면야 대충 대충 어떻게든 하겠지만, 백만라인을 넘어간다던지, 데이터 파일의 크기가 50메가가 넘는다던지 하게 되면 그 안에 필요한 데이터만 뽑기가 완전 뭣같죠(...) Acroedit로 파일 나누고, 엑셀로 임포팅하면 한 3만년 걸리는 경우가 좀 있고, 대부분의 경우 그냥 시스템이 뻗어버립니다. -_-;

개발자는 아니지만 틈틈히 개발자분들 귀찮게 하다가 nix 환경에서 grep 커맨드가 있다는 사실을 알게 되었습니다. 그 큰 파일에서 필요한 텍스트가 있는 부분만 찾아내주는 아주 유용한 커맨드더군요. 혹여나 짧은 상식에 윈도에도 그런게 있나 싶어 Command Console을 열고 grep을 치니 아래와 같이 나오더군요.

당연히 그딴거 없다.


이런.. &(%^$%!@^%$^!%$@#!!!!! 나는 어쩌라고!!!! 제가 회사에서 MS Office 2007 Beta 2 버전을 쓰고 있는데, 제아무리 엑셀 2003까지의 라인제한이었던 65,536 라인의 몇배를 지원하는 Excel 2007 이라 하더라도 몇십만줄을 한번에 부르기도 불가능한 상황이고, 설혹 나눠서 부른다고 해도 컴퓨터가 중간에 뻗어버리는데 어찌하오리까. -_-;

그러다가 문득 아~주 옛날에 "파일검색"용인 줄 알았던 커맨드, find가 떠올랐습니다. 컴퓨터를 잘 모르던 시절이니 안된다고 투덜거리기만 했지요. 그래서 find 명령어를 쳐보니, 아니. 살아있는겁니다.

아직 안 죽고 살아있었..;


find /? 를 입력해서 스위치 및 매개 변수를 봤습니다.


nix 계열의 grep 커맨드와 비교했을 상당히 간단하고, 제한된 범위 내의 기능만을 제공하고 있습니다만, 적어도 제가 필요한 "특정 문자열을 가진 라인의 추출" 기능을 사용할 수 있으니 꽤 만족스럽네요.

find 문의 기본 구문은 [find "문자열" 파일이름] 입니다. 별다른 스위치를 달지 않고 저렇게만 입력하면 해당 파일에서 특정 문자열을 가진 라인을 화면으로 표시해줍니다. 이걸 파일로 표시하기 위해서는 "> 파일명"을 덧붙여주면 되는군요.

예를 들어, at.txt 파일에서 widelake 라는 문자열을 가진 파일을 pentium.txt로 저장하려면 아래와 같이 쓰면 됩니다.

C:\>find "widelake" at.txt > pentium.txt

스위치는 다음 것들이 있군요.

/V        지정한 문자열이 없는 줄을 표시합니다.
/C        지정한 문자열이 있는 줄 수만을 표시합니다.
/N        지정한 문자열이 있는 각 줄 앞에 줄 번호를 붙입니다.
/I        대/소문자를 구별하지 않고 찾습니다.
/OFF[LINE] 오프라인 속성 세트 파일을 건너뛰지 않습니다.

/V를 붙이게 되면 (c:\find /v "widelake" at.txt > pentium.txt) widelake 문자열을 포함하지 않는 라인만 pentium.txt 파일로 저장하게 됩니다. /V를 붙이면 안 붙인 것과 정 반대의 결과값이 나오는 거죠.

/C는 문자열을 포함하는 라인의 갯수만 출력해줍니다. 열 전체를 저장해주는게 아니구요.

/N은 저장할 때 해당 라인의 라인번호를 같이 붙여줍니다. /C 스위치하고 같이 쓸 수는 있는데 어차피 /C는 라인갯수만 세어주기 때문에 의미는 없습니다. 그리고 /I는 대소문자 구별을 해제하는 것인데, 영문 문자열을 찾을때만 해당되는 사항이군요. /OFFLINE 은 뭔지 모르겠습니다. -_-;


실제 써보도록 하겠습니다.

아래 내용을 가진 at.txt 파일이 있다고 가정하겠습니다.

widelake
widelake dreamwiz
gmail
widela skku
iriver


find "widelake" at.txt

---------- AT.TXT
widelake
widelake dreamwiz

② find /v "widelake" at.txt

---------- AT.TXT
gmail
widela skku
iriver

③ find /c "widelake" at.txt

---------- AT.TXT: 2

④ find /v /c "widelake" at.txt

---------- AT.TXT: 3

find /n "widelake" at.txt

---------- AT.TXT
[1]widelake
[2]widelake dreamwiz

⑥ find /v /n "widelake" at.txt

---------- AT.TXT
[3]gmail
[4]widela skku
[5]iriver


뭐 이정도 결과값들을 뽑아줍니다. 상당히 괜찮은 커맨드이니 윈도만 사용하시면서 grep을 그리워(?)하는 분들은 부족하나마 써보시는 것도 괜찮을 듯 합니다. :D grep 하나 때문에 리눅스 라이브CD까지 쓴 저로써는 -_-; 흑흑.
Posted by jjblaid
이전버튼 1 이전버튼

블로그 이미지
jjblaid

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.5
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함