2

VBscript を使用して、カスタム拡張子 (.txt 拡張子の代わりに .cyc など) を持つ外部ファイルをどのように読み書きしますか?

方法がわからず、それを理解できないようです。ファイルを読み取る場合、ファイルの一部のみを読み取ることは可能ですか? たとえば、ラインがある場合

string1=ハローワールド!

ファイル内で、スクリプトが string1 行からのみ読み取る方法と、vbscript ファイル内の文字列にテキスト値を割り当てる方法を教えてください。

では、ファイルに単一の値を書き込むにはどうすればよいでしょうか?

明確にするために、私は基本的に外部ファイルを構成/データファイルとして使用しようとしています。

これはおそらく本当に初心者の質問であり、そうであれば本当に申し訳ありません。

編集: これは 2 つの部分からなる質問です。上記のようにファイルを読み書きするためのコードと、カスタム拡張機能を使用する方法を知る必要があります。

4

4 に答える 4

1

次のように、ファイル名の末尾に拡張子を含めるだけです。

c:\myfolder\myfile.ext

ファイルを書き込み用に開いたとき。

新しいファイルを開き、テキスト行を書き込み、ファイルを閉じるサンプル コードを次に示します。

Set myFSO = CreateObject("Scripting.FileSystemObject")
Set WriteStuff = myFSO.OpenTextFile("c:\myfolder\myfile.ext", 2, true)
WriteStuff.WriteLine("Hello World.")
WriteStuff.Close
Set WriteStuff = nothing
Set myFSO = nothing

これを読み返すコードは次のとおりです。

Dim S as String
Set myFSO = CreateObject("Scripting.FileSystemObject")
Set ReadStuff = myFSO.OpenTextFile("c:\myfolder\myfile.ext", 1)
S=Readstuff.ReadLine
ReadStuff.Close
Set ReadStuff = nothing
Set myFSO = nothing

http://www.activeexperts.com/activmonitor/windowsmanagement/adminscripts/other/textfiles/には、さらにいくつかの例があります。

于 2009-06-20T03:07:41.647 に答える
1

ランダムな場所でテキスト ファイルを読み書きする場合は、INI ファイルを使用することをお勧めします。

INI ファイルには、次のようなエントリが含まれています。

[owner]
name=John Doe
organization=Acme Products

ini ファイルを読み取るには、次のように呼び出すことができる関数が必要です。

Dim s as string
s=ReadINI("c:\myfolder\myfile.ext", "owner", "name")

...これにより、「John Doe」が s に挿入されます。

これを行うコードは次のとおりです: http://cwashington.netreach.net/depo/view.asp?Index=553

INI ファイルの書き込みも同じように機能します。

別の例を次に示します。

WriteINI("c:\myfolder\myfile.ext", "MySection", "MyItem", "MyValue")

次のような INI ファイルを作成します。

[MySection]
MyItem=MyValue

各セクション内には、必要な数の異なるセクションとアイテムを含めることができます。必要な値を取得するには、取得する値のセクション名と項目名を指定して ReadINI を呼び出すだけです。

于 2009-06-20T03:30:40.697 に答える
0

サイクロン:

  1. フォルダー c:\testarea を作成します。
  2. 作成したフォルダーに test.vbs というテキスト ファイルを作成し、以下のコードを貼り付けます。
  3. test.vbs ファイルをダブルクリックして実行します。同じディレクトリに test.ini ファイルが作成されることに注意してください。test.ini を開いて表示します。

このコードはテスト済みなので、動作することがわかっています。http://www.robvanderwoude.com/vbstech_files_ini.phpから入手しました

      Function ReadIni( myFilePath, mySection, myKey )
    ' This function returns a value read from an INI file
    '
    ' Arguments:
    ' myFilePath  [string]  the (path and) file name of the INI file
    ' mySection   [string]  the section in the INI file to be searched
    ' myKey       [string]  the key whose value is to be returned
    '
    ' Returns:
    ' the [string] value for the specified key in the specified section
    '
    ' CAVEAT:     Will return a space if key exists but value is blank
    '
    ' Written by Keith Lacelle
    ' Modified by Denis St-Pierre and Rob van der Woude

    Const ForReading   = 1
    Const ForWriting   = 2
    Const ForAppending = 8

    Dim intEqualPos
    Dim objFSO, objIniFile
    Dim strFilePath, strKey, strLeftString, strLine, strSection

    Set objFSO = CreateObject( "Scripting.FileSystemObject" )

    ReadIni     = ""
    strFilePath = Trim( myFilePath )
    strSection  = Trim( mySection )
    strKey      = Trim( myKey )

    If objFSO.FileExists( strFilePath ) Then
        Set objIniFile = objFSO.OpenTextFile( strFilePath, ForReading, False )
        Do While objIniFile.AtEndOfStream = False
            strLine = Trim( objIniFile.ReadLine )

            ' Check if section is found in the current line
            If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then
                strLine = Trim( objIniFile.ReadLine )

                ' Parse lines until the next section is reached
                Do While Left( strLine, 1 ) <> "["
                    ' Find position of equal sign in the line
                    intEqualPos = InStr( 1, strLine, "=", 1 )
                    If intEqualPos > 0 Then
                        strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )
                        ' Check if item is found in the current line
                        If LCase( strLeftString ) = LCase( strKey ) Then
                            ReadIni = Trim( Mid( strLine, intEqualPos + 1 ) )
                            ' In case the item exists but value is blank
                            If ReadIni = "" Then
                                ReadIni = " "
                            End If
                            ' Abort loop when item is found
                            Exit Do
                        End If
                    End If

                    ' Abort if the end of the INI file is reached
                    If objIniFile.AtEndOfStream Then Exit Do

                    ' Continue with next line
                    strLine = Trim( objIniFile.ReadLine )
                Loop
            Exit Do
            End If
        Loop
        objIniFile.Close
    Else
        WScript.Echo strFilePath & " doesn't exists. Exiting..."
        Wscript.Quit 1
    End If
    End Function


    Sub WriteIni( myFilePath, mySection, myKey, myValue )
    ' This subroutine writes a value to an INI file
    '
    ' Arguments:
    ' myFilePath  [string]  the (path and) file name of the INI file
    ' mySection   [string]  the section in the INI file to be searched
    ' myKey       [string]  the key whose value is to be written
    ' myValue     [string]  the value to be written (myKey will be
    '                       deleted if myValue is <DELETE_THIS_VALUE>)
    '
    ' Returns:
    ' N/A
    '
    ' CAVEAT:     WriteIni function needs ReadIni function to run
    '
    ' Written by Keith Lacelle
    ' Modified by Denis St-Pierre, Johan Pol and Rob van der Woude

    Const ForReading   = 1
    Const ForWriting   = 2
    Const ForAppending = 8

    Dim blnInSection, blnKeyExists, blnSectionExists, blnWritten
    Dim intEqualPos
    Dim objFSO, objNewIni, objOrgIni, wshShell
    Dim strFilePath, strFolderPath, strKey, strLeftString
    Dim strLine, strSection, strTempDir, strTempFile, strValue

    strFilePath = Trim( myFilePath )
    strSection  = Trim( mySection )
    strKey      = Trim( myKey )
    strValue    = Trim( myValue )

    Set objFSO   = CreateObject( "Scripting.FileSystemObject" )
    Set wshShell = CreateObject( "WScript.Shell" )

    strTempDir  = wshShell.ExpandEnvironmentStrings( "%TEMP%" )
    strTempFile = objFSO.BuildPath( strTempDir, objFSO.GetTempName )

    Set objOrgIni = objFSO.OpenTextFile( strFilePath, ForReading, True )
    Set objNewIni = objFSO.CreateTextFile( strTempFile, False, False )

    blnInSection     = False
    blnSectionExists = False
    ' Check if the specified key already exists
    blnKeyExists     = ( ReadIni( strFilePath, strSection, strKey ) <> "" )
    blnWritten       = False

    ' Check if path to INI file exists, quit if not
    strFolderPath = Mid( strFilePath, 1, InStrRev( strFilePath, "\" ) )
    If Not objFSO.FolderExists ( strFolderPath ) Then
        WScript.Echo "Error: WriteIni failed, folder path (" _
                   & strFolderPath & ") to ini file " _
                   & strFilePath & " not found!"
        Set objOrgIni = Nothing
        Set objNewIni = Nothing
        Set objFSO    = Nothing
        WScript.Quit 1
    End If

    While objOrgIni.AtEndOfStream = False
        strLine = Trim( objOrgIni.ReadLine )
        If blnWritten = False Then
            If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then
                blnSectionExists = True
                blnInSection = True
            ElseIf InStr( strLine, "[" ) = 1 Then
                blnInSection = False
            End If
        End If

        If blnInSection Then
            If blnKeyExists Then
                intEqualPos = InStr( 1, strLine, "=", vbTextCompare )
                If intEqualPos > 0 Then
                    strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )
                    If LCase( strLeftString ) = LCase( strKey ) Then
                        ' Only write the key if the value isn't empty
                        ' Modification by Johan Pol
                        If strValue <> "<DELETE_THIS_VALUE>" Then
                            objNewIni.WriteLine strKey & "=" & strValue
                        End If
                        blnWritten   = True
                        blnInSection = False
                    End If
                End If
                If Not blnWritten Then
                    objNewIni.WriteLine strLine
                End If
            Else
                objNewIni.WriteLine strLine
                    ' Only write the key if the value isn't empty
                    ' Modification by Johan Pol
                    If strValue <> "<DELETE_THIS_VALUE>" Then
                        objNewIni.WriteLine strKey & "=" & strValue
                    End If
                blnWritten   = True
                blnInSection = False
            End If
        Else
            objNewIni.WriteLine strLine
        End If
    Wend

    If blnSectionExists = False Then ' section doesn't exist
        objNewIni.WriteLine
        objNewIni.WriteLine "[" & strSection & "]"
            ' Only write the key if the value isn't empty
            ' Modification by Johan Pol
            If strValue <> "<DELETE_THIS_VALUE>" Then
                objNewIni.WriteLine strKey & "=" & strValue
            End If
    End If

    objOrgIni.Close
    objNewIni.Close

    ' Delete old INI file
    objFSO.DeleteFile strFilePath, True
    ' Rename new INI file
    objFSO.MoveFile strTempFile, strFilePath

    Set objOrgIni = Nothing
    Set objNewIni = Nothing
    Set objFSO    = Nothing
    Set wshShell  = Nothing
    End Sub
         '
         '
    Call  WriteINI("c:\testarea\Test.INI","Section1","Item1","Value1")
    Call  WriteINI("c:\testarea\Test.INI","Section1","Item2","Value2")
    Call  WriteINI("c:\testarea\Test.INI","Section1","Item3","Value3")
    Call  WriteINI("c:\testarea\Test.INI","Section2","Item4","Value4")
    Call  WriteINI("c:\testarea\Test.INI","Section2","Item5","Value5")
于 2009-06-21T03:06:37.477 に答える