0

この VBScript について助けが必要
です ここで行おうとしているのは、ログ ファイルを変更して内部の余分なスペースを削除することです。(実際にこのスクリプトをネット上のどこかで入手しました。)
単一のファイルを指定しても機能しますが、複数のファイルを変更しようとしています。以下で行ったようにワイルドカード文字を使用しても機能しませんでした(vbsが苦手で申し訳ありません)

また、新しい出力ファイルを作成せずにこれを行う方法を知っている人はいますか? 元のファイルを変更するだけです。前もって感謝します..

Set objFSO = CreateObject("Scripting.FileSystemObject") 
'change this line to wherever you want to read the input from.
Set objTextFile = objFSO.OpenTextFile("D:\access*.log",1) 
Set objNewFile = objFSO.CreateTextFile("D:\access*_new.log")
Do Until objTextFile.AtEndOfStream

myString = objTextFile.Readline
objNewFile.WriteLine(Replace (myString, " ", " "))
Loop
4

2 に答える 2

3

私のコメントに加えて: The Scripting Guyは、あなたの置換ケースを正確に説明しています: 複数のスペースを 1 つずつ、正規表現で:

Set objRegEx = CreateObject("VBScript.RegExp")

objRegEx.Global = True
objRegEx.Pattern = " {2,}"

strSearchString = _
"Myer Ken, Vice President, Sales and Services"
strNewString = objRegEx.Replace(strSearchString," ")

Wscript.Echo strNewString

Scripting Guy は、テキスト ファイルを変更する方法についても説明しています。

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Text.txt", ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "Jim ", "James ")

Set objFile = objFSO.OpenTextFile("C:\Scripts\Text.txt", ForWriting)
objFile.WriteLine strNewText
objFile.Close

また、同じtechnet.microsoftで、すべてのファイルを簡単に反復処理する方法を見つけることができます。あなたの場合、正規表現をもう一度使用して、ファイルが(ワイルドカード)パターンと一致しているかどうかを確認できます^access.*\.log$

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\FSO")
Set colFiles = objFolder.Files
For Each objFile in colFiles
    Wscript.Echo objFile.Name, objFile.Size
Next

これにより、スクリプトを作成するためのすべての要素が得られます。

于 2013-01-31T09:27:02.660 に答える
1

フリーズドライバージョン:

  Const ForReading = 1
  Const ForWriting = 2

  Dim goFS    : Set goFS    = CreateObject("Scripting.FileSystemObject")

  Dim reZap : Set reZap = New RegExp
  reZap.Global  = True
  reZap.Pattern = " +"
  Dim oFile
  For Each oFile In goFS.GetFolder("..\testdata\14620676").Files
      WScript.Echo "----", oFile.Name
      Dim sAll : sAll = oFile.OpenAsTextStream(ForReading).ReadAll()
      WScript.Echo sAll
      oFile.OpenAsTextStream(ForWriting).Write reZap.Replace(sAll, " ")
      WScript.Echo oFile.OpenAsTextStream(ForReading).ReadAll()
  Next

@AutomatedChaos の立派な貢献 (+1) がなければまったく意味がありませんが、.WriteLine の代わりに .Write を使用することでファイルの末尾が大きくなるのを回避します。

于 2013-01-31T09:47:45.410 に答える