
お世話になっております。
ファイルから特定の単語を抜き出し、新規でファイルを作成し、その中に単語を移行するスクリプトを作成しました。
しかし、単語のファイルが無い場合はエラーを出してくれるのですが、単語のファイルが空ファイル(0バイト)だった時、単語を移行する処理は行います。ですが、結果が空ファイルのままになります。
以下のスクリプトを作成したいのですが、勉強不足でうまくいきません。皆様のお知恵をお貸し下さい。
---------------------------------------------------------------
(1)単語のファイルがある事を確認。
(2)単語のファイルが空ファイルだった場合、移行する処理の中断およびエラー警告メッセージを表示。
(3)空ファイルじゃなかった場合、移行する処理を行う。
---------------------------------------------------------------
VBSを作成する場合、空ファイルが0バイトとして判断するのか、中身が白紙だった場合に判断するのか、という疑問もあって今回の質問をさせて頂きました。
どうか宜しく御願い致します。
No.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
redfox63さん、ご回答有難う御座います。
エラーが出る原因がわかりました。私のコード確認不足で、文字が一部欠けていた事がエラーを吐く原因となっておりました。よく確認もせず申し訳ありませんでした。
無事に問題も解決し、やりたい事がようやく出来ました。
本当に有難う御座いました。もっと、VBSについて勉強していきます。
感謝致します。
No.4
- 回答日時:
たぶん ; でエラーになっているのでしょう
VBSの場合ほとんど;は使いませんので
本業がC/C++屋なので たまに行末に;をつけてしまいます
Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True)
でいいはずです …
最初のDim のお尻の『;』も削除ですね m(__)m
>スクリプトが別々に作成されているのであれば、単語処理のスクリプト
>をCallで呼び出せば出来ると想定しています
VBSはバッチファイルのように外部ファイルにCallで移行する機能はありません
VBSのCallステートメントは あくまで自分のファイル内の関数やプロシージャを呼ぶためのものです
# エラーが起きるのであればその内容を投稿しましょう
返信が遅れてすみませんでした。
あれから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
宜しく御願い致します。
No.3
- 回答日時:
さて、本日、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
No.2
- 回答日時:
「中身が白紙」というのが具体的にどういう状態なのかよくわかりませんが、
ファイルが存在するとか、そのサイズを知りたいという話なら
次のページのサンプルを見れば参考になるのではないかと。
2.12 ファイルの情報を見る - VBScript & JScript(JavaScript) Tips for WSH
http://www.happy2-island.com/vbs/cafe02/capter00 …
ご回答有難う御座います。
>「中身が白紙」というのが具体的にどういう状態なのかよくわかりま
>せんが、
新規で作成したファイルの事で、中身が何も書かれていない状態を「中身が白紙」という表現をさせて頂きましたが、文章を端折ってしまってすみませんでした。
サンプルを拝見させて頂きました。私もこのページを見ていたのですが、最初のパラメタの部分でつまづいてしまったのです。
すごく初歩的なところなのですが、パラメタとは何かのテキストだったりプログラムの情報の事なのでしょうか?それとも、テキスト名やファイル名をobjParmで参照しているのでしょうか?
パラメタが1コだった場合のイメージがどうしても沸かないのです・・・
No.1
- 回答日時:
たぶん 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
といった具合でしょう
ご回答有難う御座います。
コードを少しいじらせて頂いて、無事にテストする事が出来ました。
また一つ勉強になり、大変参考になりました。
すみません、一点だけアドバイスを頂きたいのですが、redfox63さんが記載して下さったプログラムの「else」後について疑問があります。
> ' 単語処理
> Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True);
set objWriteの行に単語処理のスクリプトを全部書き出す事は可能でしょうか?
何がやりたいかというと、単語処理のスクリプトを「else」後に誘導させたいのですが、スクリプトエラーが起こってしまって思うように出来ません。
何か方法はありますでしょうか?
スクリプトが別々に作成されているのであれば、単語処理のスクリプトをCallで呼び出せば出来ると想定しています。
ただ、1つにまとめたい場合は「else」後と単語処理の前に紐付けをする方法が調べたのですが、ヒントがありませんでした。
宜しく御願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
VBSの処理中一旦処理を止めて再開させたい。
Visual Basic(VBA)
-
6
VBScript(vbs)での行の取得について
その他(プログラミング・Web制作)
-
7
CloseとDisposeの違い
Visual Basic(VBA)
-
8
レコードが存在しなかった場合
Microsoft ASP
-
9
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
10
CSVファイルの指定列だけを読み込んでEXCELに表示したい
Excel(エクセル)
-
11
Dir関数で読み取り順を操作できる?
Visual Basic(VBA)
-
12
ストアドプロシジャからストアドプロシジャを呼ぶには?
Oracle
-
13
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
14
0バイトファイルの判断
その他(プログラミング・Web制作)
-
15
VBscriptからバッチに変数を渡すには?
その他(プログラミング・Web制作)
-
16
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
17
複数の文字列のいずれかが含まれていたらTRUEを返す関数について
Excel(エクセル)
-
18
split関数で区切り文字がない場合
Visual Basic(VBA)
-
19
Excel VBAでCSVファイルを読込むと何故か文字列が日付に変換さ
その他(Microsoft Office)
-
20
【VBS】古い日付のフォルダを削除したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0のメモリリークについて
-
0バイトのテキストファイル
-
VB2008 iniファイルの全セクシ...
-
includeで別サイトを読み込む
-
C# ファイルサイズの取得(ファ...
-
サイトマップにサブドメインを...
-
Javaのファイルダウンロードに...
-
【VBA】印刷マクロのループ処理...
-
【Excel VBA】取り込んだファイ...
-
Eclipseで検索ができなくなった
-
windows 環境でのファイル操作...
-
ファイル更新日取得
-
VB6 実行ファイルにデータの保存
-
ファイルの排他について
-
vbaの構文の修正相談(xmlファ...
-
VBAで、JPG写真の撮影日時を読...
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
Thunderbird 受信メールからの...
-
コマンドプロンプトのテキスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0バイトのテキストファイル
-
【Excel VBA】取り込んだファイ...
-
Eclipseで検索ができなくなった
-
VBAで、JPG写真の撮影日時を読...
-
HTMLテキストリンクでExcelファ...
-
VB6.0のメモリリークについて
-
Appletにて入力文字のファイル...
-
C++.NET 2003 「空のドキュメ...
-
VB2008 iniファイルの全セクシ...
-
windows 環境でのファイル操作...
-
dllって?
-
パスワード設定のタグについて
-
ファイルを取得するC#のプロ...
-
main関数のコマンドライン引数...
-
Accessで一覧を表示するWebペー...
-
ファイル作成日時と更新日時を...
-
【VBA】印刷マクロのループ処理...
-
携帯電話への動画配信
-
ファイル内容を比較する方法
-
Javaのファイルダウンロードに...
おすすめ情報