0

そこで、承認済みの共有と現在の共有という 2 つの配列を作成しました。

'Reads Approvedshare txt and makes the txt file into an array
public objFSO 
set objFSO = CreateObject("Scripting.FileSystemObject") 
Dim objTextFile 
Set objTextFile = objFSO.OpenTextFile ("C:\Users\a352592\Desktop\Abdullahi\Remove Shares Utility\approvedshares.txt") 
Public strTextFile, strData, arrLines, LineCount
CONST ForReading = 1
strTextFile = ("C:\Users\a352592\Desktop\Abdullahi\Remove Shares Utility\approvedshares.txt")
strData = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll
arrLines = Split(strData,vbCrLf)
LineCount = UBound(arrLines) + 1
wscript.echo "Approved share count : " &Linecount

'Reads current shares txt and also makes that txt into an array
Set objTextFile1 = objFSO.OpenTextFile ("C:\Users\a352592\Desktop\Abdullahi\Remove Shares Utility\currentshares.txt") 
Public strTextFile1, strData1, arrLines1, LineCount1

strTextFile1 = ("C:\Users\a352592\Desktop\Abdullahi\Remove Shares Utility\currentshares.txt")
strData1 = objFSO.OpenTextFile(strTextFile1,ForReading).ReadAll
arrLines1 = Split(strData1,vbCrLf)
LineCount1 = UBound(arrLines1) + 1
wscript.echo "current share count : " &Linecount1

次に、2 つの配列を取得し、現在の共有から配列項目を取得し、それが承認された共有にあるかどうかを確認し、そうでない場合はその配列を削除してログに記録する必要があります。これは、2つを比較するために使用していたコードですが、機能しません。

'Compare the two arrays and take out the one's that don't match
For Each ApprovedShareName In arrLines
  found = False
  For Each CurrentShareName In arrLines1 
    If ApprovedShareName = CurrentShareName Then
    found = True
    Exit For
    End If
    found = False
  Next
  If found = False Then
  'wscript.echo "This isn't on approve shares text : " &textstream2
  End If 
Next

If arrLines.Contains(CurrentShareName) then

Else

end If

これは、txtファイルから行を削除するために使用していた関数です

'Set oShell = WScript.CreateObject("WSCript.shell")
'Function oShell (linedelete)
'oShell (linedelete) = oShell.run cmd cd /d C:dir_test\file_test & sanity_check_env.bat arg1
'end Function

これは、Wscript.shell に含まれていたものです。

/c net.exe share %LINE% /DELETE

これは、承認された共有内のファイルです

Test
  test123
test1234
flexare
   this
is
a
  example

これは現在の共有内のファイルです

Test
  test123
added 1
added2
test1234
flexare
added 3
   this
is
a
  example
added4

現在の共有を承認済みの共有と同じにしたい

Test
      test123
    test1234
    flexare
       this
    is
    a
      example

以下の配列ファイルを削除して、別のtxtファイルに入れます

added 1
added2
added 3
added4
4

2 に答える 2

0

したがって、問題は、セット「現在」でセット「承認済み」の相対的な補数を取得することです。「現在」にあるが「承認済み」には含まれていない要素のセットです。

スクリプト:

Option Explicit

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
ExecuteGlobal goFS.OpenTextFile( ".\SetLib.vbs" ).ReadAll

Function Fi2Ar(sFSpec)
  Dim aTmp : aTmp = Split(goFS.OpenTextFile(sFSpec).ReadAll(), vbCrLf)
  Dim nLst : nLst = -1
  Dim i
  For i = 0 To UBound(aTmp)
      If Trim(aTmp(i)) <> "" Then
         nLst = i
         aTmp(i) = Trim(aTmp(i))
         aTmp(i) = "'" & aTmp(i) & "'" ' just for display
      End If
  Next
  ReDim Preserve aTmp(nLst)
  Fi2Ar = aTmp
End Function

Dim aA   : aA   = Fi2Ar("..\data\s1.txt")
Dim aB   : aB   = Fi2Ar("..\data\s2.txt")
Dim aRes : aRes = diffArray( aA, aB )
WScript.Echo "A  : [", Join( aA ), "]"
WScript.Echo "B  : [", Join( aB ), "]"
WScript.Echo "UNI: [", Join( aRes( 0 ) ), "]", "in A or B"
WScript.Echo "INT: [", Join( aRes( 1 ) ), "]", "in A and B"
WScript.Echo "A\B: [", Join( aRes( 2 ) ), "]", "in A but not in B"
WScript.Echo "B\A: [", Join( aRes( 3 ) ), "]", "in B but not in A"
goFS.CreateTextFile("..\data\s3.txt").WriteLine Join(aRes(3), vbCrLf)
WScript.Echo "Bad Shares File:"
WScript.Echo goFS.OpenTextFile("..\data\s3.txt").ReadAll()

出力:

A  : [ 'Test' 'test123' 'test1234' 'flexare' 'this' 'is' 'a' 'example' ]
B  : [ 'Test' 'test123' 'added 1' 'added2' 'test1234' 'flexare' 'added 3' 'this' 'is' 'a' 'example' 'added4' ]

UNI: [ 'Test' 'test123' 'test1234' 'flexare' 'this' 'is' 'a' 'example' 'added 1' 'added2' 'added 3' 'added4' ]
 in A or B
INT: [ 'Test' 'test123' 'test1234' 'flexare' 'this' 'is' 'a' 'example' ] in A and B
A\B: [  ] in A but not in B
B\A: [ 'added 1' 'added2' 'added 3' 'added4' ] in B but not in A
Bad Shares File:
'added 1'
'added2'
'added 3'
'added4'

サンプル ファイルを読み取り、相対補数 B\A を計算して、ファイルに書き込みます。

here の diffArray() 関数を使用します。この関数は、同じフォルダー内のファイル SetLib.vbs に配置する必要があります (ExecuteGlobal ラインが関数を「インポート」します)。

Fi2Ar() 関数は .txt ファイルを読み取ります。表示を改善するために要素を引用しました。テスト後にステートメントを削除する必要があります。

于 2013-10-18T16:41:30.543 に答える