저 역시 한때 매일 수십 개의 파일을 특정 규칙에 따라 분류하고, 마감 시간에 맞춰 보고서를 정리하는반복 작업의 늪에서 허우적댔습니다. 주말에도 혹시 빠뜨린 작업이 있을까 불안해하며 PC를 켰던 기억이 생생합니다. 그러다 우연히 VBScript (Visual Basic Script)를 알게 되었고,단 며칠 만에제 반복 업무의 80%를클릭 한 번으로 끝내는 '자동화 스크립트'를 만들었습니다.단순히 시간을 절약한 것을 넘어,인간적인 실수를 줄여업무의 정확도를 극대화할 수 있었습니다.
VBScript는 윈도우 운영체제에기본적으로 내장되어 있는 강력한 스크립트 언어입니다. 별도의설치나 복잡한 환경 설정 없이메모장만 있으면 누구나 즉시자동화의 마법을 부릴 수 있습니다.최신 윈도우 환경에서도 여전히 강력하게 작동하며,초보자도 쉽게 배울 수 있는직관적인 문법을 가지고 있습니다.
이 포스팅은VBScript의 기본 문법부터 시작하여,실제 업무에 바로 적용 가능한 '자동화 스크립트 4가지' 레시피를 상세히 제공합니다.파일 시스템 제어, 팝업 메시지 출력, 프로그램 실행등실용적인 기능을 중심으로 심층 분석과알짜 꿀팁을 담아, 여러분의업무 효율을차원이 다르게높여줄 '자동화 마스터 가이드'가 될 것입니다.
1. 윈도우 자동화의 핵심: VBScript란 무엇인가?
VBScript가 왜 여전히 강력한 윈도우 자동화 도구로 손꼽히는지, 그 역사와 특징을 이해하는 것이 중요합니다.
1.1. VBScript의 정의와 역사
- 정의:VBScript는 Microsoft에서 개발한Active Scripting 언어로,Visual Basic 언어의 서브셋(부분 집합)입니다. 윈도우 환경에서사용자 인터페이스(GUI)없이반복적인 작업이나 시스템 관리를자동화하기 위해 주로 사용됩니다.
- 강점:가장 큰 장점은윈도우의 모든 버전에기본적으로 탑재되어 있어, 별도의런타임 환경이나 설치가 필요 없다는 것입니다. 스크립트를 작성하고 .vbs 확장자로 저장한 후 더블 클릭하면 즉시 실행됩니다.
1.2. VBScript와 다른 스크립트 언어의 차이점
| 구분 | VBScript (.vbs) | 배치 스크립트 (.bat) | PowerShell (.ps1) |
| 난이도 | 쉬움 (가장 초보 친화적) | 매우 쉬움 (단순 명령어) | 어려움 (객체 지향 개념 필요) |
| 주요 용도 | 파일/폴더 제어, 팝업/입력창, Office 자동화 | 단순 명령어 실행, 경로 이동 | 시스템 관리, 네트워크 제어, 심층 관리 |
| 운영체제 의존성 | Windows 전용 | Windows 전용 | Windows 및 일부 Linux/macOS 지원 |
| 실행 환경 | WSCRIPT/CSCRIPT (기본 탑재) | CMD (기본 탑재) | PowerShell 콘솔 (기본 탑재) |
- VBScript의 위치:VBScript는복잡한 시스템 관리를 요하는 PowerShell보다는 쉽고,단순 명령어 실행만 가능한 배치 스크립트보다는 훨씬 강력한 논리(조건문, 반복문)와객체(Object)제어 기능을 제공하여 '간단한 자동화'에가장 효율적인 선택지입니다.
2. VBScript 기본 문법 마스터: 메시지 박스 및 변수 선언
자동화 스크립트를 작성하기 전, 가장 기초가 되는변수 선언과사용자와 소통하는 방법을 익혀야 합니다.
2.1. 기본 문법 구조 및 주석 처리
VBScript는 대소문자를 구분하지 않으며, 각 줄은 별도의 세미콜론 없이 명령어로 구분됩니다.
' 이 줄은 주석입니다. 스크립트는 실행되지 않습니다. (작은 따옴표 사용)
Option Explicit ' 변수 선언을 강제하여 실수를 줄입니다. (강력 추천)
Dim folderPath ' 변수 선언: Dim 키워드 사용
folderPath = "C:\Users\User\Desktop" ' 변수에 값 할당
- Option Explicit의 중요성:반드시 스크립트의 첫 줄에 Option Explicit를 선언하세요. 이는변수를 선언하지 않고 사용하는 오류를 방지하여 스크립트 안정성을 높여줍니다.
2.2. 사용자와의 대화: MsgBox와 InputBox
VBScript의 가장 큰 장점 중 하나는간단한 팝업 창을 띄워 사용자에게 정보를 전달하고 입력을 받을 수 있다는 것입니다.
- MsgBox (메시지 박스 출력)VB.Net
MsgBox "자동화 스크립트 실행이 완료되었습니다!", vbInformation, "작업 완료 알림"vbInformation은아이콘 타입을 지정합니다. (예: vbCritical, vbQuestion 등)
- InputBox (사용자 입력 받기)VB.Net
Dim userName userName = InputBox("사용자 이름을 입력하세요.", "이름 입력창", "Guest") ' 사용자가 입력한 값은 userName 변수에 저장됩니다. If userName <> "" Then MsgBox userName & "님, 환영합니다!" Else MsgBox "이름이 입력되지 않았습니다.", vbExclamation End If
3. 핵심 객체 이해: FileSystemObject (FSO)
VBScript의 '만능 도구'이자파일 및 폴더 자동화의심장과 같은 존재입니다.
3.1. FSO 객체 생성 및 역할
FileSystemObject (FSO)는 윈도우의파일 시스템을VBScript 코드로 조작할 수 있게 해주는핵심 도구입니다. 파일 생성, 삭제, 복사, 폴더 생성 등모든 파일/폴더 작업은 FSO 객체를 통해 이루어집니다.
' FSO 객체 생성: 모든 파일/폴더 조작의 시작
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
3.2. FSO를 활용한 폴더 생성 및 확인
- 폴더 생성:특정 경로에 폴더가없으면 생성하는 스크립트는 가장 흔한 자동화 작업입니다.
' FSO 객체 생성
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim backupPath
backupPath = "C:\Project\DailyBackup" ' 백업 폴더 경로
' 폴더 존재 여부 확인 후 없으면 생성
If Not fso.FolderExists(backupPath) Then
fso.CreateFolder backupPath
MsgBox "백업 폴더가 성공적으로 생성되었습니다.", vbInformation
Else
MsgBox "백업 폴더가 이미 존재합니다. 작업을 계속합니다."
End If
Set fso = Nothing ' 사용 후 객체 해제 (습관화 추천)
- 경험 공유:저는 이 스크립트를 사용하여매일의 작업 결과를'날짜_프로젝트명'폴더에 자동으로 저장하도록 설정했습니다. 매번 폴더를 만들고 경로를 복사하는 시간을 아낄 수 있었고, 인간적인 실수(오타)로 인한 파일 누락이 완전히 사라졌습니다.
4. 실전 자동화 스크립트 레시피 1: 날짜별 백업 폴더 자동 생성
매일 생성해야 하는 '날짜별 백업 폴더'를 클릭 한 번으로 생성하는 스크립트입니다.
4.1. 스크립트 코드: Today's Backup Folder
Option Explicit
' 1. FSO 객체 및 변수 선언
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim baseFolder, todayDate, backupFolder
Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
' 2. 오늘 날짜 및 백업 경로 설정
' YYYYMMDD 포맷으로 날짜 문자열 생성 (예: 20251105)
todayDate = Year(Date) & Right("0" & Month(Date), 2) & Right("0" & Day(Date), 2)
baseFolder = "D:\WorkData\Project_A_Backup" ' <-- 여기에 기본 백업 경로 설정
backupFolder = baseFolder & "\" & todayDate & "_DailyReport"
' 3. 폴더 생성 로직
If Not fso.FolderExists(backupFolder) Then
fso.CreateFolder backupFolder
MsgBox "오늘 날짜 폴더 [" & todayDate & "_DailyReport]가 생성되었습니다.", vbInformation, "자동 백업 폴더 생성"
' 4. (꿀팁) 생성된 폴더 바로 열기
WshShell.Run Chr(34) & backupFolder & Chr(34)
Else
MsgBox "오늘 날짜 폴더는 이미 존재합니다.", vbExclamation, "자동 백업 폴더 생성"
WshShell.Run Chr(34) & backupFolder & Chr(34)
End If
' 5. 객체 해제
Set fso = Nothing
Set WshShell = Nothing
4.2. 꿀팁: 생성된 폴더 바로 열기 (WshShell 객체 활용)
위 스크립트에서 사용된WScript.Shell 객체는시스템의 다른 프로그램을 실행하거나레지스트리를 건드리는 등운영체제와의 상호작용을 담당합니다.
- WshShell.Run Chr(34) & backupFolder & Chr(34) 이 코드는탐색기 창을 띄워방금 생성된 폴더를 바로 열어줍니다. Chr(34)는쌍따옴표 문자를 의미하며, 경로에 공백이 있을 경우 오류를 막기 위해 사용됩니다.
5. 실전 자동화 스크립트 레시피 2: 여러 프로그램 동시 실행
매일 출근 시Outlook, Excel, 브라우저등여러 프로그램을 순서대로실행해야 할 때, 이 스크립트 하나로 해결할 수 있습니다.
5.1. 스크립트 코드: One-Click Startup
Option Explicit
' WScript.Shell 객체 생성
Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
Dim ProgramPath
' 1. Outlook 실행 (경로 지정)
' 경로에 공백이 있으면 쌍따옴표를 사용해야 합니다.
ProgramPath = "C:\Program Files\Microsoft Office\Root\Office16\OUTLOOK.EXE"
WshShell.Run Chr(34) & ProgramPath & Chr(34)
WScript.Sleep 2000 ' Outlook이 완전히 뜰 때까지 2초 대기 (밀리초 단위)
' 2. Google Chrome 특정 웹사이트 실행
' 프로그램 이름만으로 실행 가능합니다. URL은 인수로 전달.
WshShell.Run "chrome.exe https://www.google.com/calendar"
WScript.Sleep 1000 ' 1초 대기
' 3. 특정 엑셀 파일 열기 (자동으로 Excel 프로그램 실행)
ProgramPath = "C:\Users\User\Documents\DailyReport.xlsx" ' <-- 여기에 파일 경로 설정
WshShell.Run Chr(34) & ProgramPath & Chr(34)
MsgBox "모든 업무용 프로그램 실행 완료!", vbInformation, "자동 시작 스크립트"
Set WshShell = Nothing
5.2. 꿀팁: WScript.Sleep을 이용한 '시간차 실행'
- WScript.Sleep 2000은2000 밀리초(2초)동안 스크립트의 실행을일시 중지시키는 명령어입니다.
- 활용:용량이 큰 프로그램이나인터넷 연결이 필요한 프로그램은완전히 로드될 시간이 필요합니다. Sleep 기능을 사용하면시스템에 부하를 주지 않고순서대로 프로그램을 안정적으로 띄울 수 있습니다.
6. 실전 자동화 스크립트 레시피 3: 파일 확장자 일괄 변경
특정 폴더 내의모든 파일의 확장자를일괄적으로 변경해야 할 때 유용한 스크립트입니다. (예: .log 파일을 .txt 파일로 변경)
6.1. 스크립트 코드: File Extension Changer
Option Explicit
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim folderToChange, file, fileExtension
Dim newExtension
' 1. 변경할 폴더 경로 및 새 확장자 설정
folderToChange = "D:\LogFiles\ServerLogs" ' <-- 여기에 대상 폴더 경로 설정
newExtension = "txt" ' <-- 변경할 새 확장자 (예: txt, html)
' 2. 폴더 객체 가져오기
If fso.FolderExists(folderToChange) Then
Dim targetFolder : Set targetFolder = fso.GetFolder(folderToChange)
Else
MsgBox "지정된 폴더를 찾을 수 없습니다.", vbCritical
Set fso = Nothing
Exit Sub
End If
Dim count : count = 0
' 3. 폴더 내 파일 반복 처리
For Each file In targetFolder.Files
fileExtension = fso.GetExtensionName(file.Path)
' 현재 확장자가 새 확장자와 다를 경우에만 변경
If LCase(fileExtension) <> LCase(newExtension) Then
Dim newPath
' 파일 이름에서 확장자를 제거하고 새 확장자를 붙입니다.
newPath = fso.BuildPath(folderToChange, fso.GetBaseName(file.Path) & "." & newExtension)
' 파일 이름 변경 (MoveFile 사용)
fso.MoveFile file.Path, newPath
count = count + 1
End If
Next
MsgBox count & "개의 파일 확장자가 성공적으로 ." & newExtension & "로 변경되었습니다.", vbInformation, "확장자 일괄 변경 완료"
' 4. 객체 해제
Set fso = Nothing
Set targetFolder = Nothing
6.2. FSO 반복문 (For Each)의 활용
- For Each file In targetFolder.Files ... Next구문은대상 폴더안에 있는모든 파일을 순서대로 하나씩 접근하게 해줍니다.
- 핵심 기능:fso.GetBaseName(file.Path): 파일 경로에서확장자를 제외한 순수한 파일 이름만 추출합니다.
- 파일 이동/변경:fso.MoveFile file.Path, newPath 명령은파일을 이동시키는 기능이지만,같은 폴더에서이름만 다르게지정하면이름을 변경하는 기능으로 활용됩니다.
7. 실전 자동화 스크립트 레시피 4: 파일 정리 자동화 (이동)
매일 다운로드 폴더나 바탕화면에 쌓이는특정 확장자 파일을정해진 폴더로자동 이동시켜주는 스크립트입니다.
7.1. 스크립트 코드: Download Folder Cleaner
Option Explicit
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim targetFolder, destinationFolder
Dim file, fileExtension
Dim count : count = 0
' 1. 정리할 원본 폴더 및 이동 대상 폴더 설정
targetFolder = "C:\Users\User\Downloads" ' <-- 정리할 폴더 경로
destinationFolder = "D:\FileArchive\Documents" ' <-- 이동시킬 보관 폴더 경로
' 2. 대상 폴더 존재 확인
If Not fso.FolderExists(targetFolder) Or Not fso.FolderExists(destinationFolder) Then
MsgBox "경로를 확인하세요. 원본 또는 대상 폴더가 존재하지 않습니다.", vbCritical
Set fso = Nothing
Exit Sub
End If
' 3. 폴더 객체 가져오기
Dim folderToClean : Set folderToClean = fso.GetFolder(targetFolder)
' 4. 파일 확장자별 이동 처리
For Each file In folderToClean.Files
fileExtension = LCase(fso.GetExtensionName(file.Path))
' 조건: PDF 또는 DOCX 확장자일 경우 이동
If fileExtension = "pdf" Or fileExtension = "docx" Then
Dim newFilePath
' 새 파일 경로 생성 (이동할 폴더 + 파일 이름)
newFilePath = fso.BuildPath(destinationFolder, file.Name)
' 파일 이동
fso.MoveFile file.Path, newFilePath
count = count + 1
End If
Next
MsgBox count & "개의 파일이 성공적으로 정리되었습니다.", vbInformation, "다운로드 폴더 정리 완료"
Set fso = Nothing
Set folderToClean = Nothing
7.2. VBScript 조건문 (If...Or)의 활용
- If fileExtension = "pdf" Or fileExtension = "docx" Then 이 코드는 논리 연산자 Or를 사용하여두 가지 조건중하나만 만족해도 파일 이동을 실행하게 합니다.
- 확장성:Or 대신 And를 사용하면두 조건을 모두 만족할 때만 실행되도록 만들 수 있습니다.If...ElseIf...Else구문을 활용하면확장자별로 다른 폴더로 이동시키는복잡한 자동화도 쉽게 구현 가능합니다.
8. 알아두면 좋은 꿀팁: VBScript 안정성 및 실행 환경 최적화
스크립트의안정성을 높이고실행 속도를 최적화하는 팁입니다.
8.1. 스크립트 오류 처리 (On Error Resume Next)
- 원리:VBScript는 코드 중간에 오류가 발생하면스크립트 실행을 멈춥니다.FSO 작업 중이미 존재하는 파일을 생성하려 하거나접근 권한이 없는 폴더에 접근하면 오류가 발생합니다.
- 활용:스크립트 상단에 On Error Resume Next를 선언하면오류 발생 시 다음 줄로 넘어가스크립트가강제로 종료되는 것을 막아줍니다. 단,디버깅이 어렵기 때문에개발 완료 후에만 적용하는 것을 추천합니다.
8.2. WScript vs CSCRIPT (실행 환경)
VBScript 파일(.vbs)을 더블클릭하면 기본적으로WSCRIPT.EXE환경에서 실행됩니다.
- WSCRIPT:GUI 환경(팝업 창 - MsgBox, InputBox 등)에 최적화되어 있습니다.
- CSCRIPT:명령 프롬프트(CMD) 환경에서 실행되며,결과를 텍스트로 출력하는 데 용이합니다.스케줄러에 등록하여백그라운드에서 조용히 실행할 때 주로 사용됩니다.
- 팁:CMD 창에서 cscript //nologo YourScript.vbs 명령어를 사용하여CSCRIPT 환경에서 실행하면WScript 정보 창없이 깔끔하게 실행할 수 있습니다.
8.3. 윈도우 작업 스케줄러 등록
가장 중요한 자동화 꿀팁입니다. 스크립트를 만들었다면매일 특정 시간에자동으로 실행되도록 등록해야 합니다.
- 등록 방법:윈도우 검색창에서 '작업 스케줄러'를 열고 '새 작업 만들기'를 선택합니다.트리거에서'매일 반복'시간을 설정하고,동작에서 '프로그램 시작'을 선택한 후만든 VBScript 파일 경로를 지정해 주면 됩니다.
결론
윈도우 VBScript는복잡한 개발 지식 없이도일상적인 반복 업무를놀랍도록 쉽고 빠르게자동화할 수 있는강력한 도구입니다. FileSystemObject (FSO)를 활용하여파일/폴더를 제어하고,WScript.Shell을 통해프로그램을 실행하며,간단한 조건문을 활용하는 것만으로도 여러분의업무 효율은 비약적으로 상승할 것입니다. 이 가이드를 통해 제시된4가지 실전 스크립트를 활용하여, 더 이상 지루한반복 작업에 시간을 낭비하지 마시고진정으로 중요한 일에 집중하는스마트한 업무 환경을 구축하시길 바랍니다.
FAQ (자주 묻는 질문)
Q1: VBScript는 최신 윈도우에서도 문제없이 작동하나요?
A1: 네, VBScript는 윈도우의 핵심 운영체제 기능에 포함되어 있으며, 최신 윈도우 환경에서도 여전히 안정적으로 지원되고 작동합니다. 별도의 호환성 설정은 필요 없습니다.
Q2: VBScript를 작성하려면 특별한 프로그램이 필요한가요?
A2: 아니요, 기본 텍스트 편집기인 '메모장'만 있으면 충분합니다. 코드를 작성한 후 확장자를 .vbs로 저장하기만 하면 됩니다. (메모장에서 저장 시 '파일 형식'을 '모든 파일'로 변경 후 저장해야 합니다.)
Q3: 스크립트 파일이 실행되지 않고 메모장에서 열리는데 왜 그런가요?
A3: 파일 확장자가 .vbs가 아닌 .txt로 저장되었을 가능성이 높습니다. 또는, 파일 저장 시 확장자 뒤에 .txt가 숨겨져 있을 수 있으니, 윈도우 탐색기 설정에서 '알려진 파일 형식의 확장자 숨기기'를 해제하고 확인해 보세요.
Q4: 스크립트 실행 시 팝업 창이 뜨지 않고 CMD 창으로 실행되게 할 수 있나요?
A4: 네, .vbs 파일을 CSCRIPT.EXE 환경으로 실행하면 됩니다. 윈도우 작업 스케줄러에 등록할 때 실행 파일 경로를 cscript.exe로 지정하고, 인수에 .vbs 파일 경로를 넣어주면 됩니다.
Q5: FSO 객체 생성 시 CreateObject("Scripting.FileSystemObject")는 무엇을 의미하나요?
A5: 이는 'Scripting.FileSystemObject'라는 윈도우 시스템에 등록된 객체를 사용할 수 있도록 VBScript 메모리 공간에 불러오는 명령어입니다. 이 객체를 통해 파일 시스템을 제어할 수 있습니다.
Q6: 스크립트에서 여러 프로그램을 실행할 때 '시간차'를 두는 꿀팁이 있나요?
A6: 네, WScript.Sleep 밀리초 명령어를 사용합니다. 예를 들어, WScript.Sleep 5000은 5초(5000밀리초) 동안 스크립트 실행을 멈춥니다. 이를 통해 시스템 부하를 줄이고 프로그램이 안정적으로 로드되도록 합니다.
Q7: 스크립트 중간에 오류가 나도 종료되지 않고 계속 실행되게 할 수 있나요?
A7: 스크립트 코드의 맨 위에 On Error Resume Next 명령어를 추가하면 됩니다. 이는 오류 발생 시 다음 줄로 넘어가 스크립트가 강제 종료되는 것을 막아줍니다.
Q8: Option Explicit를 선언하는 것이 왜 중요한가요?
A8: 변수 선언(Dim)을 강제하여 오타 등으로 인한 변수 사용 오류를 컴파일 단계에서 잡아낼 수 있게 합니다. 스크립트의 안정성과 디버깅 효율을 높여주므로 강력히 추천됩니다.
Q9: For Each 반복문을 사용하여 폴더 내의 모든 파일을 처리하는 방법은 무엇인가요?
A9: 먼저 FSO 객체로 폴더 객체를 가져온 후, For Each file In 폴더객체.Files ... Next 구문을 사용하면 됩니다. 이 구문은 폴더 내의 각 파일을 file 변수에 할당하며 반복 실행합니다.
Q10: 만든 VBScript를 매일 아침 자동으로 실행되게 하려면 어떻게 해야 하나요?
댓글 쓰기