VBS 명령. VBScript. VBScript 기본. 객체, 해당 메소드 및 속성

어쩐지 완전 앞서가서 두 개는 안 알려줬어 대화 상자 기능: MsgBox 및 InputBox. 이 매우 짧은 강의에서는 이 두 가지 기능에 대한 모든 장치에 대해 설명하겠습니다. 대화 상자를 만드는 다른 방법도 있지만 이 방법에는 다음이 필요합니다. WSH 개체에 대해서는 다음 강의에서 논의하겠습니다.

메시지박스 기능

메시지를 표시하는 가장 일반적인 기능입니다. 물론 그보다 더 복잡하다. WScript 개체 에코, 하지만 그녀에게는 그 물건도 필요하지 않습니다.
통사론: MsgBox (프롬프트[, 버튼][, 제목][, 도움말 파일, 컨텍스트])

  • 즉각적인- 메시지 텍스트.
  • 버튼— 표시된 버튼 및 창 모드.
  • 제목- 창의 이름입니다.
  • 도움말 파일— 도움말 파일(*.hlp)
  • 문맥— 도움말 섹션 번호.

매개변수 버튼여러 값을 동시에 취할 수 있습니다. 이를 표시하려면 "+" 기호를 사용하거나 단순히 값의 합계를 사용하십시오. 이 매개변수의 값은 다음과 같습니다.

대화 상자(표시 버튼)의 상수:

  • vbOKOnly— 값 0. 확인 버튼을 표시합니다.
  • vbOK취소— 값 1. 표시 버튼: 확인 및 취소.
  • vbAbort재시도무시— 값 2. 표시 버튼: 중단, 반복 및 건너뛰기.
  • vbYesNoCancel— 값 3. 표시 버튼: 예, 아니요 및 취소.
  • vb예아니요— 값 4. 표시 버튼: 예 및 아니요.
  • vb재시도취소— 값 5. 표시 버튼: 반복 및 취소.

대화 상자의 상수(표시된 아이콘):

  • vbCritical— 값 16. 중지 표시 아이콘을 표시합니다.
  • vb질문— 값 32. 물음표 아이콘을 표시합니다.
  • vb느낌표— 값 48. 느낌표 아이콘을 표시합니다.
  • vb정보— 값 64. 정보 표시 아이콘을 표시합니다.

대화 상자의 상수(기본 버튼):

  • vbDefaultButton1— 값 0. 첫 번째 버튼이 기본적으로 선택됩니다.
  • vbDefaultButton2— 값 256. 두 번째 버튼이 기본적으로 선택되어 있습니다.
  • vbDefaultButton3— 값 512. 세 번째 버튼이 기본적으로 선택되어 있습니다.
  • vbDefaultButton4— 값 768. 기본적으로 네 번째 버튼이 선택되어 있습니다.

대화 상자의 상수(창 모드):

  • vbApplicationModal— 값 0. 모달 모드로 표시됩니다.
  • vbSystemModal— 값 4096. 모달 모드로 표시되며 모든 애플리케이션 상단에 위치합니다.

다른:

  • 값 262144- 모든 창문 위에.
  • 값 524288— 창의 텍스트가 오른쪽 가장자리에 표시됩니다.

매개변수는 주목할 가치가 있습니다. 버튼동일한 카테고리에서 여러 값을 허용할 수 없습니다. 이 값은 단순히 합산됩니다. 즉, 여러 개의 버튼이나 아이콘 세트를 동시에 설치할 수 없습니다.

"VBScript 레슨 번호 16: "함수 MsgBox 및 InputBox "file_1.vbs"************************************ * ********************** MsgBox "안녕하세요", 5+16, "제목" MsgBox "안녕하세요", vbRetryCancel+16, "제목" MsgBox "안녕하세요" " , vbRetryCancel+524288, "제목" MsgBox "안녕하세요", vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288, "제목" MsgBox "안녕하세요", 528706, "제목"

"********************************************************

"VBScript 강의 #16:

"MsgBox 및 InputBox 기능

"file_1.vbs

"********************************************************

MsgBox "안녕하세요" , 5 + 16 , "제목"

MsgBox "안녕하세요" , vbRetryCancel + 16 , "제목"

MsgBox "안녕하세요" , vbRetryCancel + 524288 , "제목"

MsgBox "안녕하세요" , vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288 , "제목"

MsgBox "안녕하세요" , 528706 , "제목"

또한 MsgBox 함수는 버튼 클릭 결과를 반환할 수 있습니다. 변수에 할당할 수 있으며 이 방법으로 누른 버튼을 결정할 수 있습니다.

누른 버튼의 결과 반환(상수):

  • vbOK— 값 1. 확인 버튼.
  • vb취소— 값 2. 취소 버튼.
  • vb중단— 값 3. 중단 버튼.
  • vb재시도— 값 4. 반복 버튼.
  • vb무시— 값 5. 건너뛰기 버튼.
  • vb예— 값 6. 예 버튼.
  • vb아니요— 값 7. 버튼이 없습니다.

"**************************************************** ******* "VBScript 강의 번호 16: "MsgBox 및 InputBox 함수 "file_2.vbs"**************************** *********** ***************************** Dim Knopka Knopka = MsgBox("아무 버튼이나 누르세요 ",2,"Title") If Knopka = 3 Then MsgBox "버튼을 눌렀습니다 - 중단" ElseIf Button = 4 Then MsgBox "버튼을 눌렀습니다 - 반복" Else MsgBox "버튼을 눌렀습니다 - 건너뛰기" End If

"**************************************************** ******* "VBScript 강의 번호 16: "MsgBox 및 InputBox 함수 "file_4.vbs"**************************** *********** ***************************** Dim Dict, AboutBomb Set Dict = CreateObject(" Scripting.Dictionary") Dict.CompareMode = 1 Dict .Add "노란색", "폭탄이 폭발했습니다!" Dict.Add "빨간색", "폭탄을 해체했습니다!" Dict.Add "파란색", "폭탄이 터졌습니다." 폭발!" InputBox("폭탄이 감지되었습니다!!! 노란색, 빨간색, 파란색 또는 녹색 중 어떤 와이어를 잘라야 합니까??","폭탄이 감지되었습니다!!!","여기에 와이어 색상을 입력하세요...") If Dict.Exists (AboutBomb) then MsgBox Dict.Item(AboutBomb) else MsgBox "시력이 나쁩니다! 이런 전선은 없어요! 폭탄이 터졌습니다!!!" end if

"********************************************************

계속

비주얼 베이직 스크립트

VBS 스크립트가 필요한 이유는 무엇입니까?

VBS 스크립트는 Windows 시스템에서 사용자 작업을 자동화하는 강력한 솔루션입니다. 이 유형의 스크립트는 일반적으로 다음 용도로 사용됩니다.

  • 복잡한 시나리오 생성;
  • 다른 응용 프로그램 및 라이브러리의 개체를 사용합니다.
  • 스크립트 실행 중 창 숨기기;
  • 스크립트 로직 암호화.

VBS 스크립트는 주로 데이터 처리, 시스템 관리, 사용자 및 컴퓨터 계정 작업, 사무실 응용 프로그램과 상호 작용, 데이터베이스 작업 및 기타 복잡한 작업에 사용됩니다.

기본 조항

스크립트 언어, 내용 및 암호화에 따라 다음과 같은 유형의 스크립트가 있습니다.

  • vbs - 비주얼 베이직 스크립트
  • vbe - 암호화된 Visual Basic 스크립트
  • js - 자바 스크립트
  • jse - 암호화된 자바 스크립트
  • wsh - 스크립트 설정
  • wsf - XML ​​연합 스크립트

이 기사에서는 VBS 유형 스크립트를 살펴보겠습니다.

스크립트는 일반적으로 Windows 메모장에서 편집되지만 Visual Basic 언어 키워드를 강조 표시하고 스크립트 본문 형식을 지정하는 데 도움이 되는 Notepad2를 사용하는 것이 좋습니다. 따라서 vbs 스크립트는 *.VBS라는 일반 텍스트 파일로, 메모장에서 쉽게 편집할 수 있고 콘솔에서 이름을 두 번 클릭하거나 호출하여 실행할 수 있습니다.

위에서 설명한 것처럼 스크립트는 컴파일되지 않고 해석됩니다. 즉, 스크립트를 처리하려면 시스템에 VBS 언어 인터프리터가 있어야 하며 Windows에는 창 WScript와 콘솔 CScript라는 두 가지 인터프리터도 있습니다. 두 인터프리터는 모두 WSH(Windows 스크립트 호스트)입니다.

기본적으로 모든 스크립트는 WScript를 통해 실행됩니다. 즉, 설정이 필요하지 않지만 콘솔 창에서 스크립트를 실행하려면 CScript를 통해 실행하거나 CScript를 기본 인터프리터로 설정해야 합니다. 이렇게 하려면 명령줄에서 다음을 실행해야 합니다.

C스크립트 //H:C스크립트

그 후에는 모든 스크립트가 콘솔 모드에서 실행됩니다. 창 모드로 돌아가는 방법은 다음 명령으로 수행됩니다.

C스크립트 //H:W스크립트

다음 규칙은 Visual Basic에서 작동합니다.

  • 줄 길이는 제한되지 않습니다.
  • 대소문자는 구분되지 않습니다.
  • 매개변수 사이의 공백 수는 고려되지 않습니다.
  • 명령줄은 끊어질 수 있으며, 중단 위치에 "_" 기호를 삽입해야 합니다.
  • 변수 이름의 최대 길이는 255자입니다.
  • 코멘트는 " " " 기호로 표시됩니다.

" === 스크립트 정보 헤더 === " 스크립트 이름: " 스크립트 이름; " 날짜: " 수정 날짜; " 작성자: " 작성자; " 설명: " 설명; " === 초기화 블록 === 옵션 명시적 " 변수의 자동 생성을 금지하는 " 지시문; 어둑한 " 변수 선언; Dim () " 배열 선언; 설정 " 개체 연결; " === 스크립트 메인 로직 === " 스크립트 본문; " === 함수 및 프로시저 === " 프로시저 및 함수;

변수

기본적으로 스크립트의 변수는 Option Explicit 지시문에서 금지하지 않는 한 스크립트 본문에서 처음 사용될 때 자동으로 선언됩니다. 스크립트 시작 부분에서 Option Explicit 지시문을 선언하는 경우 다음 구성을 사용하여 모든 변수를 미리 정의해야 합니다.

어둑한 " 모든 서브루틴에 액세스할 수 있는 변수; 공개 " 모든 서브루틴에 액세스할 수 있는 변수; Private " 현재 프로그램과 해당 서브루틴에서만 액세스할 수 있는 변수입니다.

상수는 다음 구성을 사용하여 스크립트 시작 부분에 선언됩니다.

상수 = " 모든 서브루틴에서 사용할 수 있는 상수, Public Const = " 모든 서브루틴에서 사용할 수 있는 상수, Private Const = "현재 프로그램에서만 액세스할 수 있는 상수"와 해당 서브루틴입니다.

변수 유형은 첫 번째 값이 입력된 후 자동으로 할당됩니다. Visual Basic에는 다음과 같은 데이터 형식이 있습니다.

  • 비어 있음 - 초기화되지 않은 변수;
  • null - 빈 변수;
  • 부울 - 논리 유형, 가능한 값: False, True 또는 0, 1;
  • 바이트 - 8비트 부호 없는 정수, 가능한 값: 0 .. 255;
  • 정수 - 32비트 정수, 가능한 값: -32768 .. 32767;
  • long - 64비트 정수, 가능한 값: -2147483648 .. 2147483647;
  • 통화 - 화폐 유형, 가능한 값: -922337203685477.5808 ~ 922337203685477.5807;
  • 단일 - 부동 소수점 숫자, 가능한 값: 음수의 경우 -3.402823e38 .. -1.401298e-45, 양수의 경우 1.401298e-45 .. 3.402823e38;
  • double - 부동 소수점 숫자, 가능한 값: 음수의 경우 1.79769313486232e308 .. -4.94065645841247e-324, 양수의 경우 4.94065645841247e-324 .. 1.79769313486232e308;
  • 날짜 - 날짜, 가능한 값: 1900년 1월 1일 및 9999년 1월 31일;
  • 문자열 - 문자열 변수, 최대 20억 문자까지 가능합니다.
  • 개체 - 개체에 대한 포인터입니다.
  • 오류 - 오류 코드입니다.

데이터의 유형 준수 여부를 확인할 수 있을 뿐만 아니라 값이 허용하는 경우 한 유형에서 다른 유형으로 변환할 수도 있습니다. 데이터 유형에 대한 작업에는 다음 명령이 사용됩니다.

변수 유형( ) " 변수 유형 번호를 반환합니다. TypeName( ) " 변수 유형 이름을 반환합니다. IsArray( ) " 변수가 배열인지 확인합니다. IsDate( ) " 변수가 날짜인지 확인합니다. IsEmpty( ) " 변수가 초기화되지 않았는지 확인합니다. IsNull( ) " 변수가 비어 있는지 확인; IsNumeric( ) " 변수가 숫자인지 확인; IsObject( ) " 변수가 객체인지 확인; CCur( ) " 통화 유형으로 변환; CBool( ) " 변수를 불리언 유형으로 변환; CByte( ) "변수를 바이트 유형으로 변환; CDate( ) "변수를 날짜 유형으로 변환; CDbl( ) " 변수를 double 유형으로 변환; CInt( ) "변수를 정수형으로 변환; CLng( ) "변수를 긴 유형으로 변환; CSng( ) "변수를 단일 유형으로 변환; CStr( ) "변수를 문자열 유형으로 변환합니다.

위에서 언급했듯이 Visual Basic은 변수 이름에 엄격한 제한을 두지 않지만 동시에 스크립트 텍스트에서 데이터 유형을 쉽게 식별할 수 있도록 변수 이름에 대한 지침이 있습니다. 이렇게 하려면 변수 유형을 결정하는 조건 기호를 변수 이름 앞에 붙이는 것이 좋습니다.

  • iValueName - 숫자 유형
  • sValueName - 문자열 유형
  • bValueName - 부울 유형
  • dValueName - 날짜
  • oValueName - 개체
  • cValueName - 상수
  • aArrayName - 배열

VBS 스크립트에서는 목록, 테이블 및 더욱 복잡한 구조를 저장할 수 있는 변수 배열을 사용할 수 있습니다. 1차원 배열(목록)은 동적일 수 있습니다. 즉, 스크립트가 실행될 때 차원이 변경될 수 있습니다. 모든 배열은 Dim 명령으로 선언됩니다.

어둑한

배열 사용 예

Dim aMyArray1(10,10) "는 11x11 크기의 정적 배열을 생성하고 Dim aMyArray2() "는 동적 배열을 생성합니다. aMyArray1(0,0) = "Hello" " 배열 채우기; aMyArray1(0,1) = "People" " 배열 채우기; aMyArray1(1,0) = "World" " 배열을 채웁니다.

동적 배열을 사용하기 전에 ReDim 명령을 사용하여 현재 차원을 표시해야 합니다. 그런 다음 스크립트의 어느 곳에서나 배열을 다시 포맷할 수 있습니다. 전체 배열을 지우거나 Preserve 명령을 사용하여 이전 셀 값을 저장할 수 있습니다.

ReDim aMyArray2(0) " 한 요소에서 배열을 형성합니다. aMyArray2(0) = "Hello" " 배열을 채웁니다. ReDim aMyArray2(1) " 이전 배열을 제거하고 다른 요소에서 새 배열을 형성합니다." aMyArray2(0) = "Hello" " 배열 채우기; aMyArray2(1) = "World" " 배열 채우기; ReDim Preserve aMyArray2(2) " 세 요소의 배열을 형성하고 " 요소가 있던 셀에 요소의 이전 값을 남겨 둡니다. aMyArray2(1) = "!" " 배열 채우기; Erase aMyArray2 " 배열 삭제.

배열의 차원을 알아내기 위해 일반적으로 UBound 함수를 사용합니다. 이 함수는 데이터 작업을 위한 다른 함수와 함께 아래에서 설명됩니다.

조건에 따른 분기

완전한 단일 스크립트는 분기 없이는 수행할 수 없습니다. 분기는 일부 기본 조건이 충족되거나 충족되지 않을 때 올바른 경로를 선택하는 데 도움이 됩니다. 즉, 분기는 스크립트의 논리를 구현합니다. VBS 스크립트는 여러 가지 분기 메커니즘을 구현합니다. 순서대로 살펴보겠습니다.

조건에 따라 수행되는 하나의 작업에 대한 구성:

만약에 그 다음에

조건에 따라 수행되는 여러 작업에 대한 설계:

만약에 그 다음에 다음과 같은 경우 종료

포크 디자인:

만약에 그 다음에 또 다른 다음과 같은 경우 종료

"여러 경로로 분기" 구성(옵션 cIf):

만약에 그 다음에 ElseIf 그 다음에 또 다른 다음과 같은 경우 종료

위의 모든 구성에는 다음 규칙이 적용됩니다. “조건이 충족되면 , 그런 다음 작업 목록을 생성합니다. , 현재 조건 블록 아래에 있습니다. 현재 조건이 충족되지 않으면 작업 목록으로 이동합니다. Else 명령에 따라."

"여러 경로로 분기" 설계(선택 옵션):

케이스 선택 사례 사례 그렇지 않은 경우 선택 종료

이 구성에는 다음 규칙이 적용됩니다. 값과 동일 을 클릭한 다음 작업 목록을 수행합니다. 이 값 미만이면 다음 값 확인으로 이동 ."

사이클

루프는 일반적으로 반복되는 작업을 구성하거나 배열 요소를 반복하는 데 사용됩니다. VBS 스크립트에는 일반 루프, 반복 횟수를 알 수 없는 루프, 조건부 루프 등 여러 유형의 루프가 구성되어 있습니다.

일반 루프는 For - Next 구조로 구성되며 인수는 카운터 이름( ), 초기 카운터 값( ), 최종 카운터 값( ) 및 필요한 경우 카운터 단계(단계 ).

을 위한 = 에게 다음

루프 작동 중에 값 열거를 중지해야 하는 경우 Exit For 명령을 사용하여 수행할 수 있습니다.

을 위한 = 에게 만약에 그런 다음 종료 다음

반복 횟수를 알 수 없는 루프는 일반적으로 차원을 알 수 없는 개체 컬렉션의 모든 값을 반복하는 데 사용됩니다. 이 구조는 모든 값에 대해 반복됩니다( ) 루프 매개변수로 전달된 배열( ).

각각 ~ 안에 다음

oFiles WScript.Echo oCurrentFile.Name의 각 oCurrentFile에 대해 다음

조건부 루프는 특정 조건이 충족될 때 데이터를 처리하는 데 사용됩니다. 이러한 루프에는 두 가지 유형이 있습니다. 사이클 시작 부분의 확인과 끝 부분의 확인입니다.

조건이 충족될 때까지 반복하고 처음부터 확인합니다.

하는 동안 고리

조건이 충족될 때까지 반복하고 처음부터 확인합니다.

할 때까지 고리

위에서 언급했듯이 조건은 루프의 끝에 배치될 수 있습니다. 이 경우 루프 본문은 적어도 한 번 실행됩니다. 일반 루프와 마찬가지로 조건이 있는 루프는 Exit Do 명령을 사용하여 중단할 수 있습니다.

하다 만약에 그런 다음 종료하세요. 루프 종료

내장된 기능

데이터로 작업하고 해당 프로시저와 기능을 구축하기 위해 Visual Basic 개발자는 이미 스크립트의 기본, 즉 기본 기능을 관리했습니다. VBS 스크립트는 날짜, 문자열, 숫자 작업은 물론 기본 입출력 절차 및 네트워킹 절차를 위한 기능을 제공합니다. 내장된 기능을 간단히 살펴보겠습니다.

날짜 처리 기능:

Date "는 현재 날짜를 반환하고 Time "은 현재 시간을 반환합니다. 이제 "는 현재 날짜와 시간을 반환합니다. DateDiff( , , ) " 날짜 간의 차이를 반환합니다. MonthName( ) " 월 이름을 반환합니다. WeekDayName( , , ) " 요일 이름을 반환합니다. Day( ) " 지정된 날짜로부터 일자를 반환합니다. Month( ) " 지정된 날짜로부터 월을 반환합니다. ) " 지정된 날짜로부터 연도를 반환합니다. Hour( ) " 지정된 날짜로부터 시간을 반환합니다. Minute( ) " 지정된 날짜로부터 분을 반환합니다. Second( ) " 지정된 날짜로부터 초를 반환합니다.

문자열 처리 기능:

오름차순( ) " 문자의 ANSI 코드를 반환합니다. Chr( ) " ANSI 코드로 문자를 반환합니다. InStr( , ) " 지정된 문자열에서 하위 문자열의 위치를 ​​반환합니다. InStrRev( , ) " 문자열 끝에서 시작하여 지정된 문자열의 하위 문자열 위치를 " 반환합니다. 가입하다( , ) " 배열을 문자열로 변환; Len( ) " 문자열 길이를 반환합니다. LCase( ) " 문자열을 작은 " 문자로 구성된 문자열로 변환합니다. U케이스( ) " 문자열을 큰 " 문자로 구성된 문자열로 변환합니다. 왼쪽( , ) " 문자열의 시작 부분부터 지정된 수의 문자를 반환합니다. 오른쪽( , ) " 문자열 끝에서부터 지정된 수의 문자를 반환합니다. 중간( , , ) " 지정된 줄 문자 번호에서 " 지정된 문자 수를 반환합니다. 바꾸다( , , [, Params]) " 지정된 문자열의 하위 문자열을 바꿉니다. Space( ) " 지정된 공백 수의 문자열; Split( , [, Params]) " 문자열을 배열로 변환; String( , ) " 지정된 수의 정의된 문자로 구성된 문자열; Srt역방향( ) " 선을 미러링; Trim( ) " 줄 왼쪽과 오른쪽의 공백을 자릅니다. LTrim( ) " 줄 왼쪽의 공백을 자릅니다. RTrim( ) " 줄 오른쪽의 공백을 자릅니다.

수학 함수:

Randomize "는 난수 엔진을 초기화합니다(아무 것도 반환하지 않음). Rnd "는 0에서 1까지 정수가 아닌 무작위 값을 반환합니다. Atn( ) "숫자의 아크탄젠트 계산; Cos( ) "숫자의 코사인 계산; Sin( ) "숫자의 사인을 계산합니다. Exp( ) "숫자의 자연 로그 계산; Log( ) "숫자의 십진수 로그를 계산합니다. Sqr( ) "숫자의 제곱근을 계산합니다. Abs( ) "숫자의 절대값을 계산합니다. Hex( ) "숫자의 16진수 값을 계산합니다. Int( ) " 숫자 반올림; 수정( ) "숫자의 정수 부분을 계산합니다.

물론 언급된 기능 외에도 스크립트는 가장 간단한 수학 및 논리 연산을 모두 지원합니다.

  • = - 할당 연산자;
  • + - 두 숫자의 합
  • - - 두 숫자 빼기;
  • * - 두 숫자의 곱셈;
  • / - 두 숫자의 나누기;
  • \ - 두 숫자의 정수 나누기;
  • Mod - 두 숫자를 나눈 나머지;
  • ^ - 지수화;
  • & - 두 문자열을 연결합니다.
  • Is - 두 개체의 비교입니다.
  • Eqv - 두 표현식의 비교;
  • Not - 논리적 부정 연산;
  • 그리고 - 논리적 결합 연산;
  • 또는 - 분리의 논리적 연산;
  • Xor - 논리적 제외 작업입니다.
  • Imp는 함축의 논리적 연산입니다.

연산 순서는 모든 프로그래밍 언어에서와 같이 결정됩니다. 먼저 괄호 안의 연산이 수행되고, 그 다음 함수가 계산되고, 그 다음 곱셈과 나눗셈, 덧셈과 뺄셈이 뒤따르고 논리 연산이 계산을 완료합니다.

맞춤 기능

Visual Basic으로 작성된 스크립트를 사용하면 사용자 정의 프로시저와 함수를 정의하고 이를 기본 프로그램에서 호출할 수 있습니다. 프로시저와 함수 사이에는 실질적으로 차이가 없습니다. 차이점은 이러한 루틴의 논리적 의미에 있습니다. 함수는 일반적으로 일부 값을 계산하는 데 사용되며 프로시저는 작업을 수행하는 데 사용됩니다. 그러나 프로시저와 함수 모두 작업을 수행하고 값을 기본 프로그램에 전달할 수 있습니다. 그럼에도 불구하고 우리는 이러한 서브루틴의 목적, 즉 계산을 위한 함수, 작업을 위한 절차를 잊어서는 안 됩니다.

함수는 함수 연산자에 의해 선언되고 그 뒤에 사용자 정의 함수의 이름이 옵니다. 이 이름은 Visual Basic 언어의 예약어와 일치해서는 안 되며, 서브루틴에 매개변수로 전달될 변수가 표시됩니다. 이 구성에서 변수는 서브루틴 변수(함수에 대한 선언 변수)에 대한 메모리 셀을 할당하는 것을 의미합니다. 하위 프로그램의 본문에서 스크립트의 구조는 일반 프로그램과 다르지 않습니다. 여기서는 추가 변수를 선언하고, 작업을 수행하고, 다른 기능과 프로시저를 사용할 수 있습니다. 본문 끝에는 다음을 할당하는 연산자가 있어야 합니다. 함수를 어떤 값으로 변환 - 이 값은 메인 프로그램에 반환됩니다. Exit Function 문을 사용하여 함수 실행을 중단할 수 있지만 이 경우 함수에 일부 값을 할당해야 합니다. 그렇지 않으면 스크립트에서 오류가 발생합니다. 함수는 End Function 문으로 끝납니다.

기능 정의

기능 () 만약에 그 다음에 = 종료 기능 종료 조건 = 기능 종료

함수 호출

= ()

프로시저는 함수와 유사하게 정의되지만 -Sub 연산자가 다릅니다. 프로시저는 메인 프로그램에 어떤 값도 반환하지 않기 때문에 프로시저를 종료하기 전에 할당문이 없습니다. Exit Sub 명령을 사용하여 프로시저 실행을 중단할 수 있으며 전체 구성은 End Sub 연산자로 끝납니다. 기본 프로그램에서 프로시저를 호출하려면 Call 키워드와 필요한 인수와 함께 함수 이름을 사용해야 합니다. (Call 키워드는 선택사항이지만 잘못된 프로시저 호출을 피하기 위해 사용하는 것이 좋습니다.)

절차 정의

보결 () 만약에 그 다음에 하위 끝 종료 서브 끝

프로시저 호출

()

그런데 프로시저와 함수는 스크립트의 마지막 부분에 위치해야 합니다.

서브루틴이 실행되는 동안 서브루틴에 동일한 이름의 변수가 포함되어 있어도 스크립트의 주요 부분에 있는 변수 값은 변경되지 않습니다. 서브루틴이 메인 스크립트 변수의 값을 변경할 수 있으려면 서브루틴 인수에서 변수 속성을 ByRef로 설정해야 합니다. 기본적으로 모든 변수는 ByVal 속성으로 정의됩니다.

보결 (ByRef [, 인수]) = 서브 끝

이 경우 인수 메모리 셀에 대한 참조로 전달됨 - 변수 값이 기본 스크립트에서 변경됩니다. 즉, ByRef 매개변수를 사용하면 프로시저가 함수로 전환됩니다. 즉, 서브루틴은 계산 결과를 기본 프로그램에 반환합니다.

스크립트 실행 오류 처리

기본적으로 모든 오류는 스크립트에 의해 자동으로 처리되며 오류가 발생하면 스크립트 실행이 중지됩니다. 자동 오류 처리를 비활성화하려면 자동 오류 처리를 비활성화하고 오류가 있어도 스크립트를 계속하는 특수 On Error Resume Next 지시문을 사용해야 합니다. 오류를 수동으로 처리하려면 오류 상태를 저장하는 내장 Err 개체에 액세스해야 합니다. Err 개체에는 다음과 같은 속성과 메서드가 있습니다.

Number "는 마지막 오류 번호를 반환하고, Description"은 마지막 오류 설명을 반환합니다. Clear " 개체 지우기 Err; raise "는 테스트 오류를 ​​호출합니다.

수동 오류 처리의 예:

On Error Resume Next iTotalPoints = InputBox("총 포인트 수를 입력하세요") iNumberOfTests = InputBox("테스트 수를 입력하세요") iAvarage = iTotalPoints / iNumberOfTests Select Case Err.Number Case 0 " 오류 없음; WScript.Echo "Average Score = " & CStr(iAvarage) Case 11 " 0으로 나누기; WScript.Echo "테스트 횟수는 0일 수 없습니다." 사례 13 "유형 불일치; WScript.Echo "숫자가 아닌 값을 입력했습니다. "Case Else" 오류가 없습니다. WScript.Echo "알 수 없는 오류 WScript.Quit" 선택 종료

객체, 해당 메소드 및 속성

상위 Visual Basic과 마찬가지로 VBS 스크립트는 객체 지향 프로그래밍 언어입니다. 즉, 주요 개념은 객체와 클래스의 개념입니다.

클래스는 객체의 구조를 설명하는 유형입니다. 객체는 특정 동작과 표현 방식을 갖는 것을 의미합니다. 객체는 클래스의 인스턴스입니다. 클래스는 어떤 객체가 생성되는지에 따라 청사진과 비교할 수 있습니다. 일반적으로 클래스는 해당 개체가 도메인의 개체에 해당하는 방식으로 설계됩니다.

따라서 개체로 작업하려면 먼저 필수 라이브러리의 클래스를 사용하여 개체를 만들어야 합니다.

세트 = 생성객체( .)

객체에 Nothing 값을 할당하여 객체를 삭제할 수 있습니다.

세트 = 아무것도

Windows 스크립트 호스트와 함께 작동하는 모든 개체에는 메서드와 속성이 있습니다. 메소드에 액세스하려면 객체를 지정하고 그 뒤에 점(필요한 매개변수가 있는 메소드)을 지정해야 합니다.

. [, Param2, ..., ParamN] 호출 .([, Param2, ..., ParamN])

상황은 속성과 유사하지만 속성을 할당하고 변수 및 기타 속성으로 읽을 수 있습니다. 그러나 변수 및 속성의 데이터 유형을 고려해야 합니다. 그렇지 않으면 스크립트에서 데이터 유형 비호환성 오류가 발생합니다.

. = . = . = .

예. 파일 시스템 객체 생성, 폴더 생성 메소드 호출, 객체 삭제.

oFSO = CreateObject("Scripting.FileSystemObject") 설정 oFSO.CreateFolder("C:\Test") 호출 oFSO = Nothing 설정

"객체"라는 용어는 파일 시스템 논리가 아닌 스크립트 논리를 나타냅니다. 즉, "개체 삭제"라고 하면 파일 시스템의 어떤 부분을 제거하는 데 어떤 방식으로도 영향을 주지 않는 논리적 스크립트 개체를 의미합니다.

운영 체제에 어떤 라이브러리가 있는지, 라이브러리에 포함된 클래스, 해당 메서드 및 속성을 확인하려면 Microsoft Word 등의 개체 탐색기를 사용할 수 있습니다.

  1. MS 워드를 실행하세요.
  2. 메인 메뉴에서 도구 -> 매크로 -> Visual Bacis Editor를 선택하세요.
  3. 매크로 편집 창에서 보기 -> 개체 브라우저를 선택합니다.

목록에 반영되지 않은 라이브러리는 도구 -> 참고자료 메뉴를 통해 연결 가능합니다.

스크립트에는 클래스의 일부가 아닌 메소드가 있으며 스크립트 본문에서 직접 사용할 수 있습니다.

MsgBox( [, Params]) "는 화면에 창 메시지를 표시합니다. [, Params]) "는 화면에 대화 상자를 표시합니다.

텍스트를 요청하는 대화상자를 표시한 후, 입력한 텍스트가 포함된 창 메시지를 표시하는 예입니다.

MyValue = InputBox("텍스트를 입력하세요", "첫 번째 창", "텍스트를 여기에 입력해야 합니다") MyResult = MsgBox(MyValue, 1, "두 번째 창")

WScript 루트 클래스의 메서드 및 속성

WScript 루트 클래스의 메서드와 속성은 개체를 생성할 필요가 없으며 자동으로 스크립트 본문에서 직접 사용할 수 있습니다.

생성객체( .) " 객체 생성; GetObject( ) " 파일에서 객체 연결; ConnectObject( , ) "기존 개체의 이벤트에 연결합니다. DisconnectObject( ) "객체 이벤트와의 연결을 끊습니다. Echo() "는 화면에 메시지를 표시합니다. 인수 "는 스크립트 명령줄 인수의 배열을 반환하고, Name "은 스크립트 인터프리터의 이름을 반환합니다. Path "는 스크립트 인터프리터의 경로를 반환하고, FullName "은 스크립트 인터프리터의 전체 이름을 반환합니다. Version "은 스크립트 인터프리터의 버전을 반환하고 BuildVersion "은 스크립트 인터프리터의 빌드 버전을 반환합니다. ScriptName "은 스크립트 파일의 이름을 반환하고, ScriptFullName "은 스크립트 파일의 전체 이름을 반환합니다. Interactive " 스크립트의 대화형 모드를 설정하거나 반환합니다. Sleep( ) "지정된 밀리초 동안 작업을 일시 중지합니다. Quit"은 스크립트를 종료합니다.

이러한 메서드와 속성의 사용에 대해서는 다른 클래스의 예에서 더 자세히 논의하겠습니다.

Shell 클래스의 메서드 및 속성

운영 체제 작업을 위해 프로그램 시작, 레지스트리 변경, 바로 가기 생성, 시스템 폴더 및 시스템 변수 액세스, 시스템 로그 액세스와 같은 작업을 수행할 수 있는 특수 Shell 클래스가 사용됩니다. 따라서 Shell 클래스의 메서드와 속성은 다음과 같습니다.

확장환경문자열( ) " 요청된 시스템 변수의 값을 반환합니다. EnviEnvironment( ) " 시스템 변수 배열을 반환합니다. CreateShortcut( ) " 바로가기 만들기; Popup( [, Params]) " 화면에 창 메시지를 표시합니다. RegRead( ) " 레지스트리에서 값을 읽습니다. RegWrite( ,[, Type]) " 레지스트리에 값 쓰기; RegDelete( ) " 레지스트리에서 값을 제거합니다. LogEvent( ,) " 시스템 로그에 이벤트를 기록합니다. Run( [, Params]) " 새 프로세스에서 프로그램 실행; Exec( ) " 하위 콘솔에서 프로그램 시작; AppActivate( ) "창 활성화; SendKeys( <Keys>) " 활성 창에 문자를 보냅니다. CurrentDirectory "는 현재 디렉토리를 설정하거나 반환합니다. SpecialFolders()는 "서비스 폴더 배열 또는 요청된 서비스 폴더의 경로"를 반환합니다.</p><p>예. Shell 클래스의 메서드와 속성을 사용합니다.</p><p>" Shell 클래스 Set oShell = Wscript.CreateObject("WScript.Shell")의 객체 생성 " 계산기 실행 oShell.Run("Calc.exe") " Delay WScript.Sleep(100) " 메모장 실행 oShell.Run ("Notepad.exe ") " 지연 WScript.Sleep(100) " 계산기 창으로 전환 oShell.AppActivate "계산기" " 지연 WScript.Sleep(100) " 키 입력 시뮬레이션 oShell.SendKeys("1(+)2(= )") " 데스크탑 경로 수신 sDesktopPath = oShell.SpecialFolders("Desktop") " 바로가기 개체 만들기 Set oLink = oShell.CreateShortcut(sDesktopPath & "\Test.lnk") " 바로가기 설정 oLink.TargetPath = WScript .ScriptFullName oLink.WindowStyle = 1 oLink .Hotkey = "CTRL+SHIFT+T" oLink.IconLocation = "notepad.exe,0" oLink.Description = "링크 테스트" oLink.WorkingDirectory = sDesktopPath oLink.Save " 환경 개체 생성 Set oSysEnv = oShell.Environment("SYSTEM") " 화면에 프로세서 수에 대한 메시지 표시 MyResult = oShell.Popup("프로세서 수: " & oSysEnv("NUMBER_OF_PROCESSORS"), _ 3, "Message", 0) " 폴더 경로 Windows를 가져오고 화면에 메시지 표시 MyResult = oShell.Popup("Windows 디렉터리: " & _ oShell.ExpandEnvironmentStrings("%WINDIR%"), 3, "Message" , 0) " 레지스트리 키를 읽고 해당 값을 WScript 화면에 표시합니다. Echo oShell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductID") " 레지스트리에 문자열 값 쓰기 MyResult = oShell.RegWrite( "HKCU\ScriptEngine\Value", "My Value") " 레지스트리에 숫자 값 쓰기 MyResult = oShell.RegWrite("HKCU\ScriptEngine\Key", 1, "REG_DWORD") " 레지스트리 키 삭제 MyResult = oShell. RegDelete("HKCU\ScriptEngine\") " 시스템 로그에 이벤트 쓰기 MyResult = oShell.LogEvent(0 , "테스트 스크립트 완료")</p><h3>Network 클래스의 메서드 및 속성</h3> <p>이미 살펴보았듯이 VBS 스크립트는 Windows 셸에서 작동할 수 있지만 이것이 유일한 기능은 아닙니다. Network 클래스를 사용하면 네트워크 개체에 액세스하고 관리할 수 있습니다. Network 클래스를 자세히 살펴보겠습니다.</p><p>ComputerName "은 컴퓨터 이름을 반환하고 UserDomain "은 도메인 이름을 반환합니다. UserName "은 사용자 이름을 반환하고 EnumNetworkDrives"는 매핑된 네트워크 드라이브 목록을 반환합니다. 지도네트워크드라이브( <LocalName>, <RemoteName>, ) "네트워크 리소스 연결; RemoveNetworkDrive( <Name>, , ) "네트워크 리소스 비활성화; EnumPrinterConnections"는 네트워크 프린터 목록을 반환합니다. Windows프린터연결 추가( <PrinterPath>) "네트워크 프린터 연결; AddPrinterConnection( <LocalName>, <RemoteName>[, UpdateProfile, User, Password] " 네트워크 프린터를 지정된 포트에 연결합니다. RemovePrinterConnection( <Name>[,Force, UpdateProfile]) " 네트워크 프린터 비활성화; SetDefaultPrinter( <PrinterName>) "기본 프린터를 선택합니다.</p><p>예. Network 클래스의 메서드와 속성을 사용합니다.</p><p>" Network Set 클래스의 개체 만들기 oNetwork = WScript.CreateObject("WScript.Network") " 컴퓨터 이름에 대한 메시지 표시 WScript.Echo "Computer Name = " & oNetwork.ComputerName " 컴퓨터 이름에 대한 메시지 표시 현재 사용자 WScript.Echo "User Name = " & oNetwork.UserDomain & "\" & oNetwork.UserName " 네트워크 드라이브 매핑 oNetwork.MapNetworkDrive "Z:" "\\Server\Share" " 매핑된 네트워크 드라이브 컬렉션 가져오기 Set oDrives = oNetwork.EnumNetworkDrives " 매핑된 네트워크 드라이브에 대한 메시지 표시 For i=0 To oDrives.Count -1 2단계 WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1) 다음 " 네트워크 드라이브 제거 oNetwork.RemoveNetworkDrive "Z:" " 네트워크 프린터 연결 oNetwork.AddPrinterConnection "LPT1", "\\Server\Printer" " 기본 프린터 설정 oNetwork.SetDefaultPrinter "\\Server\Printer" " 가져오기 연결된 프린터 모음 oPrinters = oNetwork.EnumPrinterConnections 설정</p><h3>FileSystemObject 클래스의 메서드 및 속성</h3> <p>시나리오에서는 컴퓨터 디스크에서 무언가를 생성, 삭제, 이동 또는 변경해야 하는 경우가 매우 자주 발생합니다. 이 문제는 파일 시스템에서 작동하도록 설계된 FileSystemObject 클래스를 사용하여 해결할 수 있습니다. 이 클래스가 만들 수 있는 개체는 다음과 같습니다.</p> <ul><li>FileSystemObject - 일반적으로 디스크, 폴더 및 파일을 생성, 삭제, 관리할 수 있는 기본 개체입니다.</li> <li>드라이브 - 시스템 드라이브에 대한 정보를 수집할 수 있는 개체입니다.</li> <li>드라이브 - 시스템 드라이브 목록을 저장하는 개체입니다.</li> <li>폴더 - 폴더를 생성, 삭제, 이동할 수 있을 뿐만 아니라 폴더와 폴더 내용에 대한 정보를 수집할 수 있는 개체입니다.</li> <li>폴더 - 지정된 폴더의 하위 폴더 목록을 저장하는 개체입니다.</li> <li>파일 - 파일을 생성, 삭제, 이동하고 파일에 대한 정보를 수집할 수 있는 개체입니다.</li> <li>파일 - 지정된 폴더에 파일 목록을 저장하는 개체입니다.</li> <li>TextStream은 텍스트 파일을 읽고 생성할 수 있는 개체입니다.</li> </ul><p>FileSystemObject 클래스(주 개체)의 메서드 및 속성:</p><p>빌드경로( <Path>, <Name>) "는 지정된 경로에 이름을 추가합니다. GetAbsolutePathName( <PathSpec>) "는 전체 경로를 반환합니다. GetBaseName( <Path>) "는 지정된 경로에 있는 폴더 또는 파일의 이름(확장자 없음)을 반환합니다. GetDrive( <DriveSpec>) "는 Drive 개체를 생성합니다. GetDriveName( <Path>) "는 지정된 경로에 있는 드라이브의 이름을 반환합니다. GetExtensionName( <Path>) "는 지정된 경로의 파일 확장자를 반환합니다. 파일 가져오기( <FileSpec>) "는 File 객체를 생성합니다; GetFileName( <PathSpec>) "지정된 경로의 파일 이름(확장자 없음)을 반환합니다." 폴더 가져오기( <FolderSpec>) "는 폴더 객체를 생성합니다. GetParentFolderName( <Path>) "는 지정된 경로의 파일이나 폴더가 저장되어 있는 " 폴더의 이름을 반환합니다. GetSpecial폴더( <FolderSpec>) "는 지정된 서비스 폴더에 폴더 객체를 생성합니다. GetTempName "은 무작위로 생성된 파일 이름을 반환합니다. 드라이브가 존재함( <DriveSpec>) " 디스크 존재 여부를 확인합니다. FolderExists( <FileSpec>) "는 폴더의 존재를 확인합니다. CopyFolder( <Source>, <Destination>[, 덮어쓰기]) "는 폴더를 복사합니다. MoveFolder( <Source>, <Destination>) " 폴더를 이동합니다. DeleteFolder( <FolderSpec>[, Force]) "는 폴더를 삭제합니다. CreateFolder( <FolderName>) " 폴더를 생성합니다. FileExists( <Filespec>) " 파일 존재 여부를 확인합니다. CopyFile( <Source>, <Destination>[, 덮어쓰기]) "는 파일을 복사합니다. MoveFile( <Source>, <Destination>) " 파일을 이동합니다. 삭제파일( <FileSpec>[, Force]) "는 파일을 삭제합니다. CreateTextFile( <FileName>[, 덮어쓰기, UnioCode]) "는 텍스트 파일을 생성합니다. OpenTextFile( <FileName>[, IOMode, Create, Format]) "는 읽기 또는 쓰기를 위해 텍스트 파일을 엽니다.</p><p>FileSystemObject 클래스의 Drives, Folders 및 Files 개체는 드라이브, 폴더 및 파일에 대한 정보를 저장하며 주로 파일 시스템에 대한 정보를 수집하는 데 사용됩니다. 여기에는 두 가지 속성만 있습니다.</p><p>Count "는 컬렉션의 항목 수를 반환합니다. Item( <ObjectName>) " 컬렉션에서 지정된 인덱스가 있는 레코드를 반환합니다(사용되지 않음). " For Each 루프는 컬렉션의 요소를 반복하는 데 사용됩니다.</p><p>개체 컬렉션이 무엇인지 더 명확하게 하기 위해 C 드라이브의 루트에 있는 파일 목록을 표시하는 예를 고려해 보세요.</p><p>" FileSystemObject Set 클래스의 객체 생성 oFSO = CreateObject("Scripting.FileSystemObject") " 폴더 세트 객체 생성 oFolder = oFSO.GetFolder("C:\") " 파일 컬렉션 가져오기 Set oFilesCollection = oFolder.Files " 컬렉션의 요소 수 가져오기 sResult = sResult & oFilesCollection.Count & " files in C:\" & vbCrLf " 컬렉션에서 각 파일의 특성 읽기 For Each oFile in oFilesCollection sResult = sResult & oFile.Name & vbTab sResult = sResult & oFile.Size & vbCrLf Next " 결과를 화면에 출력 MsgBox(sResult)</p><p>Drive 개체는 로컬 또는 네트워크 드라이브의 속성에 대한 액세스를 제공합니다.</p><p>AvailableSpace "는 사용자가 사용할 수 있는 여유 디스크 공간의 양을 반환하고 DriveLetter "는 드라이브 문자를 반환합니다. DriveType "은 드라이브 유형을 반환하고 FileSystem "은 드라이브의 파일 시스템 유형을 반환합니다. FreeSpace "는 사용 가능한 디스크 공간의 양을 반환하고 IsReady "는 디스크의 가용성을 반환합니다. Path "는 디스크 경로를 반환하고, RootFolder "는 디스크의 루트를 가리키는 Folder 객체를 생성합니다. SerialNumber "는 디스크의 일련 번호를 반환하고 ShareName "은 디스크의 네트워크 이름을 반환합니다. TotalSize "는 디스크 용량을 바이트 단위로 반환하고 VolumeName "은 디스크 레이블을 반환하거나 설정합니다.</p><p>폴더 개체는 폴더의 모든 속성에 대한 액세스를 제공하고 폴더에 대한 작업을 수행할 수도 있습니다.</p><p>속성 "은 폴더의 속성을 반환하고 DateCreated"는 폴더 생성 날짜를 반환합니다. DateLastAccessed "는 폴더에 마지막으로 액세스한 날짜를 반환하고 DateLastModified"는 폴더가 수정된 날짜를 반환합니다. Drive "는 폴더의 드라이브 문자를 반환하고 Files "는 폴더에 있는 파일 모음을 반환합니다. IsRootFolder "는 폴더가 디스크의 루트인 경우 True를 반환하고, Name "은 폴더 이름을 반환합니다. ParentFolder는 " 상위 폴더를 가리키는 폴더 객체를 생성합니다. Path "는 폴더 경로를 반환하고 ShortName "은 폴더 이름을 8.3 형식으로 반환합니다. ShortPath "는 8.3 형식으로 폴더 경로를 반환하고 Size "는 폴더 크기를 반환합니다. SubFolders "는 하위 폴더 모음을 반환하고 Type "은 폴더 유형을 반환합니다. 복사( <Destination>[, 덮어쓰기]) "는 폴더를 복사합니다. Move( <Destination>) " 폴더를 이동하고 삭제( <Force>) " 폴더를 삭제합니다. CreateTextFile( <FileName>[, 덮어쓰기, UniCode]) "는 폴더에 텍스트 파일을 생성합니다.</p><p>File 개체는 Folder 개체와 유사합니다. 즉, 파일의 모든 속성에 대한 액세스를 제공하고 파일에 대한 작업을 수행할 수도 있습니다.</p><p>Attributes "는 파일의 속성을 반환하고 DateCreated"는 파일 생성 날짜를 반환합니다. DateLastAccessed "는 파일이 마지막으로 액세스된 날짜를 반환하고 DateLastModified"는 파일이 수정된 날짜를 반환합니다. Drive "는 파일의 드라이브 문자를 반환하고, Name "은 파일 이름을 반환합니다. ParentFolder는 " 상위 폴더를 가리키는 폴더 객체를 생성합니다. Path "는 파일 경로를 반환하고 ShortName "은 파일 이름을 8.3 형식으로 반환합니다. ShortPath "는 8.3 형식의 파일 경로를 반환하고, Size"는 파일 크기를 반환합니다. Type "은 파일 형식을 반환합니다. <Destination>[, 덮어쓰기]) "는 파일을 복사합니다. Move( <Destination>) " 파일을 이동합니다. 삭제( <Force>) " 파일을 삭제합니다. OpenAsTextStream() "은 읽거나 쓰기 위해 텍스트 파일을 엽니다.</p><p>TextStream 개체는 파일 내용에 액세스하기 위한 도구입니다. 이를 사용하여 파일을 읽고 수정할 수 있습니다.</p><p>AtEndOfLine "은 줄 끝에 도달했는지 여부를 표시하고 AtEndOfStream"은 줄 끝에 도달했는지 여부를 표시합니다. Column "은 읽기 커서가 있는 열의 번호를 반환하고, Line "은 읽기 커서가 있는 줄의 번호를 반환합니다. Close "는 파일을 닫고 다른 프로세스를 위해 파일을 해제합니다. 읽기( <CharactersNumber>) "는 읽기 커서의 " 위치부터 시작하여 지정된 수의 문자를 읽습니다. ReadAll "은 전체 파일을 읽습니다. ReadLine "은 읽기 커서가 있는 줄을 읽습니다. 건너뛰다( <CharactersNumber>) "는 읽기 커서의 " 위치부터 시작하여 지정된 수의 문자를 건너뜁니다. SkipLine "은 읽기 커서가 있는 줄을 건너뜁니다. <String>) " 한 줄을 씁니다. WriteLine( <String>) "는 한 줄을 쓰고 쓰기 커서를 다음 줄로 이동합니다. WriteBlankLines( <Lines>) "는 지정된 수의 빈 줄을 씁니다.</p><p>FileSystemObject 클래스의 모든 메서드와 속성에 대해 알아봤습니다. 이 클래스를 사용하는 예를 살펴보겠습니다.</p><p> " 시스템 폴더에 대한 상수 코드 설정 Const WindowsFolder = 0 Const SystemFolder = 1 Const TemporaryFolder = 2 " 텍스트 파일에 대한 액세스 유형에 대한 상수 코드 설정 Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 " FileSystemObject 클래스의 객체 생성 Set oFSO = CreateObject(" Scripting.FileSystemObject") " 드라이브 컬렉션 검색 Set DrivesCollection = oFSO.Drives " 레이블 또는 네트워크 이름을 얻기 위해 각 드라이브 처리 For Each oDrive in DrivesCollection sResult = sResult & oDrive.DriveLetter & ": " If oDrive.DriveType = Remote Then sResult = sResult & oDrive.ShareName & vbCrLf ElseIf oDrive.IsReady Then sResult = sResult & oDrive.VolumeName & vbCrLf Else sResult = sResult & vbCrLf End If Next " 결과 표시 Wscript.Echo(sResult) " 드라이브 객체 생성 C: Set oDrive = oFSO.GetDrive("C") sResult = oDrive.DriveLetter & ": - " " 드라이브 유형 가져오기 C: 사례 선택 oDrive.DriveType 사례 0: sResult = sResult & "Unknown - " 사례 1: sResult = sResult & "Removable - " 사례 2: sResult = sResult & "Fixed - " 사례 3: sResult = sResult & "Network - " 사례 4: sResult = sResult & "CD-ROM - " 사례 5: sResult = sResult & "RAM 디스크 - " End Select " 디스크를 사용할 수 있는지 확인하고 해당 속성을 가져옵니다. If oDrive.IsReady Then sResult = sResult & "Ready" & vbCrLf sResult = sResult & "FileSystem is " & oDrive.FileSystem & vbCrLf sResult = sResult & "사용 가능한 공간: " & _ FormatNumber( oDrive.AvailableSpace/1024, 0) & " Kbytes" Else sResult = sResult & "준비되지 않음" End If " 화면에 결과 표시 Wscript.Echo(sResult) " 서비스 생성 폴더 개체(Windows 임시 파일 폴더) oTempFolder = oFSO.GetSpecialFolder(TemporaryFolder) " 텍스트 파일 개체를 생성하고 C: 드라이브의 루트에 생성합니다. oFile = oFSO.CreateTextFile("C:\TestFile.txt ", True) " 텍스트 파일에 쓰기 oFile.WriteLine("테스트입니다.") oFile.WriteLine(sResult) " 텍스트 파일을 닫고 다른 프로세스를 위해 해제합니다. oFile.Close " 파일이 있는지 확인합니다. Windows 임시 파일 폴더에서 파일을 삭제합니다. If oFSO.FileExists(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) Then _ oFSO.DeleteFile(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt") ) " 파일 개체 만들기 Set oFile = oFSO.GetFile("C:\TestFile.txt") " 파일을 Windows 임시 파일 폴더 oFile.Move(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt"))로 이동합니다. " 파일 속성 변경 If oFile.Attributes 및 32 Then oFile. Attributes = oFile.attributes - 32 Wscript.Echo("보관 비트가 지워졌습니다") Else oFile.Attributes = oFile.attributes + 32 Wscript.Echo("보관 비트가 설정되었습니다") End If sResult = oFile.Path & vbCrLf & oFile .DateLastModified & ":" & vbCrLf " 읽기용 파일을 열어 스트림 객체 생성 Set oTestFile = oFSO.OpenTextFile(oFile.Path, ForReading, False) " 끝이 나올 때까지 스트림 읽기 Do While oTestFile.AtEndOfStream<>True sResult = sResult & oTestFile.ReadLine Loop " 텍스트 파일을 닫고 다른 프로세스를 위해 해제합니다. oTestFile.Close " 화면에 메시지를 인쇄합니다 Wscript.Echo(sResult)</p><h3>시나리오 "오래된 파일 삭제"</h3> <p>이 스크립트는 Windows 임시 디렉터리 및 사용자 프로필에 있는 오래된 파일의 시스템을 정리하도록 설계되었습니다. 이 예에서는 스크립트 구조, 변수 이름 지정, 배열 및 컬렉션 작업, 수동 오류 처리, 시스템 변수 읽기, 스크립트를 기록하기 위한 텍스트 파일 만들기, 파일 시스템 작업 등 위의 구성이 거의 모두 어떻게 작동하는지 확인할 수 있습니다. , 절차를 사용합니다.</p><p> " ==== 스크립트 정보 헤더 ==== " 스크립트 이름: Purge Temp " 버전: 1.0 " 날짜: 07/16/08 " 작성자: Bochkarev Vitaly " 설명: 이 스크립트는 컴퓨터에서 오래된 임시 파일을 삭제합니다. " == == 스크립트 메인 로직 ==== " 오류 발생 시 수동 오류 처리 활성화 다음 " 파일이 오래된 것으로 간주될 때 시간 간격 상수 Const PurgeTime = 14 " 일 " 예외 - 처리해서는 안 되는 사용자 프로필 Dim aExceptions(3) aExceptions( 0) = " Default User" aExceptions(1) = "LocalService" aExceptions(2) = "NetworkService" aExceptions(3) = "All Users" " 셸 및 파일 시스템 객체 생성 Set oShell = CreateObject("wscript.shell") Set oFSO = CreateObject ("Scripting.Filesystemobject") " 서비스 폴더 경로 정의 sProgramFiles = oShell.ExpandEnvironmentStrings("%ProgramFiles%") sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%") sWinTempFolder = sWinDir & "\Temp" sDocuments = "C:\ Documents and Settings" " 스크립트 로그 파일 생성 sLogFileName = sWinTempFolder & "\PurgeTemp_" & 날짜 sLogFileName = 바꾸기(sLogFileName, ".", "_") sLogFileName = 바꾸기(sLogFileName, "/", "_ ") Set oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true) oLogFile.WriteLine "========== 제거 시작 ==========" " Windows 정리 임시 폴더 oLogFile.WriteLine vbCrLf & "========== Windows 임시 폴더 ==========" PurgeFolder(sWinTempFolder) " 사용자 프로필 및 인터넷 파일 oLogFile의 임시 폴더를 정리합니다. WriteLine vbCrLf & _ "===== ===== 사용자 임시 폴더 및 사용자 임시 인터넷 파일 ==========" oDocuments 설정 = oFSO.GetFolder(sDocuments) colProfiles = oDocuments.SubFolders For 설정 colProfiles의 각 oProfile bFlag = false For Each sException in aExceptions if InStr(oProfile.Path,sException) > 0 then bFlag = true 종료를 위해 종료 if Next If bFlag = False Then PurgeFolder(oProfile.Path & "\Local Settings\Temp" ) PurgeFolder(oProfile.Path & "\Local Settings\Temporary Internet Files") End If Next " NOD32 격리 지우기 oLogFile.WriteLine vbCrLf & "========== NOD32 격리 ======== ==" sQuarantine = sProgramFiles & "\Eset \Infected" PurgeFolder(sQuarantine) " 로그 파일 닫기 oLogFile.WriteLine vbCrLf & "========== 제거 중지 ========== " oLogFile.Close " PurgeFolder 절차 - 오래된 파일 삭제 Sub PurgeFolder(sFolderPath) " 폴더 세트 객체 생성 oFolder = oFSO.GetFolder(sFolderPath) " 파일 컬렉션 검색 colFiles = oFolder 설정. Files " 컬렉션의 각 파일을 처리합니다. colFiles의 각 oFile에 대해 " 파일이 최신인지 확인합니다. If (Date-oFile.DateLastModified) > PurgeTime and (Date-oFile.DateCreated) > _ PurgeTime Then " 스크립트 로그 oLogFile.Writeline oFile.Path & vbTab & oFile.DateCreated " 사용되지 않는 파일 삭제 oFSO.DeleteFile oFile.Path, True " err.Number인 경우 오류 확인 중<>0 then " 스크립트 로그에 오류 메시지 쓰기 oLogFile.Writeline "------> Error # " & CStr(Err.Number) _ & " " & Err.Description " 오류 지우기 Err.Clear end if " 일시 중지 20밀리초 WScript.Sleep 20 End if Next " 하위 폴더 컬렉션 수신 Set colSubFolders = oFolder.SubFolders " 각 하위 폴더 처리 For Each oSubFolder In colSubFolders " 오래된 파일 삭제 절차를 재귀적으로 호출 - 서브루틴은 " 자체 PurgeFolder(oSubFolder.Path ) " 폴더 크기 확인 oSubFolder.Size = 0이면 " 스크립트 로그에 메시지 쓰기 oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated " 빈 폴더 삭제 oFSO.DeleteFolder oSubFolder.Path " 오류 확인 오류가 있는 경우 .숫자<>0 then " 스크립트 로그에 오류 메시지 쓰기 oLogFile.Writeline "------> Error # " & CStr(Err.Number) _ & " " & Err.Description " 오류 지우기 Err.Clear End if End if 다음 엔드 서브</p><p>지금까지 우리는 Visual Basic Script의 기본을 배웠습니다. 이러한 시나리오의 장점과 단점을 요약하고 결정해 보겠습니다.</p> <ul><li>스크립트는 컴파일이 필요하지 않으며 해당 코드는 언제든지 편집할 수 있습니다.</li> <li>VBS 스크립트는 사실상 기능이 무제한이며 다른 응용 프로그램의 다양한 시스템 라이브러리와 개체를 사용할 수 있습니다.</li> <li>VBS 파일은 콘솔이나 창 모드에서 실행될 수 있으므로 사용자는 스크립트 진행 상황의 가시성을 제어할 수 있습니다.</li> <li>VBS 스크립트를 사용하면 사용자 정의 프로시저와 기능을 사용할 수 있습니다.</li> <li>이 언어는 문자열 및 숫자 변수, 날짜 작업은 물론 텍스트 파일 처리, 시스템 및 도메인 관리에도 이상적입니다.</li> <li>VBS 스크립트는 작성하기 어렵고 프로그래밍 기술이 필요합니다.</li> <li>이러한 스크립트는 Windows 운영 체제에서만 작동합니다.</li> </ul><p>비탈리 보츠카레프</p> <h2>외부 링크</h2> <p>외부 링크 섹션, 즉 이 리소스와 관련이 없는 다른 사이트에 대한 링크 또한 사이트 소유자는 이러한 리소스 및 해당 콘텐츠의 가용성에 대해 어떠한 책임도 지지 않습니다.</p> <h3>데이터 유형</h3> <p>VBScript 언어는 숫자, 문자열, 날짜, 부울 값, 개체 참조 및 기타 정보를 변수에 저장할 수 있는 단일 데이터 유형인 Variant를 사용합니다. 일련의 함수를 사용하여 변수의 내용 유형을 결정할 수 있습니다. <a href="https://hentai-x.ru/ko/gs/wiki/index.php/VBScript._%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_VarType" title="VBScript. VarType 함수">VarType</a>, TypeName, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject에 대해서는 아래에서 설명합니다. 포함된 정보 유형을 변형 하위 유형이라고도 합니다. 하위 유형의 전체 목록은 다음 표에 나와 있습니다.</p> <table class="wikitable" border="1"><tr><th>하위 유형</th> <th>설명</th> </tr><tr><td>비어 있는</td> <td>변수에 값이 할당되지 않았습니다. 숫자 표현식에서 초기화되지 않은 변수를 사용할 경우 0이 대체되고, 문자열 표현식에서는 빈 문자열이 대체됩니다.</td> </tr><tr><td>없는</td> <td>변수에 데이터가 없습니다.</td> </tr><tr><td>부울</td> <td>부울 변수는 True 또는 False 값을 가질 수 있습니다.</td> </tr><tr><td>바이트</td> <td>0에서 255 사이의 정수입니다.</td> </tr><tr><td>정수</td> <td>-32,768~32,767 범위의 정수입니다.</td> </tr><tr><td>통화</td> <td>-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 범위의 고정 소수점 숫자입니다.</td> </tr><tr><td>긴</td> <td>-2,147,483,648에서 2,147,483,647 범위의 정수입니다.</td> </tr><tr><td>하나의</td> <td>단정밀도 부동 소수점 숫자입니다. 음수 값의 경우 허용되는 범위는 다음과 같습니다. <p>-3.402823E38에서 -1.401298E-45까지. 긍정적인 경우 – 1.401298E-45에서 3.402823E38까지.</p> </td> </tr><tr><td>더블</td> <td>배정밀도 부동 소수점 수입니다. 음수 값의 경우 허용되는 범위는 다음과 같습니다. <p>79769313486232E308 ~ -4.94065645841247E-324. 긍정적인 경우 - 4.94065645841247E-324에서 1.79769313486232E308까지.</p> </td> </tr><tr><td>날짜 시간)</td> <td>100년 1월 1일부터 9999년 12월 31일까지의 날짜를 나타내는 숫자를 포함합니다.</td> </tr><tr><td>끈</td> <td>문자의 순서. 최대 길이는 약 20억 자입니다.</td> </tr><tr><td>물체</td> <td>객체.</td> </tr><tr><td>오류</td> <td>오류 번호.</td> </tr></table><p>변수가 포함된 표현식에 따라 해당 내용이 자동으로 원하는 유형으로 캐스팅됩니다. 다음 예를 고려하십시오.</p><p>Option Explicit Sub TestVBScript Dim A, B A = 5 B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub</p><p>표현식에 숫자 변수가 포함되어 있으므로 <b>ㅏ</b>, 인터프리터는 변수의 값을 변환합니다. <b>비</b>문자열에서 <b>"12" </b>숫자로 바꾸고 요약하면 다음과 같습니다.</p><p>변수가 다음과 같이 매크로를 변경해 보겠습니다. <b>ㅏ</b>다음 줄도 포함되어 있습니다.</p><p>Option Explicit Sub TestVBScript Dim A, B A = "5" B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub</p><p>실행해 봅시다. 이제 숫자 표현의 합이 아닌 두 문자열의 병합(연결) 결과가 화면에 표시됩니다.</p><p><img src='https://i2.wp.com/gsbelarus.com/gs/images/gs/2009/book/VBScript.DataTypes.2.png' height="100" width="118" loading=lazy loading=lazy></p><p>자동 유형 캐스팅과의 혼동을 피하기 위해 CBool, CByte, CCur, CDate, CDbl, CInt, CLng, CSng, CStr과 같은 변환 함수를 사용하는 것이 좋습니다.</p><p>표현식의 결과가 숫자 표현의 합이 아니라 문자열의 연결이어야 하는 경우 + 대신 & 연산자를 사용해야 합니다.</p> <h3>변수</h3> <p>변수는 애플리케이션이 일부 데이터를 저장하는 메모리 영역을 편리하게 상징적으로 표현한 것입니다. 애플리케이션 실행 중에 변수 값이 변경될 수 있습니다. 사용하기 전에 Dim 문을 사용하여 변수를 선언해야 합니다.</p><p>하나의 연산자를 사용하여 이름을 쉼표로 구분하여 나열하면 여러 변수를 한 번에 선언할 수 있습니다.</p><p>희미한 왼쪽, 오른쪽, 위쪽, 아래쪽</p><p>선언할 때 모든 변수는 Variant 유형이므로 데이터 유형을 지정할 필요가 없습니다.</p><p><i>스크립트 텍스트의 첫 번째 줄에 Option Explicit가 지정되지 않은 경우 선언 없이 변수를 사용할 수 있습니다. 그러나 이 경로는 감지하기 어려운 오류로 이어질 수 있습니다. 예측할 수 없는 결과를 얻으려면 프로그램 텍스트에서 변수 이름의 철자를 한 번만 잘못 입력하는 것으로 충분합니다. 항상 Option Explicit를 지정하고 변수를 선언하는 것이 좋습니다.</i></p><p>변수 이름은 다음 요구 사항을 충족해야 합니다.</p> <ol><li>라틴 알파벳 기호로 시작합니다.</li><li>라틴 알파벳 문자 또는 라틴 알파벳과 숫자로만 구성됩니다.</li><li>길이는 255자를 초과하지 마십시오.</li><li>해당 범위 내에서 고유해야 합니다.</li> </ol><h3><span>범위 및 수명</span></h3> <p>변수의 범위는 선언된 위치에 따라 결정됩니다. 프로시저 본문 내부에 있는 경우 해당 변수를 로컬이라고 하며 이 프로시저 내에서만 사용할 수 있습니다. 변수가 스크립트 텍스트에 선언되면 이 스크립트에 정의된 모든 프로시저나 함수에 해당 변수가 표시됩니다. 지역 변수는 다른 프로시저에서 선언된 경우 동일한 이름을 가질 수 있습니다.</p><p><i>스크립트 개체 편집기 창의 탐색기 트리에는 프로젝트의 모든 스크립트 기능에 표시되는 전역 변수를 선언하기 위한 특수 섹션(상수 및 변수)이 있습니다.</i></p><p>인터프리터는 지역 변수가 선언될 때 메모리를 할당하고 프로시저가 종료되면 해제합니다. 전역 변수는 선언된 순간부터 스크립트 실행이 완료될 때까지 존재합니다. Gedymin과 관련하여 이는 프로그램 실행 전체에 걸쳐 전역 변수가 존재한다는 것을 의미합니다.</p> <h3><span>변수에 값 할당</span></h3> <p>선언된 변수의 값은 = 연산자를 사용하여 할당됩니다. 변수 이름은 연산자 왼쪽에 표시되고, 새로운 값은 오른쪽에 표시됩니다. 예를 들어:</p><p>A = 200 B = "이름"</p><h3><span>스칼라 변수 및 배열</span></h3> <p>단일 값을 포함하는 변수를 스칼라라고 합니다. 때로는 하나의 변수에 여러 값을 저장해야 할 때가 있습니다. 이 경우 배열을 선언해야 합니다. 선언 구문은 괄호 안의 이름 뒤에 배열 크기를 지정한다는 점을 제외하면 스칼라 변수 선언과 동일합니다. 다음 선언은 12개 요소의 배열을 생성합니다.</p><p>딤 먼스(11)</p><p>VBScript에서 배열 인덱스의 왼쪽 경계는 항상 0입니다. 따라서 배열의 크기는 괄호 안의 숫자에 1을 더한 값으로 계산됩니다. 배열 요소에 값을 할당할 때 해당 인덱스를 괄호 안에 지정합니다.</p><p>월(0) = "1월" 월(1) = "2월" 월(2) = "3월" ... 월(10) = "11월" 월(11) = "12월"</p><p>마찬가지로 요소의 값에 액세스할 때 해당 인덱스를 사용합니다.</p><p>MonthName = 월(5)</p><p>배열은 1차원일 필요는 없습니다. VBScript를 사용하면 배열을 선언할 때 최대 60차원을 지정할 수 있습니다. 예를 들어, 다음 명령문은 12개의 행과 2개의 열로 구성된 2차원 배열을 만듭니다.</p><p>희미한 월일(11, 1)</p><p>다차원 배열의 요소에 액세스할 때 모든 인덱스를 지정해야 합니다.</p><p>MonthDays(0, 0) = "1월" MonthDays(0, 1) = 31 MonthDays(1, 0) = "2월" MonthDays(1, 1) = 28 ...</p><p>위에서는 프로그램 작동 중에 크기가 변경되지 않는 배열을 선언했습니다. 필요한 요소 수를 미리 모르는 경우 동적 배열을 선언할 수 있습니다.</p><p>사용하기 전에 ReDim 연산자를 사용하여 동적 배열의 크기를 설정해야 합니다.</p><p>리딤 A(25)</p><p>실행 중에 ReDim 연산자를 여러 번 호출하여 매번 배열 크기를 변경할 수 있습니다. 보존 옵션은 크기를 조정할 때 배열 요소의 값을 유지합니다. 예를 들어, 다음 코드는 위에 선언된 배열을 5개 요소만큼 늘리고 기존 요소는 그대로 유지합니다.</p><p>리딤 프리저브 A(30)</p><p>배열의 크기를 줄이면 삭제된 요소의 값이 복구 불가능하게 손실된다는 점을 기억하세요. Erase 연산자를 사용하면 고정 배열의 요소를 지우거나 동적 배열이 차지하는 메모리를 해제할 수 있습니다.</p><p>Dim A ReDim A(25) ... A 지우기</p><h3>상수</h3> <p>프로그램 텍스트에서 반복적으로 사용되는 값에 대해서는 상수를 선언하는 것이 좋은 경험 법칙입니다. 상수 이름을 올바르게 지정하면 가독성이 향상되고 사용 자체가 코드 변경 프로세스를 단순화합니다. 변수와 달리 상수의 값은 프로그램 실행 중에 변경할 수 없습니다. Const 연산자를 사용하여 상수가 생성됩니다.</p><p>Const CountryName = "벨로루시" Const CountryCode = 375</p><p>하나의 명령문 내에서 여러 상수를 쉼표로 구분하여 선언할 수 있습니다. 변수와 마찬가지로 상수는 선언된 위치(프로시저 내부 또는 외부)와 어떻게(Public 또는 Private) 선언되었는지에 따라 고유한 범위를 갖습니다. Public 또는 Private을 지정하지 않고 Const 연산자로 생성된 상수는 기본적으로 공개됩니다.</p><p><i>스크립트 개체 편집기 창의 탐색기 트리에는 프로젝트의 모든 스크립트 기능에 표시되는 전역 상수를 선언하기 위한 특수 섹션(상수 및 변수)이 있습니다.</i></p><p>문자열 상수의 값은 큰따옴표로 묶입니다.</p><p>날짜 유형의 값은 해시 기호(#)로 묶어야 하며 월/일/년과 같은 미국 형식을 사용해야 합니다. 예를 들어:</p><p>Const Public 독립기념일 = #1918/03/25#</p><p>상수와 변수 사이의 혼동을 피하기 위해 모든 상수에 "con"과 같은 단일 접두사를 사용하거나 상수 이름을 대문자로 입력하는 것이 좋습니다.</p><p>프로그래머의 작업을 더 쉽게 만들기 위해 VBScript에는 세트가 포함되어 있습니다. <a href="https://hentai-x.ru/ko/gs/wiki/index.php/VBScript._%D0%9F%D1%80%D0%B5%D0%B4%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D1%8B" title="VBScript. 미리 정의된 상수">미리 정의된 상수</a>.</p> <h3>연산자</h3> <p>VBScript 연산자는 산술, 비교, 병합, 논리 및 할당의 다섯 가지 범주로 분류됩니다.</p> <h4><span>산술 연산자</span></h4> <table class="wikitable" border="1"><tr><th>운영자</th> <th>사용예</th> <th>설명</th> </tr><tr><td> ^ </td> <td>숫자^지수</td> <td>숫자를 지수로 올립니다. 숫자는 정수 거듭제곱인 경우에만 0보다 작을 수 있습니다. 피연산자 중 하나가 Null이면 전체 표현식은 Null입니다. 여러 지수연산을 연속해서 수행하면 결과는 왼쪽에서 오른쪽으로 계산됩니다.</td> </tr><tr><td> * </td> <td>번호1 * 번호2</td> <td>두 숫자의 곱. 피연산자의 값이 비어 있으면 0으로 간주됩니다. 피연산자 중 하나 이상이 Null인 경우 전체 식이 Null로 평가됩니다.</td> </tr><tr><td> / </td> <td>번호 1 / 번호 2</td> <td>두 숫자의 실제 나눗셈. 피연산자 규칙은 곱셈 연산자와 유사합니다.</td> </tr><tr><td> \ </td> <td>번호 1\번호 2</td> <td>정수 나눗셈. 평가하기 전에 두 피연산자는 모두 Byte, Integer 또는 Long으로 캐스팅됩니다. 그렇지 않으면 나누기 연산자와 동일한 규칙이 적용됩니다.</td> </tr><tr><td>모드</td> <td>번호 1 모드 번호 2</td> <td>정수 나누기의 나머지. 피연산자를 정수로 캐스팅하고 정수 나누기와 같이 비어 있음 및 Null을 처리하는 규칙도 제공합니다.</td> </tr><tr><td> + </td> <td>식1 + 식2</td> <td>두 피연산자가 모두 숫자인 경우 결과는 산술 합계입니다. 두 피연산자가 모두 문자열이면 이는 두 문자열의 병합(연결)입니다. 한 피연산자가 숫자이고 다른 피연산자가 문자열이면 문자열 피연산자는 숫자로 변환되어 숫자 피연산자에 추가됩니다. 피연산자 중 하나 이상이 Null인 경우 전체 식이 Null로 평가됩니다. 두 피연산자가 모두 비어 있으면 결과의 정수 값은 0입니다. 연산자가 하나만 비어 있으면 두 번째 피연산자의 값이 결과로 반환됩니다.</td> </tr><tr><td> - </td> <td>번호1 - 번호2 또는 - 번호</td> <td>첫 번째 경우에는 두 숫자의 차이를 반환합니다. 두 번째에서는 숫자의 부호를 반전시킵니다. 곱셈 연산자와 마찬가지로 Null 및 빈 값이 있는 피연산자에 대한 규칙입니다.</td> </tr></table><h4><span>비교 연산자</span></h4> <p>비교 연산자 사용 형식:</p><p>결과 = 표현식1 비교연산자 표현식2</p><p>여기서 다음 비교 연산자가 사용됩니다.< (меньше), <= (меньше или равно), >(보다 큼), >= (크거나 같음), = (같음),<>(같지 않음).</p><p>피연산자의 유형과 값에 따라 비교는 다음과 같이 수행됩니다.</p> <table class="wikitable" border="1"><tr><th>만약에</th> <th>저것</th> </tr><tr><td>두 피연산자는 모두 숫자입니다.</td> <td>두 숫자를 비교합니다.</td> </tr><tr><td>두 피연산자는 모두 문자열입니다.</td> <td>두 문자열의 비교가 수행됩니다.</td> </tr><tr><td>피연산자 중 하나는 숫자이고 두 번째는 문자열입니다.</td> <td>문자열 피연산자는 숫자로 캐스팅되고 두 숫자 간에 비교가 이루어집니다.</td> </tr><tr><td>피연산자 중 하나는 비어 있고 두 번째는 숫자입니다.</td> <td>값이 비어 있는 피연산자는 0으로 간주됩니다.</td> </tr><tr><td>피연산자 중 하나는 비어 있고 두 번째는 문자열입니다.</td> <td>값이 비어 있는 피연산자는 빈 문자열 ""로 간주됩니다. 두 문자열을 비교합니다.</td> </tr><tr><td>두 피연산자가 모두 비어 있습니다.</td> <td>피연산자는 동일한 것으로 간주됩니다.</td> </tr><tr><td>피연산자 중 하나 이상이 Null입니다.</td> <td>결과는 Null입니다.</td> </tr></table><p>특수 Is 연산자는 두 개체 변수를 비교하는 데 사용되며 두 변수가 모두 동일한 개체 인스턴스를 참조하는 경우 True를 반환합니다.</p> <h4><span>연결 연산자</span></h4> <p>결과 = 식1 및 식2</p><p>피연산자가 문자열이 아닌 경우 문자열 유형으로 캐스팅됩니다. 두 피연산자가 모두 Null이면 결과도 Null 값을 취합니다. 그러나 다른 연산자와 달리 피연산자 중 하나만 Null이면 빈 문자열과 동일하게 간주됩니다. 비어 있음으로 설정된 피연산자는 빈 문자열 ""로도 처리됩니다.</p> <h4><span>논리 연산자</span></h4> <p>VBScript는 다음과 같은 논리 연산자를 제공합니다.</p> <ol><li>논리적 예외(Xor);</li><li>논리적 등가물(Eqv);</li><li>논리적 의미(Imp).</li> </ol><p>논리 연산자의 피연산자는 부울 표현식 또는 숫자 값일 수 있습니다. 첫 번째 경우 결과는 부울 상수이고 두 번째 경우에는 숫자입니다. 연산자에 따라 하나 또는 두 개의 Null 값을 입력으로 제공하면 Null 결과가 발생할 수 있습니다. Not 연산자는 단항 연산자이며 표현식의 논리적 부정을 반환합니다. Not 연산자는 숫자 피연산자에 대해 비트 반전을 수행합니다. 나머지 논리 연산자는 이진수입니다. 아래 표는 피연산자 Exp1과 Exp2의 값에 따라 각 연산자를 실행한 결과를 보여준다.</p> <table class="wikitable" border="1"><tr><th>경험치1</th> <th>경험치 2</th> <th>그리고</th> <th>또는</th> <th>Xor</th> <th>Eqv</th> <th>꼬마 도깨비</th> </tr><tr><td>진실</td> <td>진실</td> <td>진실</td> <td>진실</td> <td>거짓</td> <td>진실</td> <td>진실</td> </tr><tr><td>진실</td> <td>거짓</td> <td>거짓</td> <td>진실</td> <td>진실</td> <td>거짓</td> <td>거짓</td> </tr><tr><td>거짓</td> <td>진실</td> <td>거짓</td> <td>진실</td> <td>진실</td> <td>거짓</td> <td>진실</td> </tr><tr><td>거짓</td> <td>거짓</td> <td>거짓</td> <td>거짓</td> <td>거짓</td> <td>진실</td> <td>진실</td> </tr><tr><td>진실</td> <td>없는</td> <td>없는</td> <td>진실</td> <td>없는</td> <td>없는</td> <td>없는</td> </tr><tr><td>거짓</td> <td>없는</td> <td>거짓</td> <td>없는</td> <td>없는</td> <td>없는</td> <td>진실</td> </tr><tr><td>없는</td> <td>진실</td> <td>없는</td> <td>진실</td> <td>없는</td> <td>없는</td> <td>진실</td> </tr><tr><td>없는</td> <td>거짓</td> <td>거짓</td> <td>없는</td> <td>없는</td> <td>없는</td> <td>없는</td> </tr><tr><td>없는</td> <td>없는</td> <td>없는</td> <td>없는</td> <td>없는</td> <td>없는</td> <td>없는</td> </tr></table><p>인생에서 And 및 Or 연산자는 가장 자주 사용되며 Xor는 훨씬 덜 자주 사용됩니다. 실제로 Eqv 및 Imp 연산자를 사용한 적이 없습니다. 위의 표를 이해하기 어렵다면 다음 연산자의 동작을 요약해 보겠습니다.</p> <ul><li>그리고 두 피연산자가 모두 True인 경우에만 True로 평가됩니다. 다른 경우에는 False 또는 Null입니다.</li><li>또는 피연산자 중 하나 이상이 True인 경우 True로 평가됩니다.</li><li>Xor는 피연산자의 값이 다르면 True로 평가되고, 같으면 False로 평가됩니다.</li> </ul><p>숫자 피연산자에 대해 비트 단위로 실행되는 경우 논리 연산자의 결과는 다음 표에 따라 결정됩니다.</p> <table class="wikitable" border="1"><tr><th>경험치1</th> <th>경험치 2</th> <th>그리고</th> <th>또는</th> <th>Xor</th> <th>Eqv</th> <th>꼬마 도깨비</th> </tr><tr><td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 1 </td> <td> 1 </td> </tr><tr><td> 0 </td> <td> 1 </td> <td> 0 </td> <td> 1 </td> <td> 1 </td> <td> 0 </td> <td> 1 </td> </tr><tr><td> 1 </td> <td> 0 </td> <td> 0 </td> <td> 1 </td> <td> 1 </td> <td> 0 </td> <td> 0 </td> </tr><tr><td> 1 </td> <td> 1 </td> <td> 1 </td> <td> 1 </td> <td> 0 </td> <td> 1 </td> <td> 1 </td> </tr></table><h4><span>할당 연산자</span></h4> <p>할당 연산자(=)는 변수 섹션에 자세히 설명되어 있습니다.</p> <h4><span>연산자 적용 순서</span></h4> <p>표현식에 여러 연산자가 포함된 경우 연산자 우선 순위라고 하는 지정된 순서에 따라 적용됩니다. 괄호를 사용하여 기본 순서를 변경할 수 있습니다. 괄호 안의 표현식이 항상 먼저 평가됩니다.</p><p>서로 다른 범주의 연산자가 포함된 표현식에서는 산술 연산이 먼저 수행되고, 그 다음 비교 연산자가 수행되고, 논리 연산자가 마지막으로 수행됩니다. 모든 비교 연산자는 동일한 우선순위를 가지며 왼쪽에서 오른쪽으로 평가됩니다. 산술 및 논리 연산자는 다음 순서로 평가됩니다.</p> <ol><li>지수(^);</li><li>숫자의 부호를 단항 빼기(-)로 변경합니다.</li><li>곱셈(*) 및 나눗셈(/)</li><li>정수 나누기(\);</li><li>정수 나누기 나머지(Mod);</li><li>더하기(+)와 빼기(-);</li><li>문자열 연결(&).</li> </ol><p>동일한 표현식에서 곱셈과 나눗셈이 발생하는 경우 연산은 왼쪽에서 오른쪽 순서로 수행됩니다. 덧셈과 뺄셈 연산자가 동시에 존재하는 경우에도 비슷한 규칙이 적용됩니다.</p><p>문자열 연결 연산자(&)는 산술이 아니며 산술 연산자와 비교 연산자 사이에 우선순위를 갖습니다.</p><p>논리 연산자의 우선순위는 다음과 같습니다.</p> <ol><li>논리적 부정, 반전(Not);</li><li>논리적 곱셈, 접속사(And);</li><li>논리적 덧셈, 분리(Or);</li><li>논리적 예외(Xor);</li><li>논리적 등가물(Eqv);</li><li>논리적 의미(Imp).</li> </ol><h3><span>조건식</span></h3> <p>조건식은 프로그램 명령의 실행 순서를 제어하고 명령의 전환(분기) 및 반복을 구성하는 데 사용됩니다. 일반적으로 비교 연산자는 조건식과 함께 사용됩니다.</p> <h4><span>If..Then..Else 표현식</span></h4> <p>If 조건 점프 표현식을 사용하면 논리 표현식의 결과나 부울 변수 값에 따라 특정 명령 그룹을 실행할 수 있습니다.</p><p>주어진 조건이 충족될 때 단일 명령을 실행하려면 한 줄 표현식 구문을 사용하십시오.</p><p>Dim S If DatePart("w", Now) = vbMonday Then S = "월요일" Application.MessageBox S, "", vbOkOnly</p><p>이 경우 Else 섹션은 ​​생략됩니다. 명령문 그룹을 실행하려면 명령문을 Then 및 End If 키워드 사이에 묶어야 합니다.</p><p>Dim S If DatePart("w", Now) = vbMonday Then S = "오늘은 월요일입니다" Application.MessageBox S, "", vbOkOnly End If</p><p>조건이 충족되면 하나의 코드를 실행해야 하고, 조건이 충족되지 않으면 다른 코드가 필요한 경우 Else 섹션이 있는 표현식 구문이 사용됩니다.</p><p>Dim S If DatePart("w", Now) = vbMonday Then S = "오늘은 월요일입니다." Else S = "오늘은 월요일이 아닙니다." End If Application.MessageBox S, "", vbOkOnly</p><p>여러 대안 중에서 선택해야 하는 경우 ElseIf 구문을 사용하는 구문이 적합합니다.</p><p>Dim S, D D = DatePart("w", Now) If D = vbMonday Then S = "Monday" ElseIf D = vbTuesday Then S = "Tuesday" ElseIf D = vbWednesday Then S = "Wednesday" ... End If 응용 프로그램. MessageBox S, "", vbOkOnly</p><p>If 문은 중첩될 수 있습니다.</p><p>Dim S, D D = DatePart("w", Now) If D = vbMonday Then S = "Monday" Else If D = vbTuesday Then S = "Tuesday" Else If D = vbWednesday Then S = "Wednesday" Else ... End 종료된 경우 종료된 경우</p><p>조건식의 ElseIf 절 수에는 제한이 없지만 이를 광범위하게 사용하면 코드가 혼란스럽고 읽을 수 없게 될 수 있습니다. 선택자의 값에 따라 여러 대안 중 하나를 선택하는 경우에는 Select Case 표현을 사용하는 것이 좋습니다.</p> <h4><span>선택..케이스 표현</span></h4> <p>선택 표현식을 사용하여 요일 예제를 다시 작성해 보겠습니다.</p><p>Dim S Select Case DatePart("w", Now) Case vbMonday S = "월요일" Case vbTuesday S = "화요일" Case vbWednesday S = "수요일" ... Case Else Err.Raise 32000, "", "알 수 없는 날짜 주 " 종료 선택</p><p>선택기 표현식은 한 번만 평가되므로 Select..Case를 사용하면 코드가 더욱 효율적으로 만들어집니다. 유효하지 않거나 원시 선택기 값을 포착하려면 항상 Case Else 섹션을 사용하는 것이 좋습니다.</p> <h3><span>루프 문</span></h3> <p>코드를 다시 실행해야 하는 상황이 자주 발생합니다. 이렇게 하려면 특정 명령을 계속해서 반복하는 루프 문을 작성하세요. 루프 문은 숫자 목록에 대한 합계를 계산할 때, 데이터 세트의 레코드를 이동하거나 여러 개체에서 코드 블록을 실행할 때 등 다양한 상황에서 사용됩니다. 다음 섹션에서 설명하는 여러 주기가 있습니다. 그 중 일부는 조건이 True일 때 실행되고, 일부는 조건이 False일 때 실행됩니다. 그리고 마지막으로 지정된 횟수만큼 실행되는 것들이 있습니다.</p> <h4>Do..Loop 연산자</h4> <p>이 연산자는 주어진 조건이 True이거나 True가 될 때까지 명령 그룹을 실행하도록 설계되었습니다. 루프 시작 부분에서 조건을 확인할 수 있습니다.</p><p>[(While | Until) 조건] 루프를 수행합니다.</p><p>그래서 결국:</p><p>Do Loop [(While | Until) 조건]</p><p>Exit Do 명령은 루프 본문에 무제한으로 나타날 수 있습니다. 일반적으로 If..Then 조건문과 함께 사용되며 루프 바로 다음 문으로 제어를 전달할 수 있습니다. 중첩 루프 내에서 Exit Do를 사용하면 제어가 외부 루프로 전달됩니다.</p><p>다음 코드를 사용하면 주사위를 교체할 수 있습니다.</p><p>Dim Resp, Num Do Num = Int(6 * Rnd + 1) Resp = Application.MessageBox(Num & "다른 숫자?", "",_ vbYesNo 또는 vbQuestion) Resp까지 루프 = vbNo</p><h4>동안..웬드</h4> <p>이는 Do..Loop 연산자의 잘린 버전이며 조건이 True인 동안 명령 그룹을 실행할 수 있습니다. 연산자 구문:</p><p>조건 Wend 동안</p><p>Exit Do는 이 루프 내에서 아무런 영향을 미치지 않습니다. While..Wend 루프는 중첩될 수 있습니다.</p> <h4>For..Next</h4> <p>이 루프는 지정된 명령 세트를 지정된 횟수만큼 반복합니다. 연산자 구문은 다음과 같습니다.</p><p>카운터 = 시작 끝으로 다음</p><p>루프가 시작되기 전에 카운터 변수에 start 값이 할당됩니다. 다음으로 카운터 조건을 확인합니다.<= end, при step >= 0 또는 카운터 >= 종료(음수 단계 포함). 명령 블록을 실행한 후 카운터 변수는 step 값만큼 증가하고 모든 것이 처음부터 반복됩니다.</p><p>루프 본문에서 카운터를 변경하는 것은 금지되지 않지만 프로그램 논리를 이해하고 디버깅하기 어렵게 만들기 때문에 권장되지 않습니다.</p><p>Exit For는 루프 본문에 여러 번 나타날 수 있습니다. 루프는 중첩될 수 있습니다. 예를 들어, 다음 루프는 3차원 배열을 초기화합니다.</p><p>Dim A(9, 9, 9) Dim I, J, K I의 경우 = 0 ~ 9 J의 경우 = 0 ~ 9 K의 경우 = 0 ~ 9 A(I, J, K) = 1 다음 다음 다음</p><h4>각각에 대해..다음</h4> <p>For Each..Next 루프 문은 배열 또는 컬렉션의 각 요소에 대해 지정된 명령 집합을 반복하며 다음 구문을 사용합니다.</p><p>그룹의 각 요소에 대해 다음</p><p>배열이나 컬렉션에 요소가 하나 이상 있으면 루프가 실행됩니다. Exit For는 루프 본문에 임의의 횟수만큼 나타날 수 있습니다.</p><p>c:\ 드라이브의 루트 디렉터리에 있는 파일 목록을 표시하는 다음 코드를 사용하여 For Each..Next를 사용하는 방법을 살펴보겠습니다.</p><p>Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder("c:\") Set fc = f.Files For Each f1 in fc s = s & f1 .name & vbNewLine 다음 Application.MessageBox s, "c:\에 있는 파일", vbOkOnly</p><h3>절차</h3> <p>메모리를 절약하고 프로그램을 구조화하기 위해 여러 위치에서 반복적으로 호출되는 코드 조각을 프로시저로 형식화할 수 있습니다. VBScript에는 서브루틴(Sub)과 함수(Function)라는 두 가지 유형의 프로시저가 있습니다. 서브루틴은 Sub 및 End Sub 키워드로 둘러싸인 일련의 명령문입니다. 서브루틴은 매개변수를 입력으로 받아들일 수 있지만 값을 반환하지는 않습니다. Function과 End Function 사이의 일련의 명령문인 함수는 결과를 반환하므로 표현식에 사용될 수 있습니다. 각 프로시저에는 모듈 내에서 고유한 이름이 있어야 합니다. 전역 모듈에 선언된 프로시저의 이름은 전체 프로젝트 내에서 고유해야 합니다.</p><p>서브루틴과 함수의 정의에는 다음 구문이 있습니다.</p><p>| Private] 하위 이름 [(arglist)] End Sub | Private] 함수 이름 [(arglist)] 함수 종료</p><p>공개 프로시저는 전역적이며 모든 프로그램 스크립트에서 사용할 수 있습니다. 개인 프로시저는 선언된 스크립트에서만 사용할 수 있습니다. 달리 명시하지 않는 한 선언된 절차는 공개됩니다. Default 키워드는 클래스 본문에서만 사용할 수 있으며 이 클래스의 기본 메서드를 지정하는 역할을 합니다.</p><p>매개변수 목록의 구문은 다음과 같습니다.</p><p>Varname [, ...]</p><p>매개변수는 값(ByVal) 또는 참조(ByRef)로 전달될 수 있습니다. 기본적으로 모든 매개변수는 값으로 전달됩니다. 표현식 평가 결과인 상수는 값으로만 ​​전달될 수 있습니다. 참조로 전달된 매개변수를 변경하면 외부 변수의 값이 변경됩니다. 다음 예를 사용하여 프로시저 내에서 매개변수 전달을 설명하겠습니다.</p><p>Sub DoCalculation(ByRef A, ByVal B, ByVal C) A = C * 2 B = C / 2 End Sub Sub TestVar Dim V1, V2 V1 = 1 V2 = 2 DoCalculation V1, V2, 10 " DoCalculation 절차 수행 후 " V1 = 20" V2 = 2 엔드 서브</p><p>프로시저 본문 내부에 선언된 변수는 로컬 변수이며 실행이 완료되면 삭제됩니다. 지역변수 값은 저장되지 않습니다.</p><p>매개변수 목록은 함수를 호출하거나 Call 문을 사용하여 서브루틴을 호출할 때 괄호 안에 지정됩니다. 따라서 위 예제에서 DoCalculation 프로시저에 대한 호출을 다음과 같이 작성할 수 있습니다.</p><p>DoCalculation(V1, V2, 10) 호출</p><h3>표현식 실행</h3> <h3>VBScript 클래스</h3> <p>VBScript를 사용하면 앞으로는 VB 클래스라고 부를 새로운 클래스를 생성할 수 있습니다. 일반적으로 말해서, 객체 지향 프로그래밍의 의미에서 본격적인 클래스는 아닙니다. 상속과 그에 따른 다형성을 지원하지 않기 때문입니다. 따라서 객체 지향 패러다임의 기반이 되는 세 가지 기둥 중에서 캡슐화(하나의 엔터티 내에서 데이터와 메서드를 결합하는 기능)만 남습니다.</p><p>클래스는 다음 구성을 사용하여 정의됩니다.</p><p>클래스 이름 설명 End Class</p><p>여기서 name은 클래스의 이름이고 명령문은 클래스의 멤버라고도 불리는 변수, 속성, 프로시저 또는 함수에 대한 하나 이상의 정의입니다. 클래스 정의 코드에 프로시저와 함수 선언만 포함되어 있는 Delphi와 달리 VB 클래스에서는 멤버 코드가 클래스 텍스트에 직접 작성됩니다.</p><p>클래스의 멤버는 비공개 또는 공개로 선언될 수 있습니다. 전자는 주어진 클래스의 코드 내부에서만 볼 수 있는 반면, 후자는 내부 코드와 외부 모두에서 사용할 수 있습니다. 변수나 함수(프로시저)에 Public 또는 Private에 대한 명시적인 정의가 포함되어 있지 않으면 공개로 간주됩니다. 클래스 블록 내에서 Public으로 선언된 프로시저나 함수는 해당 클래스의 메서드가 됩니다.</p><p>public으로 선언된 변수는 Property Get, Property Let, Property Set 구문을 사용하여 직접 선언된 속성과 함께 클래스 속성이 됩니다.</p> <h4><span>클래스 속성 정의</span></h4> <p>위에서 명시적으로 또는 암시적으로 Public으로 선언된 클래스의 필드는 클래스의 속성이 된다고 이미 언급했습니다. 또한 속성 값을 읽고(Property Get) 이를 할당하기 위한(Property Let 또는 Property Set) 특수 함수를 정의하여 클래스 속성을 생성할 수 있습니다.</p><p>이러한 함수를 정의하는 구문은 다음과 같습니다.</p><p>| Private] 속성 이름 가져오기 [(arglist)] [ 이름 = 표현식] [ 이름 = 표현식] End 속성 속성 Let 이름( 값) 끝 속성 속성 집합 이름( 참조) 끝 속성</p><p>읽기 또는 할당이라는 하나의 함수만 정의하여 각각 읽기 전용 또는 쓰기 전용인 속성을 생성할 수 있습니다. Property Let 프로시저는 단순 데이터 유형을 할당하는 데 사용되며 Property Set 프로시저는 개체에 대한 참조를 전달하는 데 사용됩니다. 세 가지 함수 모두 임의의 매개변수 목록을 입력으로 사용할 수 있습니다. 이러한 방식으로 요소 인덱스를 인수로 전달하여 배열 속성 등을 구성할 수 있습니다.</p> <h4><span>VB 클래스의 인스턴스 생성 및 삭제</span></h4> <p>VB 클래스의 인스턴스 생성은 New 연산자를 사용하여 수행됩니다.</p><p>Dim X Set X = 새 클래스 이름</p><p>이전에 생성된 인스턴스의 소멸은 해당 변수가 선언되고 해당 변수에 대한 외부 참조가 없는 코드 블록이 완료되면 자동으로 발생합니다. 인스턴스를 수동으로 삭제해야 하는 경우 변수에 Nothing 값을 할당해야 합니다.</p><p>' 변수 선언 및 클래스 인스턴스 생성 Dim X Set X = New classname ... ' 클래스 인스턴스 사용... ' 클래스 인스턴스 파괴 Set X = Notning ...</p><h4><span>이벤트 초기화 및 종료</span></h4> <p>초기화 이벤트는 클래스의 인스턴스가 생성될 때 발생하고, 종료 이벤트는 클래스가 소멸될 때 발생합니다. 개발자는 자신의 이벤트 데이터 핸들러를 정의할 수 있습니다. 다음은 객체 생성 및 삭제 이벤트를 사용하는 예입니다.</p><p>Class TestClass " 초기화 이벤트 핸들러의 정의. Private Sub Class_Initialize MsgBox("TestClass 시작됨") End Sub " 종료 이벤트 핸들러의 정의. Private Sub Class_Terminate MsgBox("TestClass 종료됨") End Sub End Class " TestClass 클래스의 인스턴스를 생성합니다. " "TestClass 시작됨" 메시지가 표시됩니다. Set X = New TestClass " 인스턴스를 삭제합니다. " 메시지 "TestClass 종료됨" 설정이 표시됩니다. X = 없음</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> <div class="single-popular"> <div class="single-popular-tit col-lg-12">해당 카테고리의 인기 항목:</div> <div class="single-popular-item col-lg-6 col-md-6 col-sm-6 col-xs-6"> <div class="single-popular-item-wrp"> <img width="150" height="120" src="/uploads/cf9334272693ad178cf699512845f78c.jpg" class="attachment-sm-widget size-sm-widget wp-post-image" alt="Word의 문서 요소에서 컬러 배경을 제거하는 방법"/ loading=lazy loading=lazy> <div class="single-popular-item-tit">Word의 문서 요소에서 컬러 배경을 제거하는 방법</div> <a href="https://hentai-x.ru/ko/connecting-to-wifi/kak-udalit-cvetnoi-fon-v-vorde-kak-v-vorde-ubrat-cvetnoi-fon-s/" rel="bookmark" title="Word의 문서 요소에서 컬러 배경을 제거하는 방법">읽다</a> <div class="clr"> </div> </div> </div> <div class="single-popular-item col-lg-6 col-md-6 col-sm-6 col-xs-6"> <div class="single-popular-item-wrp"> <img width="150" height="120" src="/uploads/1e8d983907285c413c043b8fcdbebf3d.jpg" class="attachment-sm-widget size-sm-widget wp-post-image" alt="하나의 쿼리에서 행 선택 및 계산 - SQL_CALC_FOUND_ROWS"/ loading=lazy loading=lazy> <div class="single-popular-item-tit">하나의 쿼리에서 행 선택 및 계산 - SQL_CALC_FOUND_ROWS</div> <a href="https://hentai-x.ru/ko/computers-and-laptops/mysql-vyvesti-opredelennoe-kolichestvo-zapisei-vyborka-i-podschet-strok-odnim/" rel="bookmark" title="하나의 쿼리에서 행 선택 및 계산 - SQL_CALC_FOUND_ROWS">읽다</a> <div class="clr"> </div> </div> </div> <div class="single-popular-item col-lg-6 col-md-6 col-sm-6 col-xs-6"> <div class="single-popular-item-wrp"> <img width="150" height="120" src="/uploads/978d1b9f65b7424dffaae5021e811cf4.jpg" class="attachment-sm-widget size-sm-widget wp-post-image" alt="HTML 양식 HTML 양식 게시 예"/ loading=lazy loading=lazy> <div class="single-popular-item-tit">HTML 양식 HTML 양식 게시 예</div> <a href="https://hentai-x.ru/ko/computer-repair/formy-v-html-html-formy-html-form-post-primery/" rel="bookmark" title="HTML 양식 HTML 양식 게시 예">읽다</a> <div class="clr"> </div> </div> </div> <div class="single-popular-item col-lg-6 col-md-6 col-sm-6 col-xs-6"> <div class="single-popular-item-wrp"> <img width="150" height="120" src="/uploads/1aaa89e9cedc3586a02e35ae16d235f6.jpg" class="attachment-sm-widget size-sm-widget wp-post-image" alt="Redmi Note 3 Pro에서 비밀번호를 잊어버린 경우 MIUI에서 Xiaomi의 비밀번호를 복구하는 방법"/ loading=lazy loading=lazy> <div class="single-popular-item-tit">Redmi 노트북에서 비밀번호를 잊어버린 경우 MIUI에서 Xiaomi의 비밀번호를 복구하는 방법...</div> <a href="https://hentai-x.ru/ko/router-setup/chto-delat-esli-zabyl-parol-ot-mi-akkaunta-kak-vosstanovit/" rel="bookmark" title="Redmi Note 3 Pro에서 비밀번호를 잊어버린 경우 MIUI에서 Xiaomi의 비밀번호를 복구하는 방법">읽다</a> <div class="clr"> </div> </div> </div> <div class="clr"></div> </div> </div>  <div class="sidebar col-lg-3 col-md-4 col-sm-12"> <div class="sidebar-wrp"> <div class="sidebar-wrp-title">최신 기사</div> <div class="sidebar-wrp-des"> <div class="last-post col-lg-12 col-md-12 col-sm-6 col-xs-6"> <div class="last-post-img"> <img width="60" height="48" src="/uploads/01b9075c10e24fd1861519b5a4b36052.jpg" class="attachment-sm-widget2 size-sm-widget2 wp-post-image" alt="" / loading=lazy loading=lazy> </div> <div class="last-post-tit">Android용 Samsung S7 테마</div> <div class="clr"></div> <a href="https://hentai-x.ru/ko/television/skachat-temi-dlya-samsunga-galaksi-temy-dlya-samsung-s7-dlya-android-t-mno/">읽다</a> </div> <div class="last-post col-lg-12 col-md-12 col-sm-6 col-xs-6"> <div class="last-post-img"> <img width="60" height="48" src="/uploads/305d6c00a7473b5c25aee94416ec005e.jpg" class="attachment-sm-widget2 size-sm-widget2 wp-post-image" alt="" / loading=lazy loading=lazy> </div> <div class="last-post-tit">NFC iPhone 및 관련 문제에 대하여...</div> <div class="clr"></div> <a href="https://hentai-x.ru/ko/cable-repair/kak-vklyuchit-v-iphone-nfc-modul-po-nastoyashchemu-pro-nfc-iphone-i-svyazannye-s/">읽다</a> </div> <div class="last-post col-lg-12 col-md-12 col-sm-6 col-xs-6"> <div class="last-post-img"> <img width="60" height="48" src="/uploads/8e53e15dcacfb82851c176167dd5d8ba.jpg" class="attachment-sm-widget2 size-sm-widget2 wp-post-image" alt="" / loading=lazy loading=lazy> </div> <div class="last-post-tit">메일 알림 설정 방법</div> <div class="clr"></div> <a href="https://hentai-x.ru/ko/television/kak-ustanovit-uvedomlenie-o-poluchenii-pochty-uvedomleniya-vo/">읽다</a> </div> <div class="last-post col-lg-12 col-md-12 col-sm-6 col-xs-6"> <div class="last-post-img"> <img width="60" height="48" src="/uploads/016b1e8cc94ff252e860acc074c0ca33.jpg" class="attachment-sm-widget2 size-sm-widget2 wp-post-image" alt="" / loading=lazy loading=lazy> </div> <div class="last-post-tit">iPhone이 빨리 방전되는 경우 수행할 작업</div> <div class="clr"></div> <a href="https://hentai-x.ru/ko/tv-on-computer/esli-aifon-ploho-derzhit-zaryadku-chto-delat-esli-iphone-bystro/">읽다</a> </div> <div class="last-post col-lg-12 col-md-12 col-sm-6 col-xs-6"> <div class="last-post-img"> <img width="60" height="48" src="/uploads/ab7dea9eb22e9f5b99997a4beb550a48.jpg" class="attachment-sm-widget2 size-sm-widget2 wp-post-image" alt="" / loading=lazy loading=lazy> </div> <div class="last-post-tit">폴더는 컴퓨터에서 삭제할 수 없습니다!</div> <div class="clr"></div> <a href="https://hentai-x.ru/ko/internet/ne-hochet-udalyatsya-papka-ne-udalyaetsya-papka-s-kompyutera-kak-byt/">읽다</a> </div> <div class="last-post col-lg-12 col-md-12 col-sm-6 col-xs-6"> <div class="last-post-img"> <img width="60" height="48" src="/uploads/fee2e5fe32e7130d2cfa719aeff7e701.jpg" class="attachment-sm-widget2 size-sm-widget2 wp-post-image" alt="" / loading=lazy loading=lazy> </div> <div class="last-post-tit">무엇을 사야 할까요 - 저렴한 게임용 노트북 또는...</div> <div class="clr"></div> <a href="https://hentai-x.ru/ko/television/chto-luchshe-pk-ili-noutbuk-chto-kupit-nedorogoi-igrovoi-noutbuk-ili/">읽다</a> </div> <div class="last-post col-lg-12 col-md-12 col-sm-6 col-xs-6"> <div class="last-post-img"> <img width="60" height="48" src="/uploads/c62029fc74b9f396249179bce0fb31d0.jpg" class="attachment-sm-widget2 size-sm-widget2 wp-post-image" alt="" / loading=lazy loading=lazy> </div> <div class="last-post-tit">PC와 Android 간에 파일을 전송하는 방법은 다음과 같습니다.</div> <div class="clr"></div> <a href="https://hentai-x.ru/ko/router-setup/podklyuchenie-android-ustroistva-k-kompyuteru-po-wi-fi-kak/">읽다</a> </div> <div class="last-post col-lg-12 col-md-12 col-sm-6 col-xs-6"> <div class="last-post-img"> <img width="60" height="48" src="/uploads/30adc10797c3a599e3ebbb922dfcdb1e.jpg" class="attachment-sm-widget2 size-sm-widget2 wp-post-image" alt="" / loading=lazy loading=lazy> </div> <div class="last-post-tit">SQL을 사용하여 데이터를 검색하는 간단한 쿼리</div> <div class="clr"></div> <a href="https://hentai-x.ru/ko/router-setup/gotovye-sql-zaprosy-prostye-zaprosy-na-vyborku-dannyh-sredstvami-sql-vyborka-vseh/">읽다</a> </div> <div class="clr"></div> </div> </div> <div id="text-4" class="widget widget_text sidebar-wrp"> <div class="textwidget"> </div> </div> <div class="clr"></div> </div> </div> </div> </div> <div id="footer"> <div class="container"> <div class="row"> <div class="footer-contacts col-lg-6 col-md-6 col-sm-12 col-xs-12"> <img src="/img/logo.svg?1" loading=lazy loading=lazy> <div class="footer-contacts-tit">hentai-x.ru <br>인터넷. 안전. 컴퓨터 수리. 유용한 팁. 텔레비전</div> <div class="footer-soc"> <div class="footer-soc-wrp"> <div class="soc_w"> <a href="https://vk.com/share.php?url=https://hentai-x.ru/useful-tips/vbs-komandy-vbscript-osnovy-vbscript-obekty-ih-metody-i-svoistva/" class="soc-link vk" target="_blank"></a> <a href="https://www.facebook.com/sharer/sharer.php?u=https://hentai-x.ru/useful-tips/vbs-komandy-vbscript-osnovy-vbscript-obekty-ih-metody-i-svoistva/" class="soc-link fb" target="_blank"></a> </div> </div> </div> </div> <div class="footer-links col-lg-4 col-md-6 col-sm-12 col-xs-12"> </div> <div class="footer-links col-lg-4 col-md-4 col-sm-4 col-xs-4" style="display: block;"> <ul> <li><a href="">프로젝트 편집</a></li> <li><a href="">웹사이트에 광고하기</a></li> </ul> <ul> <li><a href="https://hentai-x.ru/ko/feedback/">콘택트 렌즈</a></li> <li><a href="https://hentai-x.ru/ko/sitemap.xml">사이트 맵</a></li> </ul> </div> </div> </div> <div class="copyright">© 2024 인터넷. 안전. 컴퓨터 수리. 유용한 팁. 텔레비전</div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script src="https://hentai-x.ru/wp-content/themes/trudinsp/js/bootstrap.min.js"></script> <script type="text/javascript" src="https://hentai-x.ru/wp-content/themes/trudinsp/js/SmoothScroll.js"></script> <a id="scroll-to-top" href="#" title="맨위로 스크롤">맨 위</a> <script type='text/javascript' src='https://hentai-x.ru/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js?ver=3.51.0-2014.06.20'></script> <script type='text/javascript' src='https://hentai-x.ru/wp-content/plugins/jquery-smooth-scroll/js/jss-script.min.js?ver=4.8.3'></script> <script type='text/javascript' src='https://hentai-x.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript' src='/wp-includes/js/jquery/ui/effect.min.js?ver=1.11.4'></script> <script type='text/javascript' src='/wp-includes/js/jquery/ui/effect-blind.min.js?ver=1.11.4'></script> <script type='text/javascript'> /* <![CDATA[ */ var stbUserOptions = { "mode":"css","cssOptions":{ "roundedCorners":false,"mbottom":20,"imgHide":"http:\/\/hentai-x.ru\/wp-content\/plugins\/wp-special-textboxes\/themes\/stb-metro\/minus.png","imgShow":"http:\/\/hentai-x.ru\/wp-content\/plugins\/wp-special-textboxes\/themes\/stb-metro\/plus.png","strHide":"\u0421\u043a\u0440\u044b\u0442\u044c","strShow":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c"} }; /* ]]> */ </script> <script type='text/javascript' src='https://hentai-x.ru/wp-content/plugins/wp-special-textboxes/js/wstb.min.js?ver=5.5.101'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.8.3'></script> <script type="text/javascript" id="slb_context">/* <![CDATA[ */if ( !!window.jQuery ) { (function($){ $(document).ready(function(){ if ( !!window.SLB ) { { $.extend(SLB, { "context":["public","user_guest"]} );} } })} )(jQuery);} /* ]]> */</script> </body> </html>