dポイントプレゼントキャンペーン実施中!

お世話になっております。

ファイルから特定の単語を抜き出し、新規でファイルを作成し、その中に単語を移行するスクリプトを作成しました。

しかし、単語のファイルが無い場合はエラーを出してくれるのですが、単語のファイルが空ファイル(0バイト)だった時、単語を移行する処理は行います。ですが、結果が空ファイルのままになります。

以下のスクリプトを作成したいのですが、勉強不足でうまくいきません。皆様のお知恵をお貸し下さい。
---------------------------------------------------------------
(1)単語のファイルがある事を確認。

(2)単語のファイルが空ファイルだった場合、移行する処理の中断およびエラー警告メッセージを表示。

(3)空ファイルじゃなかった場合、移行する処理を行う。
---------------------------------------------------------------

VBSを作成する場合、空ファイルが0バイトとして判断するのか、中身が白紙だった場合に判断するのか、という疑問もあって今回の質問をさせて頂きました。

どうか宜しく御願い致します。

A 回答 (5件)

FileSystemObjectのFileExistsメソッドでファイルの存在を確認できますよ


何行目でエラーになるのかも投稿しましょう
以下のコードの字下げには全角スペースですので半角スペースに置換してから使用してください

Dim oFSO, oFile, oText, oWrite
Set oFSO = CreateObject("Scripting.FileSystemObject")
if oFSO.FileExists("C:\work.txt") then
  Set oFile = oFSO.GetFile("C:\work.txt")
  if oFile.Size = 0 then
    WScript.Echo "空のファイルです"
  else
    ' 単語処理
    Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True)
  end if
else
  WScript.Echo "『C:\work.txt』ファイルが存在しません"
end if
    • good
    • 1
この回答へのお礼

redfox63さん、ご回答有難う御座います。

エラーが出る原因がわかりました。私のコード確認不足で、文字が一部欠けていた事がエラーを吐く原因となっておりました。よく確認もせず申し訳ありませんでした。

無事に問題も解決し、やりたい事がようやく出来ました。
本当に有難う御座いました。もっと、VBSについて勉強していきます。
感謝致します。

お礼日時:2007/12/27 03:32

たぶん ; でエラーになっているのでしょう


VBSの場合ほとんど;は使いませんので

本業がC/C++屋なので たまに行末に;をつけてしまいます
Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True)
でいいはずです …

最初のDim のお尻の『;』も削除ですね m(__)m

>スクリプトが別々に作成されているのであれば、単語処理のスクリプト
>をCallで呼び出せば出来ると想定しています
VBSはバッチファイルのように外部ファイルにCallで移行する機能はありません
VBSのCallステートメントは あくまで自分のファイル内の関数やプロシージャを呼ぶためのものです

# エラーが起きるのであればその内容を投稿しましょう
    • good
    • 0
この回答へのお礼

返信が遅れてすみませんでした。

あれからredfox63が書き込みを下さったコードを利用して、スクリプトを作成しておりました。ですが、まだまだ勉強不足で質問があります。
以下のコードを走らすと、「オブジェクトがありません。:"」と表示されてしまい、スクリプトエラーが出てしまいます。どうしてなのでしょうか?

>Dim oFSO, oFile, oText、oWrite
>Set oFSO = CreateObject("Scripting.FIleSystemObject")
>if oFSO.FileExists("C:\work.txt") then
>  Set oFile = oFSO.GetFile("C:\work.txt")
>  if oFile.Size = 0 then
>    WScript.Echo "空のファイルです"
>  else
>    ' 単語処理
>    Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True)
>  end if
>end if

あともう一点あります。今回の質問は空ファイルが0バイトの時にif文で分岐をするというものだったのですが、空ファイルを調べる前に「ファイルが既存で無い」というのを新たに追加する場合は、以下のようにすれば良いのでしょうか?

if Filename("C:\work.txt") = False then
end if
else if oFSO.FileExists("C:\work.txt") then
  Set oFile = oFSO.GetFile("C:\work.txt")
  if oFile.Size = 0 then
    WScript.Echo "空のファイルです"
  else
    ' 単語処理
    Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True)
  end if
end if

宜しく御願い致します。

お礼日時:2007/12/26 02:26

さて、本日、No1さんの回答を手掛かりに生まれて初めて vbs とやらにチャレンジ。


すったもんだしましたが、何とか動作しています。
で、私なら、以下のようにします。

※正真正銘の初めてのコード。参考程度にされてください!

Dim lngSize

lngSize=FileSize("C:\Temp\c.bat")
Select Case lngSize
  Case -1
     WScript.Echo "該当するファイルはありません"
  Case 0
     WScript.Echo "空のファイルです"
  Case else
     WScript.Echo "処理します!"
End Select

Function FileSize(ByVal FileName)
  Dim fso
  Dim fil
  Dim lngSize
  
  IF FileExists(FileName) Then
    Set fso = CreateObject("Scripting.FIleSystemObject")
    Set fil = fso.GetFile(FileName)
    lngSize= fil.Size
  Else
    lngSize=-1
  End If
  FileSize = lngSize
End Function

Public Function FileExists(ByVal FileName)
  Dim fso
  
  Set fso = CreateObject("Scripting.FIleSystemObject")
  FileExists = fso.FileExists(FileName)
End Function
    • good
    • 0
この回答へのお礼

初心者とは思えないですね・・・
是非参考にさせていただきます。

お礼日時:2007/12/21 02:57

「中身が白紙」というのが具体的にどういう状態なのかよくわかりませんが、


ファイルが存在するとか、そのサイズを知りたいという話なら
次のページのサンプルを見れば参考になるのではないかと。

2.12 ファイルの情報を見る - VBScript & JScript(JavaScript) Tips for WSH
http://www.happy2-island.com/vbs/cafe02/capter00 …
    • good
    • 1
この回答へのお礼

ご回答有難う御座います。

>「中身が白紙」というのが具体的にどういう状態なのかよくわかりま
>せんが、

新規で作成したファイルの事で、中身が何も書かれていない状態を「中身が白紙」という表現をさせて頂きましたが、文章を端折ってしまってすみませんでした。

サンプルを拝見させて頂きました。私もこのページを見ていたのですが、最初のパラメタの部分でつまづいてしまったのです。
すごく初歩的なところなのですが、パラメタとは何かのテキストだったりプログラムの情報の事なのでしょうか?それとも、テキスト名やファイル名をobjParmで参照しているのでしょうか?

パラメタが1コだった場合のイメージがどうしても沸かないのです・・・

お礼日時:2007/12/20 02:42

たぶん FSOを使って入出力をしているのであろうと思います


であるなら Fileオブジェクトを取得して Sizeプロパティを参照してみましょう

Dim oFSO, oFile, oText、oWrite;
Set oFSO = CreateObject("Scripting.FIleSystemObject")
if oFSO.FileExists("C:\work.txt") then
  Set oFile = oFSO.GetFile("C:\work.txt")
  if oFile.Size = 0 then
    WScript.Echo "空のファイルです"
  else
    ' 単語処理
    Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True);
  end if
end if
といった具合でしょう
    • good
    • 0
この回答へのお礼

ご回答有難う御座います。

コードを少しいじらせて頂いて、無事にテストする事が出来ました。
また一つ勉強になり、大変参考になりました。

すみません、一点だけアドバイスを頂きたいのですが、redfox63さんが記載して下さったプログラムの「else」後について疑問があります。

>    ' 単語処理
>    Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True);
set objWriteの行に単語処理のスクリプトを全部書き出す事は可能でしょうか?
何がやりたいかというと、単語処理のスクリプトを「else」後に誘導させたいのですが、スクリプトエラーが起こってしまって思うように出来ません。

何か方法はありますでしょうか?
スクリプトが別々に作成されているのであれば、単語処理のスクリプトをCallで呼び出せば出来ると想定しています。
ただ、1つにまとめたい場合は「else」後と単語処理の前に紐付けをする方法が調べたのですが、ヒントがありませんでした。
宜しく御願いします。

お礼日時:2007/12/20 02:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A