1428944008 VBSの質問です

以下のスクリプトを実行すると
windwos7環境ではエラーが起こらなかったのですが
windows8.1環境で実行すると以下の様なエラーが出てきました
どうすれば治りますでしょうか?

ファイルの最後を超えた入力を行おうとしました

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2015/04/14 01:53:28
  • 終了:2015/04/14 09:07:39
id:Izkgkf0CPUsl85gi0dBq
Option Explicit
Const TARGET_FOLDER = "."
Dim REPLACE_FROM
Set REPLACE_FROM = New RegExp
REPLACE_FROM.Pattern = "^<td>.*\n</tr>"
REPLACE_FROM.Global = True
REPLACE_FROM.Multiline = True
Const REPLACE_TO   = "</tr>"

Const ForReading = 1 '読み込み
Const ForWriting = 2 '書きこみ(上書きモード)
Const ForAppending = 8 '書きこみ(追記モード)

Dim objFSO, objFolder, objFile, objSubFolder, objTXT
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(TARGET_FOLDER)

For Each objFile In objFolder.Files
    Dim strFilePath, infile, outfile, strData
    strFilePath = objFSO.BuildPath(TARGET_FOLDER, objFile.Name)
    Set infile = objFSO.OpenTextFile(strFilePath,ForReading)
    strData = infile.ReadAll
    infile.Close
    Set infile = Nothing
    Set outfile = objFSO.OpenTextFile(strFilePath,ForWriting) 
    outfile.Write REPLACE_FROM.Replace(strData, REPLACE_TO)    
    outfile.Close
    Set outfile = Nothing
Next

dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "6.vbs"

ベストアンサー

id:gizmo5 No.1

gizmo5回答回数484ベストアンサー獲得回数1382015/04/14 08:43:45

ポイント500pt

環境が変わってから、空のファイルがあるのではないでしょうか。
以下のようにスクリプトを変更して試してみてください。

Option Explicit
Const TARGET_FOLDER = "."
Dim REPLACE_FROM
Set REPLACE_FROM = New RegExp
REPLACE_FROM.Pattern = "^<td>.*\n</tr>"
REPLACE_FROM.Global = True
REPLACE_FROM.Multiline = True
Const REPLACE_TO   = "</tr>"

Const ForReading = 1 '読み込み
Const ForWriting = 2 '書きこみ(上書きモード)
Const ForAppending = 8 '書きこみ(追記モード)

Dim objFSO, objFolder, objFile, objSubFolder, objTXT
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(TARGET_FOLDER)

For Each objFile In objFolder.Files
    Dim strFilePath, infile, outfile, strData
    strFilePath = objFSO.BuildPath(TARGET_FOLDER, objFile.Name)
    Set infile = objFSO.OpenTextFile(strFilePath,ForReading)
    If infile.AtEndOfStream Then
        infile.Close
    Else
        strData = infile.ReadAll
        infile.Close
        Set infile = Nothing
        Set outfile = objFSO.OpenTextFile(strFilePath,ForWriting) 
        outfile.Write REPLACE_FROM.Replace(strData, REPLACE_TO)    
        outfile.Close
        Set outfile = Nothing
    End If
Next

dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "6.vbs"
id:Izkgkf0CPUsl85gi0dBq

mac由来のカスファイルが原因でした
削除すれば動きました
ありがとうございました!

2015/04/14 09:12:46

その他の回答(0件)

id:gizmo5 No.1

gizmo5回答回数484ベストアンサー獲得回数1382015/04/14 08:43:45ここでベストアンサー

ポイント500pt

環境が変わってから、空のファイルがあるのではないでしょうか。
以下のようにスクリプトを変更して試してみてください。

Option Explicit
Const TARGET_FOLDER = "."
Dim REPLACE_FROM
Set REPLACE_FROM = New RegExp
REPLACE_FROM.Pattern = "^<td>.*\n</tr>"
REPLACE_FROM.Global = True
REPLACE_FROM.Multiline = True
Const REPLACE_TO   = "</tr>"

Const ForReading = 1 '読み込み
Const ForWriting = 2 '書きこみ(上書きモード)
Const ForAppending = 8 '書きこみ(追記モード)

Dim objFSO, objFolder, objFile, objSubFolder, objTXT
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(TARGET_FOLDER)

For Each objFile In objFolder.Files
    Dim strFilePath, infile, outfile, strData
    strFilePath = objFSO.BuildPath(TARGET_FOLDER, objFile.Name)
    Set infile = objFSO.OpenTextFile(strFilePath,ForReading)
    If infile.AtEndOfStream Then
        infile.Close
    Else
        strData = infile.ReadAll
        infile.Close
        Set infile = Nothing
        Set outfile = objFSO.OpenTextFile(strFilePath,ForWriting) 
        outfile.Write REPLACE_FROM.Replace(strData, REPLACE_TO)    
        outfile.Close
        Set outfile = Nothing
    End If
Next

dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "6.vbs"
id:Izkgkf0CPUsl85gi0dBq

mac由来のカスファイルが原因でした
削除すれば動きました
ありがとうございました!

2015/04/14 09:12:46
  • id:cx20
    > ファイルの最後を超えた入力を行おうとしました

    上記のエラーはファイルが0バイトの時にReadAllをすると発生するようです。
    フォルダ内に0バイトのファイルが含まれていないか確認してみてください。

    For Each objFile In objFolder.Files
     ' ファイル名とファイルサイズを確認する
     WScript.Echo objFile.Name & " [" & objFile.Size & "] bytes"
    Next
  • id:Izkgkf0CPUsl85gi0dBq
    フォルダ内に0バイトのファイルが含まれていても動くようにするにはどうすればいいですか?
  • id:Izkgkf0CPUsl85gi0dBq
    隠しファイルに0バイトのものが有りました。
    それを消したら行けました。ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません