• ベストアンサー

VBスクリプト:ファイル名をファイルに書く

VBスクリプトで以下のようなコードを書いているのですが、上手く動いてくれません。あるディレクトリのファイル名をテキストファイルに書き込むという処理を行いたいのですが。。 配列は、ある順番(ファイル名順)のみ書き込むという処理を付け加えたいため必須です。アドバイスを頂けないでしょうか?宜しくお願い致します。 Set objFS = CreateObject("Scripting.FileSystemObject") Set fl = objFS.GetFolder("D:\") i = 0 For Each objFile In fl.Files str(i) = objFile.Name i = i + 1 Next Set objText = objFS.OpenTextFile("D:\filename.txt") For i = 0 To UBound(fl) objText.WriteLine fl(i) Next objText.Close

  • fabu
  • お礼率69% (384/554)

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

' こんにちは。コメントを参照して下さい。 Set objFS = CreateObject("Scripting.FileSystemObject") Set fl = objFS.GetFolder("D:\") ' 配列は使う前に領域確保が必要です ' また str は Str 関数と同名なので変数名を変更 Dim aryF() i = 0 For Each objFile In fl.Files ReDim Preserve aryF(i) aryF(i) = objFile.Name i = i + 1 Next ' 第一引数:ForWriting = 2 ForAppending = 8 ' 第二引数:True ファイルがなければ作成 ' 引数はできるだけ明示します Set objText = objFS.OpenTextFile("D:\filename.txt", 2, True) ' Ubound(fl) では無理。fl は配列ではなくオブジェクトです。 ' fl.Files.Count - 1 とします。 ' でもそれこそ配列を使った意味が無くなるので配列の内容を使用 For i = 0 To UBound(aryF) objText.WriteLine aryF(i) Next objText.Close ' 後始末はしましょう Set objText = Nothing Set objFS = Nothing

fabu
質問者

お礼

皆様ありがとうございます。 うまく動作しました!! こちらでお礼にかえさせて下さい。

その他の回答 (1)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>For i = 0 To UBound(fl) >objText.WriteLine fl(i) じゃなくて For i = 0 To UBound(str) objText.WriteLine str(i) の間違いでは?

関連するQ&A

  • セレクトボックスに表示されたファイル名を変数に格納する方法

    すみません、説明が足りませんでした。 あるフォルダに存在するファイルをセレクトボックスに 1行毎に1ファイル名表示させています。 そのファイル名の中から1つのファイル名を選択し、 実行ボタンを押したタイミングで、選択されたファイル名を Dimで定義した変数に格納したいのです。 私の記述では<option>タグは1つのみで複数のファイル名を 表示させています。 ///////////////////////////////////////////////////////// 現在以下のソースを記述しています。 <% Set objFS = CreateObject("Scripting.FileSystemObject") Set objFolder = objFS.GetFolder("C:\TEMP") For Each objFile In objFolder.Files str = str & objFile.Name & vbCR next %> <SELECT SIZE=20 ID=select1 NAME=select1 STYLE="width:320px" MULTIPLE TABINDEX=70> <% For Each objFile In objFolder.Files %> <option><%= objFile.Name%></option> <% Next %> </SELECT>

    • ベストアンサー
    • HTML
  • VBS ファイルマージ処理

    特定のDir内、複数ファイルのレコードを全てマージする為、 以下の処理を考えておりますが実現に至っておりません。 Fileがなくなるまで、ループ処理をさせる為、File名 の(1)から(2)へFile名の受け渡し方法が解かりません。 何方か有識者の方、ご教授頂けませんでしょうか もっと賢くマージが出来るので有りますならば、その方法 を教えて頂けませんでしょうか ※Dir内にFileはユニークなFile名にて、複数個作られます。 ※マージに必要なFileだけがDirには作られます。 ※マージするFileの順番は問いません。 (1)C:\temp\temp Dir内のFile名を取得 Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\temp\temp") objFile = objFso.GetAbsolutepathname("temp_ini.txt") Set objOut = objFso.OpenTextFile(objFile, 2, False) For Each objFile In objFolder.Files objFilemei = objFile.Name objOut.Writeline objFilemei next ※File名の受け渡しがわからず、一旦Fileに書き出してます (2)Fileが無くなるまで、File内のレコードを全て読込み、マージファイルを作成(予定) objFile1 = objFso.GetAbsolutepathname("temp_temp.txt") Set objin = objFso.OpenTextFile("temp_ini.txt",1) Do Until objin.atendofstream = True linedata = objin.readline() loop 説明が悪くてすみませんが、よろしくお願い致します。

  • VBSで、テキストファイルに対して、全体の途中に文字列を追加したい

    こんばんわ VBSについて質問です。 テキストファイルを開いて、文字列を追加するスクリプトを作成したいのですが、 以下のようなプログラムであれば、行の一番下に文字を追加できると思います。 ########ここから Dim objFS,objText,objFile Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.GetFile("C:\test\vbs\test.txt") Set objText = objFile.OpenAsTextStream(8,-2) objText.WriteLine("新しい行") Set objFILE = Nothing Set objText = Nothing ############ここまで しかし今やりたいのは分の途中に文字をいれたい。 たとえばテキストファイルが A B C D というファイルだったら、 "B"を検索して、Bの下に”新しい行”という文字列を追加したいです。 いろいろ調べましたがどうもうまくいきません。 わかる方ご教授願います。

  • csvファイルを読み込む方法について

    aspにてscvファイルを読み込む際、直接ファイル名を指定するとうまくいくのですが、ファイル名を変数で指定しようとすると、「ファイルが見つかりません」というエラーになってしまいます。どのように記述すれば良いでしょうか。お教えください。よろしくお願いいたします。 (例) 'OK Set objFS = CreateObject("Scripting.FileSystemObject") Set objText = objFS.OpenTextFile(Server.MapPath("aaa.csv"),1) 'NG fname = "aaa.csv" Set objFS = CreateObject("Scripting.FileSystemObject") Set objText = objFS.OpenTextFile(Server.MapPath(fname),1) また、 Set objText = objFS.OpenTextFile(Server.MapPath("""" & fname & """"),1) としてもダメでした。以上です。

  • VBSでカンマ区切り

    お世話になっております。 VBSで、CSVファイルをカンマ区切りで配列にし、 ファイルに書き出したいです。 下記のスクリプトを実行すると3行の改行と これ⇒ ---------------- だけ出力されます。 Splitは使用できないのでしょうか? どこが間違っているのかわかりません。 ご教授いただけませんでしょうか。 '--------------------------------------------------------------- On Error Resume Next Set OBJFS01 = CreateObject("Scripting.FileSystemObject") Set CSVTEXT01 =OBJFS01.OpenTextFile("C:\tmp\CSVTEXT.log") Set LOGTEXT01 =OBJFS01.OpenTextFile("C:\tmp\LOGTEXT.log",8,False) '--------------------------------------------------------------- i = 0 Dim HAIRETU(27) Do While i < 6 HAIRETU(27) = Split(CSVTEXT01, ",") LOGTEXT01.WriteLine(HAIRETU(2)) LOGTEXT01.WriteLine(HAIRETU(3)) LOGTEXT01.WriteLine(HAIRETU(4)) LOGTEXT01.WriteLine("----------------") i = i + 1 Loop LOGTEXT01.close CSVTEXT01.close

  • VB6.0 CreateObject以外のファイルI/O

    以前CreateObject("Scripting.FileSystemObject")を使用してファイルを読込む方法、一行ずつ書込む方法を教えていただいたのですが。 環境によってはウイルスチェックに引っかかってしまうようで、別な手段を取らなければならなくなりました。 読込み: Set objFso = CreateObject("Scripting.FileSystemObject") Set objTxtSt = objFso.OpenTextFile(strFilePass, 1) strData = CStr(objTxtSt.ReadAll()) 書込み: Set objFso = CreateObject("Scripting.FileSystemObject") Set objTxtSt = objFso.OpenTextFile(strFilePass, 2, False) Call objTxtSt.WriteLine(strData) 現在の処理は以上です。 上記と同じ処理をCreateObjectを使用せずに作成するにはどのようにすればよろしいでしょうか。

  • VBSで動画ファイルの時間を読み取る方法

    複数の動画ファイルをD&Dして、ファイル名に更新時間と動画時間(動画ファイルのプロパティのビデオの欄に表示される「長さ」という項目) をファイル名に追加するプログラムを書きたいと考えています。 更新時間を書き込む方法は http://www.vector.co.jp/soft/winnt/util/se501476.html のvbsを参考に作ることができました。 動画時間の読み取りに関しては http://q.hatena.ne.jp/1312251379 に書かれてあるのですが、うまくいきません。 ExtendedPropertyのところで、 オブジェクトでサポートされていないプロパティまたはメソッドです。 というエラーが出て実行することができません。 以下が、作りかけですが、作成したプログラムです。 WScript.Echo "Duration : [" & CStr(objFile.ExtendedProperty2("Duration")) & "]" ' 単位は 100ns のところをどのように書き換えれば良いか教えていただけないでしょうか? Dim stArrayData Dim objParam Set objParam = WScript.Arguments 'D&Dでの読み込みを可能にする Dim objFs Set objFs = WScript.CreateObject("Scripting.FileSystemObject") ' 引数の全ファイルについてファイル名を変更する Dim objFile Dim dtLastModified Dim strLastModified Dim i Const FMTID_AudioSummaryInformation = "{64440490-4C8B-11D1-8B70-080036B11A03}" For i = 0 To objParam.Count - 1 If objFs.FileExists(objParam(i)) Then Set objFile = objFs.GetFile(objParam(i)) ' DateLastModifiedのフォーマットが環境によって違うかもしれないので ' いったんDate型にする dtLastModified = CDate(objFile.DateLastModified) If Hour(dtLastModified) < 10 Then strLastModified = strLastModified & "0" End If strLastModified = strLastModified & Hour(dtLastModified) If Minute(dtLastModified) < 10 Then strLastModified = strLastModified & "0" End If strLastModified = strLastModified & Minute(dtLastModified) ' ファイル名を設定 stArrayData = split(objFile.Name, ".") objFile.Name = stArrayData(0) & "-" & strLastModified & "." & stArrayData(1) WScript.Echo "FileName : [" & objFile.Name & "]" WScript.Echo "Duration : [" & CStr(objFile.ExtendedProperty2("Duration")) & "]" ' 単位は 100ns WScript.Echo "FMTID_AudioSummaryInformation,3 : [" & CStr(objFile.ExtendedProperty(FMTID_AudioSummaryInformation & " 3") ) & "]" ' 単位は 100ns Set objFile = Nothing End If Next Set objFs = Nothing Set objParam = Nothing

  • ファイルへの書き込み

    いままでPrintメソッドを使って書き込みしていました。 ちょっと志向を変えてオブジェクト(?)をつかってプログラミングしています。 ファイルの書き込みでつまづいたので教えてください。 真ん中くらいに質問文があります Dim objFileSystem As Object Dim objFile As Object Dim strFileName As String Dim strBuff As String ' 読み込むファイル名 strFileName = "Readme.txt" ' FileSystemObjectオブジェクトへの参照 Set objFileSystem = CreateObject("Scripting.FileSystemObject") ' ファイルを開く Set objFile = objFileSystem.OpenTextFile(strFileName) ' ファイルの最後に達するまでループ strBuff = strBuff + naiyo.Text   'ここで質問。この書き方だとファイルモードが不正とエラーが出ます。   'この部分どう書けばよいのでしょうか? objFile.writeline (strBuff) ' ファイルを閉じる objFile.Close ' オブジェクトを解放 Set objFileSystem = Nothing Set objFile = Nothing オブジェクト変数(というのでしょうか(^^ゞ)を使ったファイルの書き込み方教えてください。

  • 選択したファイル名を取得する方法について -再度質問します-

    ASPとVBScript、JavaScriptを使用した開発を行っています。 あるフォルダに存在するファイルをセレクトボックスに 1行毎に1ファイル名表示させています。 そのファイル名の中から1つのファイル名を選択し、 実行ボタンを押したタイミングで、選択されたファイル名を Dimで定義した変数に格納したいのです。 当方ASPでの開発は初心者でして、クライアント側、サーバ側の 処理の区別がまだつかない状況で申し訳ないのですが FORMタグなどを使用しているので、サーバ側処理になると思うのですが 教えて頂けると有り難いです。 私の記述では<option>タグは1つのみで複数のファイル名を 表示させています。 ///////////////////////////////////////////////////////// 現在以下のソースを記述しています。 <% Set objFS = CreateObject("Scripting.FileSystemObject") Set objFolder = objFS.GetFolder("C:\TEMP") For Each objFile In objFolder.Files str = str & objFile.Name & vbCR next %> <SELECT SIZE=20 ID=select1 NAME=select1 STYLE="width:320px" MULTIPLE TABINDEX=70> <% For Each objFile In objFolder.Files %> <option><%= objFile.Name%></option> <% Next %> </SELECT>

    • ベストアンサー
    • HTML
  • [VBScript]csrss.exeメモリリーク

    vbscriptでファイル名にある文字列を含むファイルを検索し、作成日の最も古いファイルをコピーする処理をしています。 下記環境で動かしているのですが、csrss.exeの使用メモリが増加し続けます。 原因または調査の仕方など教えていただけると幸いです。 システムの都合上、別言語への変更はできないのでどうにか解決したいです。 よろしくお願いいたします。 動作環境: windows2003 std sp1 プログラム: Const ForReading = 1 'read only Const ForWriting = 2 'write(overwrite mode) Const ForAppending = 8 'write(add mode) kekka =0 Set objFS = CreateObject("Scripting.FileSystemObject") Set objShell = WScript.CreateObject("WScript.Shell") Set colEnv = objShell.Environment("Process") strNow = Now FILE_NAME = "test_J999" LIST_FILE = "D:\common\" & FILE_NAME & ".log"'use log Set objText = objFS.OpenTextFile(LIST_FILE, ForAppending, True, 0) objText.WriteLine strNow & " copy.vbs start" strSndpath = "D:\common\data\" strRcvpath = "D:\common\" strFileName = search() If objFS.FileExists(strCopyFrom) = False Then Kekka = 0 WScript.Echo kekka objText.WriteLine strNow & " copy.vbs end" & " error: " & err.Number & " file: nothing" objText.Close Set objShell = Nothing Set objFS = Nothing WScript.Quit End If objFS.CopyFile strCopyFrom,strCopyTo IF err.number = 0 Then kekka = 0 Else kekka = err.number End IF WScript.Echo kekka objText.WriteLine strNow & " copy.vbs end" & " error: " & err.Number & " file: " & strFileName objText.Close Set objShell = Nothing Set objFS = Nothing Function search() On Error Resume Next 'error ignore Set objApl = Wscript.CreateObject("Shell.Application") Set folder = objFS.GetFolder(strSndpath) Set folinfo = objApl.NameSpace(strSndpath) Mostoldtime = strnow Totalcnt = folinfo.Items().count+5 Redim File(Totalcnt) i=0 For each t in File If Instr(t , FILE_NAME) > 0 then strfilepath = strSndpath & "\" & t Set fileinfo = objFS.GetFile(strfilepath) 'serch most old file If fileinfo.DateCreated < Mostoldtime then Mostoldtime = fileinfo.DateCreated Filename = t End If End If Next Erase File Set objApl = Nothing search = (Filename) End function