반응형

아래 코드는 cmd 창에서 매개변수들을 던져주며 수행한다.

' 파일명: RunWithArguments.vbs
' 사용법: cscript RunWithArguments.vbs arg1 arg2 ...

' 커맨드 라인 인수를 가져오기
Set objArgs = WScript.Arguments

' 인수가 적어도 하나 이상인지 확인
If objArgs.Count < 1 Then
    WScript.Echo "How to use: cscript RunWithArguments.vbs arg1 arg2 ..."
    WScript.Quit
End If

' 인수 출력
WScript.Echo "how many args get? " & objArgs.Count
WScript.Echo "args lists:"

' 모든 인수 출력
For i = 0 To objArgs.Count - 1
    WScript.Echo "list " & (i + 1) & ": " & objArgs(i)
Next

' 여기에 인수를 활용한 로직 추가
' 예를 들어, 전달받은 인수를 이용하여 다른 프로그램을 실행하는 등의 동작 수행 가능

' 예시: Notepad 실행
Set objShell = WScript.CreateObject("WScript.Shell")
'objShell.Run "notepad.exe", 1, True

 

1. 위 스크립트를 넣은 파일 "RunWithArguments.vbs"을 만듦.

 

 

2. cmd로 해당 경로로 이동 후 실행

명령어 입력

RunWithArguments.vbs 1 2 3

 

반응형

결과

 

아래 창들이 하나씩 뜸.

 

총 몇개의 인자가 입력되었는지,

각 list에 어떤값이 입력되어었는지

 

 

반응형
반응형

특정 Host와 네크워크로 연결이 되어있는지 확인할 수 있는 스크립트이다.

 

CMD창에서 Ping으로 연결을 체크하는 기능과 같다.

예를들면 구글 IP주소인 8.8.8.8에 Ping을 때리면 연결 양호 신호가 온다.

반대로 연결이 안되있다면 Timed out 신호가 온다.

 

반응형

 

아래 스크립트를 실행만하면 성공 실패 여부와 연결상태를 확인할 수 있다.

 

코드

Option Explicit

Dim strIPAddress, objShell, objExec, strPingResults

' 테스트할 IP 주소 (성공 케이스)
strIPAddress = "8.8.8.8"
' 테스트할 IP 주소 (실패 케이스)
'strIPAddress = "8.8.8.9"


' WScript.Shell 개체 생성
Set objShell = WScript.CreateObject("WScript.Shell")

' Ping 실행 및 결과 얻기, 
' -w 1000 : timeout 1초
' -n 3은 3번의 패킷을 보내도록 지정
Set objExec = objShell.Exec("ping -n 3 -w 1000 " & strIPAddress) 

' 결과 읽기
strPingResults = objExec.StdOut.ReadAll()

' 결과 출력
msgbox "Ping Result: " & strPingResults

' 결과에서 성공 여부 확인
If InStr(strPingResults, "TTL=") > 0 Then
    msgbox "Ping Succeed! Connected to HOST."
Else
    msgbox "Ping Failed!. Disconnected to HOST."
End If

' 객체 해제
Set objShell = Nothing
Set objExec = Nothing

 

 

 

 

 

반응형
반응형

 

VBscript에서 Dictionary를 만들고 사용하는 간단한 방법과 설명은 아래 링크를 참고.

https://ansan-survivor.tistory.com/1627

 

[Visual Basic] 비주얼베이직 스크립트 (VBScript), 딕셔너리 (Dictionary) 만들기 사용하기 특징

딕셔너리 장점. 1. 데이터 검색,추가,수정,삭제 쉬움 2. 간단히 사용 3. 모든 데이터 (배열, 딕셔너리)를 넣어서 사용가능. 갖고있는 속성 (Property) - Count : 현재 저장 갯수 반환 - Item("Key값") : "Key값"

ansan-survivor.tistory.com

 

 

마치 파이썬으로 치면,

Key값이 a이고 Value가 List인 경우 (예를 들면 아래와 같은)

이러한 딕셔너리를 VBScript로 만들고 싶을 때 사용할 수 있는 샘플코드이다.

dictSample = {key: "a", Value: ["1-2", "2-3", "3-4"] }

 

반응형

 

아래 샘플은 key값이 a,b,c 이고, 그때 사용할 수 있는 List를 담는 예제이다.

간단하게 자주 사용할 수 있는, 응용할 수 있는 샘플 코드이다.

' Dictionary object 선언
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")

' key-value 등록법
myDictionary.Add "a", Array("1-2", "2-3", "3-4")
myDictionary.Add "b", Array("5-6", "6-7", "7-8")
myDictionary.Add "c", Array("9-10", "10-11", "11-12")

' value호출 방법
msgbox "Value associated with 'a':"
For Each item In myDictionary("a")
    msgbox item
Next

msgbox "Value associated with 'b':"
For Each item In myDictionary("b")
    msgbox item
Next

msgbox "Value associated with 'c':"
For Each item In myDictionary("c")
    msgbox item
Next

그림으로 그려보자면 아래와 같다.

 

 

결과 확인

아래와 같은 msgbox가 순서대로 출력된다.

(나머지 생략)

 

즉 Key값 먼저 출력되고 그 뒤에 value값이 따라서 출력된다.

이를 통해 VBScript에서 어떻게 Dictionary를 쓰고 Key값 호출, Value값 호출을 하는지 보고 수정해서 쓰면된다.

 

위 예문에서는 For Each문을 통해 한꺼번에 모두다 출력하도록 했지만, 만약 List 내부의 특정 값에 접근하고 싶다면 아래와 같이 접근한다.

' Create a new Dictionary object
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")

' Add key-value pairs to the dictionary
myDictionary.Add "a", Array("1-2", "2-3", "3-4")

' Access the first item in the array associated with "a" key
Dim firstItem
firstItem = myDictionary("a")(0)

' Display the first item using MsgBox
MsgBox "First item associated with 'a' key: " & firstItem

(결과)

 

 

* 만약에 생성한 "a" Dictionary에 있는 Array에 추가로 값을 더 넣고 싶다면 아래 샘플 코드...

->

이 코드에서는 existingArray 변수에 "a" 키에 연결된 배열을 가져와서, 새로운 값을 추가하려는 newArray와 결합하여 combinedArray에 저장합니다.

그런 다음 "a" 키에 새로운 combinedArray를 할당합니다. 이렇게 하면 오류 없이 값을 추가할 수 있습니다.

' Create a new Dictionary object
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")

' Add key-value pairs to the dictionary
myDictionary.Add "a", Array("1-2", "2-3", "3-4")

' Access the first item in the array associated with "a" key
Dim firstItem
firstItem = myDictionary("a")(0)

' Get the existing array associated with "a" key
existingArray = myDictionary("a")

' Create a new array with additional values
Dim newArray
newArray = Array("apple", "banana", "orange")

' Combine the existing and new arrays
ReDim combinedArray(UBound(existingArray) + UBound(newArray) + 1)
Dim i

For i = 0 To UBound(existingArray)
    combinedArray(i) = existingArray(i)
Next

For i = UBound(existingArray) + 1 To UBound(existingArray) + UBound(newArray) + 1
    combinedArray(i) = newArray(i - UBound(existingArray) - 1)
Next

' Update the "a" key in the dictionary with the combined array
myDictionary("a") = combinedArray

' Output verification
MsgBox "Values associated with 'a':"
For Each item In myDictionary("a")
    MsgBox item
Next

 

 

반응형
반응형

 

파이썬은 List가 있어서 index를 쉽게 컨트롤할 수 있지만, VBScript에는 List가 없다.

VBScript는 "Array" 배열과, Collection이 있으며, Collection을 이용해 List처럼 사용할 수 있다.

 

  1. 배열(Array):
    • 배열은 동일한 유형의 데이터 항목을 순차적으로 저장하는 데 사용됩니다.
    • 각 항목은 인덱스(index)로 식별됩니다. 인덱스는 0부터 시작하여 배열의 크기보다 하나 적은 값을 가집니다.
    • 예를 들어, Dim numbers(4)와 같이 선언하면 0부터 4까지 총 5개의 요소를 가진 배열이 생성됩니다.
    • 배열은 고정 크기를 가지며, 크기를 변경하려면 새로운 배열을 만들고 데이터를 복사해야 합니다.
  2. 리스트(List):
    • VBScript에서 기본적으로 리스트 자료형은 제공되지 않습니다. 하지만 컬렉션(Collection)을 활용하여 리스트와 유사한 동작을 구현할 수 있습니다.
    • 컬렉션은 여러 항목을 저장하는 데 사용되며, 크기가 동적으로 조정될 수 있습니다.
    • Dictionary나 ArrayList 등의 컬렉션을 활용하여 리스트와 비슷한 기능을 구현할 수 있습니다.
    • 컬렉션은 인덱스뿐만 아니라 특정 항목의 이름(Key)을 사용하여 데이터에 접근할 수 있습니다.

 

배열 예제:

Dim numbers(4) 
numbers(0) = 10 
numbers(1) = 20 
numbers(2) = 30 
numbers(3) = 40 
numbers(4) = 50

컬렉션(리스트) 예제:

Set list = CreateObject("System.Collections.ArrayList") 
list.Add 10 
list.Add 20 
list.Add 30 
list.Add 40 
list.Add 50

요약하면, VBScript에서 배열은 정적 크기의 동일한 유형 데이터를 순차적으로 저장하는데 사용되며, 컬렉션을 활용하여 동적 크기의 리스트와 비슷한 기능을 구현할 수 있습니다.

 

 

 

예제 (x,y) 와 같은 좌표점을 하나의 List로 담을 때,
예를들면 아래와 같이 List 내부에 값들을 넣고자 할 때,
: [ (10,20),(20,30),(30,40),(40,50) ]

VBScript에서는 기본적으로 튜플(tuple)이나 좌표와 같은 복합 데이터 구조를 제공하지 않습니다. 그러나 여러 가지 방법을 사용하여 이러한 구조를 나타내고 처리할 수 있습니다. 먼저, 2D 배열을 사용하여 각 항목을 좌표로 나타내는 방법을 보여드리겠습니다.

2D 배열을 사용한 예제:

 
Dim coordinates(4, 1) 
coordinates(0, 0) = 10 
coordinates(0, 1) = 20 
coordinates(1, 0) = 20 
coordinates(1, 1) = 30 
coordinates(2, 0) = 30 
coordinates(2, 1) = 40 
coordinates(3, 0) = 40 
coordinates(3, 1) = 50

 

하지만, 좀 더 간편하게 구조를 다루려면 VBScript에서는 컬렉션(Collection)을 사용하여 좀 더 유연한 데이터 구조를 구현할 수 있습니다. 아래는 컬렉션을 사용한 예제입니다.

 

컬렉션을 사용한 예제:

Set coordinatesList = CreateObject("System.Collections.ArrayList") 
coordinatesList.Add Array(10, 20)
coordinatesList.Add Array(20, 30) 
coordinatesList.Add Array(30, 40) 
coordinatesList.Add Array(40, 50)
 

이렇게 하면 coordinatesList 컬렉션에 각각의 좌표를 표현하는 배열이 추가됩니다.

각 배열은 2개의 요소를 가지며, 첫 번째 요소는 x 좌표이고 두 번째 요소는 y 좌표입니다. 이러한 구조를 활용하여 데이터를 저장하고 처리할 수 있습니다.

 

 

반응형

 

 

 
 

coordinatesList.Add가 파이썬의 append와 같은 기능을 한다.

coordinatesList.Add 메서드는 일종의 "추가" 작업을 수행하며, 리스트나 컬렉션에 새로운 항목을 마지막에 추가합니다. 이것은 많은 프로그래밍 언어에서의 "append" 작업과 유사한 역할을 합니다. 새로운 항목이 리스트의 끝에 추가되므로 리스트의 크기가 동적으로 증가할 수 있습니다.

 

따라서 coordinatesList.Add를 사용하여 컬렉션에 새 항목을 추가하는 것은 데이터를 리스트나 컬렉션에 덧붙이는 작업이라고 볼 수 있습니다.

 
 
 
 

 Array()는 Dim선언이 필요하지 않다.

 

Array()는 VBScript 내장 함수로, 배열을 생성하고 초기화하는 데 사용됩니다.

이 함수를 사용할 때는 Dim 선언이 필요하지 않습니다.

Array() 함수를 사용하면 배열을 선언과 동시에 초기화할 수 있습니다.

예를 들어, 다음과 같이 Array() 함수를 사용하여 배열을 생성하고 초기화할 수 있습니다.

 
Dim coordinates 
coordinates = Array(Array(10, 20), Array(20, 30), Array(30, 40), Array(40, 50))

 

위의 코드에서 coordinates는 2D 배열이 됩니다. Array() 함수는 초기화된 값을 가진 배열을 반환하므로, Dim 선언이 따로 필요하지 않습니다.

 

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

 

** Msgbox로 디버깅방법.

아래와 같이 각 Array의 좌표를 확인해볼 수 있다.

MsgBox "Added coordinates: (" & X & ", " & Y & ")"

 

 

 

반응형
반응형

 

앞서 1차원 배열에 관해서는 아래를 참고.

https://ansan-survivor.tistory.com/1590

 

[Visual Basic] 비주얼베이직 스크립트 (VBScript) 배열, 리스트 (Array), 배열 크기, 배열사이즈 함수 uboun

VBscript에서 배열을 선언하는 방식은 아래와 같다. 'Method 1 : 동적 배열 선언 (사이즈를 한정하지 않음) Dim arr1() 'Without Size 'Method 2 : 정적 배열 선언 (사이즈를 한정함 5칸) Dim arr2(5) 'Declared with size of

ansan-survivor.tistory.com

 

2차원 배열에 관한 설명.

 

샘플코드

' 3x4 크기의 2차원 배열 선언
Dim myArray(2, 3)  

' 배열에 값 할당
myArray(0, 0) = 1
myArray(0, 1) = 2
myArray(0, 2) = 3
myArray(0, 3) = 4

myArray(1, 0) = 5
myArray(1, 1) = 6
myArray(1, 2) = 7
myArray(1, 3) = 8

myArray(2, 0) = 9
myArray(2, 1) = 10
myArray(2, 2) = 11
myArray(2, 3) = 12

' 배열 요소에 접근하여 값 출력
For row = 0 To 2
    For col = 0 To 3
        Msgbox "myArray(" & row & ", " & col & ") = " & myArray(row, col)
    Next
Next
반응형

 

결과는  for문으로 내부 배열이 쭉 출력된다.

직관적으로 보면 아래와 같은 2차원 배열을 만들고 하나씩 출력한 것이다.

 

 

 

 

 

 

반응형
반응형

로그같이 지저분한 파일들을 모두 Space 기준으로 쪼갠 후

배열으로 저장시킴.

필요없는 문자열들 예를들면 mm나 : 등등 모두 null으로 변경 시키기 (Replace 함수)

최종적으로 , 콤마를 기준으로 데이터만 출력하는 파일을 생성.

 

샘플 스크립트

여기서 쪼개진 splitedLine 은 Array 타입이다.

Dim import, export
import = "스페이스바로 분리시킬 파일.txt"
export = "결과 출력파일 이름.txt"

Call ExtractComponentInfo(import, export)

Function ExtractComponentInfo(inputFile, outputFile)
    Dim objFSO, objFileIn, objFileOut
    Dim strLine, splitedLine
    Dim comp1, comp2, dist, minz

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFileIn = objFSO.OpenTextFile(inputFile, 1)
    Set objFileOut = objFSO.CreateTextFile(outputFile, True)

    Do Until objFileIn.AtEndOfStream
        strLine = objFileIn.ReadLine()
        splitedLine = Split(strLine, " ")

        ' UBound(splitedLine) 배열의 크기가 4인지 확인 (0~4 까지 총 5개가 들어있는 배열)
        If UBound(splitedLine) = 4 Then
            comp1 = splitedLine(1)
            comp2 = Replace(splitedLine(4), ":", "")
        End If

       If UBound(splitedLine) > 4 Then
            dist = Replace(Replace(splitedLine(9), "mm", ""), ",", "")
            minz = Replace(splitedLine(13), "mm", "")
            objFileOut.WriteLine comp1 & "," & comp2 & "," & dist & "," & minz
        End If
    Loop

    objFileIn.Close
    objFileOut.Close

    Set objFileIn = Nothing
    Set objFileOut = Nothing
    Set objFSO = Nothing
End Function

 

 

반응형
반응형

아래와 같이 3개 줄로 나뉜 Text파일이 있다.

구분자는 Comma (쉼표) 으로 되어있다.

이 Text파일을 읽고 Line을 각 Array으로 가져온다.

 

코드를 미리 분석하면 아래 data 변수는 각 줄을 하나의 묶음 List 으로 내보낸다.

Split을 이용해 comma를 기준으로 각 항목을 잘라서 List으로 저장하여 2차 배열 (Array)으로 내보낸다.

반응형

 

함수로 return하여 새로운 변수 ColLines에 담았다.

이 ColLines는 각 줄의 정보가 하나씩 담겨있고 (1차 배열)

위와같이 For Each으로 3개의 줄을 하나씩 나눠서 또 data(0), data(1), data(2), data(3)  으로 각각의 값을 확인할 수 있다.

 

코드

Function readFilereturnLineList(file_path)
    Dim fso, inputFile, line, lines, data
    
    ' 파일 시스템 객체 생성
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 입력 파일 열기
    Set inputFile = fso.OpenTextFile(file_path, 1)
    
    ' 파일 내 각 줄을 읽어서 리스트에 추가합니다
    Do Until inputFile.AtEndOfStream
        line = inputFile.ReadLine()
        If Len(Trim(line)) > 0 Then
            lines = lines & line & vbCrLf
        End If
    Loop
    
    ' 각 줄을 하나의 리스트로 만듭니다
    data = Split(lines, vbCrLf)
    For i = 0 To UBound(data)
        data(i) = Split(data(i), ",")
    Next
    
    ' 결과 리스트를 반환합니다
    readFilereturnLineList = data
    
    ' 파일 닫기
    inputFile.Close
End Function

Dim colLines, data
colLines = readFilereturnLineList("output.txt")

For Each data In colLines
    If UBound(data) >= 0 Then
        MsgBox data(0)
        MsgBox data(1)
        MsgBox data(2)
        MsgBox data(3)
    End If
Next

 

결과는 msgbox로 출력되고, 만약 data(0)만 출력한다면 아래와 같다.

즉, 아래와 같이 첫번째 항목만 뽑았다고 보면 된다.

반응형
반응형

아래와 같이 파일 존재 유무 확인가능.

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.FileExists("C:\example\file.txt")

If objFile = True Then
    WScript.Echo "파일이 존재합니다."
Else
    WScript.Echo "파일이 존재하지 않습니다."
End If

 

 

 

 

 

 

반응형
12345

+ Recent posts