- 締切済み
【VBScript】ディレクトリ内のファイルを、リストを読み込んで分割
【VBScript】ディレクトリ内のファイルを、リストを読み込んで分割 ■プログラム及びファイルに関する備考 .\test\ = 分割を行いたいファイルが格納されたディレクトリ Dir_FileList.txt = testディレクトリ内のファイルをリスト化したもの。 相対パスにて、1行ずつ改行して記述する。 ■やりたい事 Dir_FileList.txtという、.\test\内に配置されたファイルをリスト化したtxtを 1行ずつ読み込み、読みこんだファイルに対し、10行毎に分割処理を行いたいと思っています。 分割したファイルは、分割元のファイルが格納されたディレクトリと同じ、.\test\ディレクトリに作成し、 分割前の元ファイルを最後に削除するという処理をリストに書かれた全てのファイルに対して行いたいです。 下記のようにコーディングをしたのですが、 どうも「Do Until ( fILE1.AtEndOfStream )」のループ文の処理が行われていない?ようで、 testディレクトリ内部のファイルが分割されません。 色々試したのですが、VBScriptを触るのは初めてでなかなか上手くいきませんでした。 どこが間違っていて、どのように修正すれば動くようになるでしょうか? お手数ですが、ご教授をお願い致します。 ---------------------------------------- Option Explicit Dim flReadFSO, flReadFSO2, fFolder, fILE, flrSubFolder Set flReadFSO = CreateObject("Scripting.FileSystemObject") Set flReadFSO2 = WScript.CreateObject("Scripting.FileSystemObject") Set fFolder = flReadFSO2.GetFolder(".") Dim name1, fILE1 name1 = fFolder & "\Dir_FileList.txt" Set fILE1 = flReadFSO.OpenTextFile(name1) Dim oneLineTxt oneLineTxt ="" Dim FSO set FSO = WScript.CreateObject("Scripting.FileSystemObject") Do Until ( fILE1.AtEndOfStream ) oneLineTxt = fILE1.ReadLine WScript.Echo oneLineTxt arg = ".\test\test01.txt" set fin = FSO.OpenTextFile(arg, 1) fbn = FSO.GetBaseName(arg) fen = FSO.GetExtensionName(arg) nf=0 set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true) nl=0 Do While Not fin.AtEndOfStream fout.WriteLine fin.ReadLine nl=nl+1 if nl>9 then fout.Close nf=nf+1 if nf>9 then exit do set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true) nl=0 end if Loop fin.Close FSO.DeleteFile arg, True Loop fILE1.Close ----------------------------------------
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- bin-chan
- ベストアンサー率33% (1403/4213)
Do Until ( fILE1.AtEndOfStream ) をUntilにした理由がありますか? Do While Not fin.AtEndOfStream と同じ構文にすることには何か問題がありますか? Do While Not fILE1.AtEndOfStream だとどうなりますか?
お礼
指摘頂いたところを含め、再度プログラムと実行環境を見直したところ、無事解決しました。 リストファイルにファイル名を書き忘れていた というありえないミスが原因でした。 お騒がせしました。。。 変数の宣言等のエラーが出たので多少手直しして正常な動作が確認できました。 ----------------- Option Explicit Dim flReadFSO, flReadFSO2, fFolder, fILE, flrSubFolder Set flReadFSO = CreateObject("Scripting.FileSystemObject") Set flReadFSO2 = WScript.CreateObject("Scripting.FileSystemObject") Set fFolder = flReadFSO2.GetFolder(".") 'カレントディレクトリの取得 Dim name1, fILE1 name1 = fFolder & "\Dir_FileList.txt" '読み込み対象ファイル指定 Set fILE1 = flReadFSO.OpenTextFile(name1) 'ファイルを開く Dim oneLineTxt oneLineTxt ="" Dim FSO set FSO = WScript.CreateObject("Scripting.FileSystemObject") Dim arg, fin, fbn, fen, nf, nl, fout, outputFL Do While Not fILE1.AtEndOfStream oneLineTxt = fILE1.ReadLine '1行読み込む outputFL =fFolder & "\" & "\test\" & oneLineTxt '置換後ファイル名のフルパス化 WScript.Echo outputFL '表示する arg = outputFL set fin = FSO.OpenTextFile(arg, 1) fbn = FSO.GetBaseName(arg) fen = FSO.GetExtensionName(arg) nf=0 set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true) nl=0 Do While Not fin.AtEndOfStream fout.WriteLine fin.ReadLine nl=nl+1 if nl>9 then fout.Close nf=nf+1 if nf>9 then exit do set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true) nl=0 end if Loop fin.Close FSO.DeleteFile arg, True '分割元ファイルの削除(分割前と分割後ファイルの競合を防ぐ) Loop fILE1.Close ----------------- ありがとうございました。
補足
>Do Until ( fILE1.AtEndOfStream ) >をUntilにした理由がありますか? 特に理由はありません。 恥ずかしながら、ネットで検索したプログラムを足していった・・・ という感じで、 それぞれ単独で正常に動作していた、 ファイルを読み込んで表示を行うプログラムと、 ファイルを分割処理するプログラムを 合体させて作ったものです。 単独では動作させた際、両方共にWhile文の動きをしているように 思えたので、そのままにしてあるだけです。