VBSでHTMLを簡単に出力!

このQ&Aのポイント
  • VBSを使用して、フォルダ内のファイルをHTMLに変換し一覧表示する方法を教えてください。
  • 現在、プログラムを組む際にメモ帳に貼り付けて保存しているが、見づらくなってしまうため、自動的にHTMLを作成する方法を模索している。
  • 目次別にフォルダ内のファイルを整理して表示し、クリックすると右側にその内容を表示できる方法があれば教えてほしい。
回答を見る
  • ベストアンサー

VBSで、凝ったHTMLを出力する!

いつも大変お世話になっております。 上手く説明できない点もあるかと思いますが、 よろしくお願い致します。 現在、色々とプログラムを組むことが多く、 毎回調べては書いて…の繰り返しのため 良く使うもの・便利だったものはメモ帳などに貼り付けて 保存してあります。 しかし、この状態では メモ帳が大量にあり探すのにとても苦労しますし、 内容もとても見づらいものになってしまいます。 現在、同フォルダにあるTXTファイルを自動的にHTMLに変換するVBSと 同フォルダにあるファイルのリンクを作成し、一覧をHTMLにするVBSを作りました。 少しずつ便利にはなってきていますが、 やはり見づらさという点では変わりありません。 そこで、やりたいこととしまして ・ジャンル別に分けたい。 (できればツリー状にして表示したい) ・2フレームで作成したい。(左側に目次、選択したものを右側に表示) 全自動でHTMLファイルを作成しようと思っているのですが、 さすがにむずかしいでしょうか? 例えば HTML化用ファイル   |   |--「HTMLファイルをここに作成」   |   --TEST     |      ------ブック     |    |___新規ブック.html     |    |     |    |___ブック名編集.html     |      ------シート     |    |___新規シート.html     |    |     |    |___シート編集.html     |    |     |    |___シート保護.html     |    |     |    |___シートコピー.html     |    |     |    |___シート削除.html     |         |         |          ------目次3     |      ------目次4     |      ------目次5 ----------------------------------------- 【理想】           |    TEST    |      |     |       ------ブック   |     |    |___新規ブック.html | クリックしたHTMLの内容表示     |    |    |     |    |___ブック名編集.html |     |     |      ------シート   |     |    |___新規シート.html |     |    |    |     |    |___シート編集.html |     |    |    |     |    |___シート保護.html |     |    |    |     |    |___シートコピー.html |     |    |    |     |    |___シート削除.html  |     |        |     |        |     |        |      ------目次3  |     |     |      ------目次4  |     |     |      ------目次5  | ↑↑ 折りたたむことも可能↑↑ 今は、同じフォルダ内にあるものを HTML化することはできています。 ------------------- Sub TEST2() Dim strScriptPath'自分の現在位置 strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"")'フルネームから、スクリプトネームを削除! ' フォルダをオブジェクト取得 Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder(strScriptPath) Set HTMLOutPutData = objFso.CreateTextFile("ファイル一覧.html",True) HTMLOutPutData.WriteLine "<html>" HTMLOutPutData.WriteLine "<head>" HTMLOutPutData.WriteLine "<title></title>" HTMLOutPutData.WriteLine "</head>" HTMLOutPutData.WriteLine "<body>" HTMLOutPutData.WriteLine "<h1 align=""" &"center" &""">まとめ</h1>" HTMLOutPutData.WriteLine "<hr>" for each file in objFolder.Files If file.name<> "ファイル一覧.html" and file.name<> WScript.ScriptName and Right(file.name,4)<> ".vbs" Then HTMLOutPutData.WriteLine "<font size=""" &"5" &"""><a href=""" & file.Path & """>"& file.name & "</a></font><br>" End if Next HTMLOutPutData.WriteLine "</body>" HTMLOutPutData.WriteLine "</html>" End Sub ------------------ http://lll.s21.xrea.com/m/link/37.html Javascriptは特にやっていなかったのと、 HTMLも不慣れなため、簡単なものしかかけませんでした。 フォルダ内の状況をそのまま HTMLとして出力する方法があれば、 教えて下さい。 よろしくお願い致します。 以上、よろしくお願い致します。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.8

余談ですが・・・・ >VBSで、凝ったHTMLを出力する! という事ですので、もう少し(見た目的に)凝ってみます。 CSSファイルを以下のようにすると添付画像のようになります。 あくまで一例ですので、CSSでいろいろ触ってみてください。 VBSコードは回答No7のものを使用しています ■main.css a.menu { padding: 0 100px 0 10px; border: 1px solid #8080ff; text-decoration: none; background-color: #ccccff; } a.menu:hover { background-color: #ccffff; border-color: blue; } h1 { font-size: 1.25em; } li { line-height: 2em; list-style-type: none; } p.note { font-size: 80%; line-height: 1.3; } li.dir { list-style-type: none; color:#F0F; margin: 15px 0 0 0; padding: 0 15px 15px 10px; border-style: solid; border-width: 1px; border-color: #aaa #333 #333 #aaa; -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px; font-size: 14px; line-height: 10px; text-decoration: none; text-shadow: 1px 1px 1px #FFF; background-color:#DDD; }

satoron666
質問者

お礼

回答ありがとうございました。 お礼が遅くなり、大変申し訳ありませんでした。 大変参考になりました! cssもいろいろいじってみて、より良いものを作れるよう頑張ります! 1文1文、どのようなプログラムなのかじっくり理解していきたいと思います。 また、この度アカウントが利用停止になってしまいました。 今後いつかあった時は、またよろしくお願いします^^

その他の回答 (7)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.7

申し訳ありません。 No6のVBSコード訂正です。 ■VBSコード ' 型宣言 Dim reed_file Dim Result Dim html Dim buf Dim i Dim j Dim cnt ' 検索を行うフォルダ設定 SEARCH_DIR = "TEST" ' テキストファイル処理 Set fso = CreateObject("Scripting.FileSystemObject") ' 出力ファイル作成 Set oTs2 = fso.CreateTextFile("index.html",True) ' ヘッダー出力 Set reed_file = fso.OpenTextFile("head.txt") oTs2.WriteLine reed_file.ReadAll() ' サブのメソッドを呼び出し Call Sub_SearchDir(SEARCH_DIR,"") Result = split(buf,vbcrlf) ' リストHTML作成 buf = "" cnt = 0 For i = 1 To UBound(Result)   html = Split(Result(i), "|")   If html(0) = bkno Or html(0) < bkno Then     For j = 1 To cnt - html(0)       buf = buf & "</ul></li>" & vbCrLf       cnt = cnt - 1     Next   End If   ' フォルダタグ格納   buf = buf & "<li class=""dir""><a href=""#"" class=""menu"" onclick=""sublist(this); return false;"">" & html(1) & "</a><ul>" & vbCrLf   ' ファイルタグ格納   For j = 2 To UBound(html) - 2     buf = buf & "<li><a href=" & html(UBound(html) - 1) & html(j) & ">" & html(j) & "</a></li>" & vbCrLf   Next   ' 前回控え   bkno = html(0)   cnt = cnt + 1 Next ' リスト終了タグ格納 buf = buf & "</ul></li>" ' ルートディレクトリのファイル格納 html = Split(Result(0), "|") For j = 0 To UBound(html) - 2   buf = buf & "<li><a href=" & html(UBound(html) - 1) & html(j) & ">" & html(j) & "</a></li>" & vbCrLf Next ' リストHTML出力 oTs2.WriteLine buf ' フッダーHTML出力 Set reed_file = fso.OpenTextFile("foot.txt") oTs2.WriteLine reed_file.ReadAll() ' ファイルを閉じる oTs2.Close '――――――――――――――――――――――――――――――――――― ' ディレクトリ階層取得 '――――――――――――――――――――――――――――――――――― sub Sub_SearchDir(branchpath , deps) Dim fsoFolder Dim fsoSubFolder Dim fsoFile Dim path 'フォルダオブジェクト取得 Set fsoFolder = fso.GetFolder(branchpath)   'フォルダ内/ファイルループ   For Each fsoFile In fsoFolder.Files     'ファイル名を出力     buf = buf & deps & fsoFile.name & "|"   Next   path = split(branchpath,"\") buf = buf & branchpath & "\|"   'サブフォルダを検索   Set branch = fso.getfolder(branchpath)   For each f in branch.subfolders    cnt = cnt + 1     'フォルダ名を出力     buf = buf & vbcrlf & deps & ubound(path) & "|" & f.name & "|"     'さらにサブフォルダを探索     Call Sub_SearchDir(branchpath & "\" & f.name , deps)   Next End Sub ' 終了処理 Set fsoFolder = Nothing Set reed_file = Nothing Set oTs2=Nothing Set fso=Nothing Set branch = nothing msgbox "終了しました"

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.6

度々お邪魔します。 再帰処理でサブフォルダ以下を階層表示するようにコードを変更してみました。 多段階層に対応しています。 こちらの方が柔軟性があると思います。 出力結果は添付画像を参照願います(小さいですが) 他のファイルはそのままで、VBSファイルだけ以下のコードと差し換えてください。 ■VBSコード ' 型宣言 Dim key Dim reed_file Dim Result Dim html Dim path Dim buf Dim i Dim j Dim f_buf Dim d_buf ' 検索を行うフォルダ設定 SEARCH_DIR = "TEST" ' テキストファイル処理 Set fso = CreateObject("Scripting.FileSystemObject") ' 出力ファイル作成 Set oTs2 = fso.CreateTextFile("test.html", True) ' ヘッダー出力 Set reed_file = fso.OpenTextFile("head.txt") oTs2.WriteLine reed_file.ReadAll() ' サブのメソッドを呼び出し Call Sub_SearchDir(SEARCH_DIR, "") Result = Split(buf, vbCrLf) ' リストHTML作成 buf = "" For i = 1 To UBound(Result)   html = Split(Result(i), "|")   ' リスト終了タグ格納   If html(0) < bkno Then     For j = 1 To bkno       buf = buf & "</ul></li>" & vbCrLf     Next   End If   If (html(0) = 0) And (i > 1) Then     buf = buf & "</ul></li>" & vbCrLf   End If   ' フォルダタグ格納   buf = buf & "<li class=""dir""><a href=""#"" class=""menu"" onclick=""sublist(this); return false;"">" & html(1) & "</a><ul>" & vbCrLf   ' ファイルタグ格納   For j = 2 To UBound(html) - 2     buf = buf & "<li><a href=" & html(UBound(html) - 1) & html(j) & ">" & html(j) & "</a></li>" & vbCrLf   Next   ' 前回控え   bkno = html(0) Next ' リスト終了タグ格納 buf = buf & "</ul></li>" ' ルートディレクトリのファイル格納 html = Split(Result(0), "|") For j = 0 To UBound(html) - 2   buf = buf & "<li><a href=" & html(UBound(html) - 1) & html(j) & ">" & html(j) & "</a></li>" & vbCrLf Next ' リストHTML出力 oTs2.WriteLine buf ' フッダーHTML出力 Set reed_file = fso.OpenTextFile("foot.txt") oTs2.WriteLine reed_file.ReadAll() ' ファイルを閉じる oTs2.Close '――――――――――――――――――――――――――――――――――― ' ディレクトリ階層取得 '――――――――――――――――――――――――――――――――――― Sub Sub_SearchDir(branchpath, deps) Dim fsoFolder Dim fsoSubFolder Dim fsoFile Dim path 'フォルダオブジェクト取得 Set fsoFolder = fso.getfolder(branchpath) 'フォルダ内/ファイルループ   For Each fsoFile In fsoFolder.Files     'ファイルの情報を出力 (名前、サイズ、最終更新日時)     buf = buf & deps & fsoFile.Name & "|"   Next   path = Split(branchpath, "\")   buf = buf & branchpath & "\|"   'サブフォルダを検索   Set branch = fso.getfolder(branchpath)   For Each f In branch.subfolders     cnt = cnt + 1     'フォルダ名を出力     buf = buf & vbCrLf & deps & UBound(path) & "|" & f.Name & "|"     'さらにサブフォルダを探索     Call Sub_SearchDir(branchpath & "\" & f.Name, deps)   Next End Sub ' 終了処理 Set reed_file = Nothing Set oTs2 = Nothing Set fso = Nothing Set branch = Nothing Set fso = Nothing MsgBox "終了しました"

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.5

度々捕捉です・・・。 >main.cssの編集が必要なのでしょうか? 利用しているJavascriptについてなんですが、 以下のような記述で階層はどんどん増やすことが出来ますので VBSlコード以外は現状のままでも問題ないと思います。 CSSについては先頭の「・」マークや「1、2・・・・」、文字フォントや背景色いろいろ変更できます。 「class」や「id」をタグ内に記述すれば任意箇所の様式も設定可能となります。 CSS記述方法及び設定方法は別途勉強する必要があります。 また、今回使用していますJavascriptは一例です。。。 jQueryなどと組み合わせればより素敵なフォルダツリー様式を実装できると思います。 http://www.tohoho-web.com/tech/tree-menu.htm http://booyan.lopan.jp/js_treeview/ http://www.ne.jp/asahi/hatakeyama/design/csslayout/ajaxtest/index13.html 現状のJavascriptにおいて、多段化したときのサンプルを載せておきます。 (ディレクトリのliタグにclass="dir"を設定し、CSSにdirの書式を定義しています) ■多段ツリーのHTML例 <ul>  <li class="dir"><a href="#" class="menu" onclick="sublist(this); return false;">A</a>   <ul>    <li class="dir"><a href="#" class="menu" onclick="sublist(this); return false;">C</a>     <ul>      <li class="dir"><a href="#" class="menu" onclick="sublist(this); return false;">D</a>       <ul>        <li><a href="loot/D/1.html">1.html</a></li>        <li><a href="loot/D/2.html">2.html</a></li>       </ul>      </li>      <li><a href="loot/C/3.html">3.html</a></li>      <li><a href="loot/C/3.html">4.html</a></li>     </ul>    </li>    <li><a href="loot/A/6.html">5.html</a></li>    <li><a href="loot/A/6.html">6.html</a></li>   </ul>  </li>  <li class="dir"><a href="#" class="menu" onclick="sublist(this); return false;">B</a>   <ul>    <li><a href="loot/B/7.html">7.html</a></li>    <li><a href="loot/B/8.html">8.html</a></li>   </ul>  </li> </ul> ■CSSファイル li { line-height: 1.45;   list-style-type: decimal; } li.dir { list-style-type: disc; }

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.4

>フォルダの階層がさらに増えた場合には、 >main.cssの編集が必要なのでしょうか? 現在のコードでは階層が増えた場合に対応していませんが 考え方は同じです >HTML加工部分のReplace(Result," ├─","1") >をReplace(Result," │ ├─","3") >Replace(Result," │ │","4") >とか追加し、caseを増やせば良いのかと思うのですが、 >合ってますでしょうか? はい。ただし数値には以下のように使用しています。 VBSコードをよく見て頂ければわかるのですが、 1やら2やらの数字は状態を判定するためのキーワードとして、 各行の先頭に1文字設けているものです。 この値を後から参照し、対応する番号に対応するHTMLの様式を与えています。 全体的な流れを説明しますと・・・・ 「test.txt」というテキストファイルに「tree /f > out.txt」と記述し ファイル名を「test.bat」に変更します。 このtest.batを「TEST」フォルダと同じ階層に置いてダブルクリックすれば 以下のようなテキストファイルが出力されます。 ――――――――――――――――――― フォルダー パスの一覧: ボリューム OS ボリューム シリアル番号は 3845-C6CB です C:. │ out.txt │ test.bat │ └─TEST   ├─シート   │   シート編集.html   │   新規シート.html   │   └─ブック       ブック名編集.html       新規ブック.html ――――――――――――――――――― これはWindowsのコマンドプロンプトでtreeコマンドにオプション 「/f(ファイルを出力)」を付けてout.txtファイルへ書き出す バッチファイルになります。 VBSコード内でプロンプトのコマンドを実行し、 処理結果を取得して文字列加工しています。 (1)処理結果は変数「Result」に格納されます (2)変数keyに「└─TEST」を代入し、Resultの先頭からkeyを見つけ出しそこまでを削除 (3)「  ├─」やら「  └─」を置換Replaiceし、判定数値に置換「1」やら「2」やら。   この段階でResultの中身は以下のようになります。 ―――――――――― 1シート 2シート編集.html 2新規シート.html 3 1ブック 2ブック名編集.html 2新規ブック.html ―――――――――― (4)ResultをSplit関数で改行コード(vbCrLf)で区切り配列変数htmlに格納 (5)For Each Result in html ~ Loop で各要素に対し以下の処理を行う  ※)この段階で変数Resultは不要になるので    各行の要素の値をResultに格納し直しています (6)Left関数で1文字を取り出し、その数値をSelect caseで条件分岐し (7)各条件「1」「2」「3」の場合に対応するHTMLを結合してテキストファイルへ書出し ですので、実際に目的の階層を作成し、 上記の「test.bat」を実行してみて出力される「out.txt」と睨めっこしながら 文字列加工を上記のように行えば3階層、4階層なども出来るかと思います。 フォルダ階層をVBSで回帰的に処理し取得すれば多段対応できると思いますが、 手っ取り早いのでtreeコマンドを利用しました。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

No2のものです。 連続した半角スペースがOKwaveの仕様で消えてしまいますね。 外部サーバに各ファイルをアップロードしましたので参考にどうぞ。 ■foot.txt https://www.dropbox.com/s/gz1dg3hkkjygwr2/foot.txt ■head.txt https://www.dropbox.com/s/itmlnlotca7aras/head.txt ■main.css https://www.dropbox.com/s/pi9g6droshijtiz/main.css ■VBSコード(拡張子をvbsに変更してください) https://www.dropbox.com/s/315zwecpvnhcjge/test.vbs.txt -------------補足------------- ・Javascriptで展開させるコードは以下のものを使用しています。  http://allabout.co.jp/gm/gc/377237/ ・CSSでリストへスタイルを適用させる方法は以下のサイトを参考にどうぞ  http://www.tagindex.com/stylesheet/list/index.html

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

■手順 ※全て「TEST」ディレクトリと同じ階層(HTML化用ファイルの下)に作成してください (1)お好きな名前でVBSファイルを作成して「■VBSコード」をコピペ   コード内の以下の箇所を設定(階層の一番上のフォルダ名としてください)     ' 設定     key = "TEST" (2)「head.txt」を作成して以下の「■head.txt」をコピペ (3)「foot.txt」を作成して以下の「■foot.txt」をコピペ (4)「main.css」を作成して以下の「■main.css」をコピペ (5)(1)で作成した「○○○.vbs」を実行 同じ階層に「test.html」が出力されます。 (ファイル名を変更する場合は(1)の「' 出力ファイル作成」箇所を変更) 出力されるメインの階層リストはVBSで取得・加工し、 それ以外は外部テキストファイルとして以下のファイルに記述しています。  ・head.txt ・・・ ヘッダーのHTML  ・foot.txt ・・・ フッダーのHTML  ・main.css ・・・ CSSファイル リストのデザイン変更はCSSファイルまたは、 VBSコード内の「' HTML加工」あたりを触ってください。 ■VBSコード ' 型宣言 Dim objShell Dim wExec Dim sCmd Dim key Dim reed_file Dim Result Dim html Dim path ' 設定 key = "TEST" ' プロンプト処理 Set objShell = CreateObject("WScript.Shell") ' テキストファイル処理 Set fso = CreateObject("Scripting.FileSystemObject") ' 出力ファイル作成 Set oTs2 = fso.CreateTextFile("test.html",True) ' ヘッダー出力 Set reed_file = fso.OpenTextFile("head.txt") oTs2.WriteLine reed_file.ReadAll() ' コマンド生成 sCmd = "tree /f" ' コマンド実行 Set wExec = objShell.Exec("%ComSpec% /c " & sCmd) Do While wExec.Status = 0 Loop ' 取得 Result = wExec.StdOut.ReadAll ' 不要部分削除 key = "└─" & key Result = Right(Result,Len(Result)-Instr(Result,key)-Len(key)-1) ' HTML加工 key = Right(key,Len(key)-2) Result = Replace(Result," ├─","1") Result = Replace(Result," └─","1") Result = Replace(Result," │ " & vbcrlf,"3"&vbcrlf) Result = Replace(Result," │ " ,"2") Result = Replace(Result," " & vbcrlf,"3"&vbcrlf) Result = Replace(Result," " ,"2") html = Split(Result,vbcrlf) For Each Result in html Select case Left(Result,1) case "1" Result = Right(Result,Len(Result)-1) path = key & "/" & Result Result = "<li><a href=""#"" class=""menu"" onclick=""sublist(this); return false;"">" & Result & "</a><ul>" case "2" Result = Right(Result,Len(Result)-1) Result = "<li><a href=""" & path & "/" & Result & """>" & Result & "</a></li>" case "3" Result = "</ul></li>" end select ' メインHTML出力 oTs2.WriteLine Result Next ' フッダーHTML出力 Set reed_file = fso.OpenTextFile("foot.txt") oTs2.WriteLine reed_file.ReadAll() ' 終了処理 oTs2.Close Set wExec = Nothing Set objShell = Nothing Set reed_file = Nothing set oTs2=Nothing Set fso=Nothing ■head.txt <html> <head> <meta http-equiv="Content-Type" Content="text/html; charset=shift_jis"> <title>目録</title> <script type="text/javascript"><!-- // ▼下層リストの表示・非表示を切り替えるスクリプト function sublist( target ) { var TargetList = target.parentNode.getElementsByTagName('ul'); if ( TargetList[0].style.display == 'none' ) { TargetList[0].style.display = 'block'; } else { TargetList[0].style.display = 'none'; } } // ▼全サブリストの表示・非表示を一括して切り替えるスクリプト function allshowhide( showhide ) { var TargetLabels = document.getElementsByClassName('menu'); for (var i=0; i<TargetLabels.length; i++) { var TargetLists = TargetLabels[i].parentNode.getElementsByTagName('ul'); TargetLists[0].style.display = showhide; } } // --></script> <link rel="stylesheet" type="text/css" href="main.css"> </head> <body> <p> <input type="button" value="全部閉じる" onclick="allshowhide('none');"> <input type="button" value="全部展開" onclick="allshowhide('block');"> </p> <ul> ■foot.txt </ul> <script type="text/javascript"><!-- allshowhide('none'); // --></script> </body> </html> ■main.css /* ▼下層の表示・非表示を切り替えるリンク用の装飾 */ a.menu { border: 1px solid #8080ff; text-decoration: none; padding: 1px; background-color: #ccccff; margin-right: 2px; } /* ▼下層の表示・非表示を切り替えるリンクの上にマウスポインタが載ったとき用の装飾 */ a.menu:hover { background-color: #ccffff; border-color: blue; } /* ▼今回のサンプルとは関係のない装飾 */ h1 { font-size: 1.25em; } li { line-height: 1.45; list-style-type: disc; } p.note { font-size: 80%; line-height: 1.3; } li li { list-style-type: decimal; }

satoron666
質問者

お礼

eden3616様、回答ありがとうございます。 毎回お世話になっております! すごいプログラムです! フォルダの階層がさらに増えた場合には、 main.cssの編集が必要なのでしょうか? HTML加工部分のReplace(Result," ├─","1") をReplace(Result," │ ├─","3") Replace(Result," │ │","4") とか追加し、caseを増やせば良いのかと思うのですが、 合ってますでしょうか? 回答ありがとうございました^^ 本当に助かりました!

noname#236101
noname#236101
回答No.1

*satoron666様 *VBSとHTMLに対する適切な回答ではありません。流し読みしてください。 36歳信託銀行内SEです(有給消化中) >メモ帳が大量にあり探すのにとても苦労しますし、 >内容もとても見づらいものになってしまいます。 情報整理のお話だとすると、アプローチそのものにアドバイスが出来ます。 ・既存サービスを使う。 例えば、Evernote等。 世の中には既にあなたの理想を具体的に実現できるツールが存在していると思います。 ツールの自作が目的ではないと感じたので、そういったツールの使用をおすすめします。 ・RubyやPython等、実現が容易な言語を使用する。 上記言語ではファイル操作、情報整理は1hで簡単なツールができます。 ファイル操作等であれば、VBよりは向いていると言えます。 ・歴史を手本にする。 「プロダクティブ・プログラマ」という書籍で、いかに効率的に作業をするか、という内容があり、 ファイル整理等も触れています。 そういった書籍やサイトから、先達のやり方を学びイイトコどりをしていきましょう。 ・個人的に ローカル環境と上記内容であればテキストエディタの「SublimeText」で、Project機能を使用するだけで、解決するような気はしています。 もしくは、EmEditor。 ファイラなら X-Finder。

satoron666
質問者

お礼

avispax様、回答ありがとうございます。 自動的にHTML化し、色もつけ フレームをするとなると…慣れているプログラムのほうが 良いと思い、VBSでやろうと考えております。 ファイル整理も重要だとは思うのですが、 中々量が膨大でして、むずかしいものですね… できたら、このHTML化ツールを 会社の他の人にも使って貰おうと考えているので RubyやPythonを使うのはためらっておりました。 Rubyとか覚えるのに時間はかからないでしょうか… 主に、個人で使ってもらおうと思っていますが SublimeTextは課金なのですね… もっと段階を踏んで質問して行こうと思います! ありがとうございました^^

関連するQ&A

  • 【VBS】 テキスト→HTML 自動作成

    お世話になっております。 同じフォルダの中に入っているtxt全てを 自動的にHTML化しようと思っています。 分からないなりに考えて書いたのは下記コードです。 --------------------------------- Dim strScriptPath'自分の現在位置 strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"")'フルネームから、スクリプトネームを削除! ' フォルダをオブジェクト取得 Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder(strScriptPath) for each file in objFolder.Files Set fileRead = objFSO.OpenTextFile(file)'ファイルを開く If file.name<> WScript.ScriptName Then 'Msgbox objFso.GetBaseName(file)ファイル名 Msgbox objFso.GetBaseName(file) Set HTMLOutPutData = objFso.CreateTextFile(objFso.GetBaseName(file) & ".html",True) 'If InStr(l, "本社") = 0 含んでない場合 'Replace(文字列,どれを、どれに) '<font color="green">文字列</font>緑色に If Err.Number = 0 Then HTMLOutPutData.WriteLine "<html>" HTMLOutPutData.WriteLine "<head>" HTMLOutPutData.WriteLine "<title></title>" HTMLOutPutData.WriteLine "</head>" HTMLOutPutData.WriteLine "<body>" HTMLOutPutData.WriteLine "<h1 align=""" &"center" &""">"& objFso.GetBaseName(file) & "</h1>" HTMLOutPutData.WriteLine "<hr>" Do Until fileRead.AtEndOfLine = true LINEDATA = fileRead.ReadLine If InStr(LINEDATA,"'") = 0 then'含んでない場合 HTMLOutPutData.WriteLine "<font color=""" &"black"&""">" & LINEDATA & "</font><br>" Else HTMLOutPutData.WriteLine Replace(LINEDATA,"'","<font color=""" &"green"&""">") & "</font><br>" End if Loop HTMLOutPutData.WriteLine "</body>" HTMLOutPutData.WriteLine "</html>" fileRead.Close Else MsgBox "ファイルが開けません" End If End if Next Msgbox "終わり!" ------------------------------------------- とりあえず、'の後全ては緑色に変更。 1行読み込み、1行ずつ改行。 元のファイル名と同じで、拡張子を.htmlにして保存。 これを目標にやっていましたが、 全ファイル思ったとおりに行くわけではなく エラーの連続です。 プログラムが悪いのでしょうか? 1個目のファイルはどんどん重くなり、 300Kくらいのサイズになります。(他のファイルは2K程度です) それを削除しようとすると、どんどんパソコンが重くなり… どこかのループが悪さしているのでしょうか?

  • VBS 1行ずつファイルを読み込める/読み込めない

    いつもお世話になっております。 http://okwave.jp/qa/q8672643.html 前回質問させていただいた、 txtファイルをHTMLに自動的に変換するプログラムを 作成中ですが、 ひとつ分からない点があるため、質問させていただきました。 ためしに、テキストファイル2つ。 VBSファイル1つをフォルダに置いて実行してみました。 しっかり1行ずつ実行できているか Msgbox を使って確認したのですが、 1つ目のファイル「読み込み失敗.txt」が1度で全部読み込みしてしまい、 2つ目のファイル「読み込み成功.txt」は1行ずつ読み込め、無事変換できております。 ------------読み込み失敗.txt------------- Private Sub CommandButton1_Click() Application.DisplayAlerts = False Application.ScreenUpdating = False ''資料作成 ChertGraph.ComboBox1.Value = Me.ComboBox1.Value 'データ入力 Call ChertGraph.CommandButton1_Click 'ボタンクリック Graph_MAKE.ComboBox1.Value = Me.ComboBox1.Value'データ入力 Graph_MAKE.ComboBox1.Value = Me.ComboBox1.Value'データ入力 Call SCKindofGraph_SELECT.BothCreate_Click'ボタンクリック Call SCKindofGraph.CommandButton1_Click 'ボタンクリック History.ComboBox3.Value = Me.ComboBox1.Value '履歴に値を入れる Call History.CommandButton1_Click '履歴出力実行 Call BookCopy 'データ出力 Application.DisplayAlerts = True Application.ScreenUpdating = True Call Module1.sheet_sort MsgBox Me.ComboBox1.Value & vbCrLf & "完了しました。" Worksheets("TOP").Activate End End Sub ---------------------------------------- ------------読み込み成功.txt------------- Sub ComboboxNarabi() Dim i As Long Dim j As Long Dim Count As Long Dim Swap As String Dim SortListData As Variant SortListData = Array("A", "B", "C", "D", "E", "F", "G", "") Count = 0 For j = 0 To UBound(SortListData) For i = 0 To ComboBox2.ListCount - 1 If ComboBox2.List(i) = SortListData(j) Then Swap = ComboBox2.List(Count) '現在の位置の内容をSwapにコピー ComboBox2.List(Count) = ComboBox2.List(i) '現在位置に、検索したワードをコピー ComboBox2.List(i) = Swap 'もとの内容をコピー Count = Count + 1 End If Next Next End Sub ---------------------------------------- --------------VBSファイル--------------- Dim strScriptPath'自分の現在位置 strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"")'フルネームから、スクリプトネームを削除! ' フォルダをオブジェクト取得 Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder(strScriptPath) for each file in objFolder.Files If file.name<> WScript.ScriptName and Right(file.name,5)= ".html" Then objFso.DeleteFile file.Path End if Next Set objFolder = objFso.GetFolder(strScriptPath) for each file in objFolder.Files If file.name<> WScript.ScriptName and Right(file.name,4)= ".txt" Then Msgbox file.Path Set HTMLOutPutData = objFso.CreateTextFile(objFso.GetBaseName(file) & ".html",True) Set fileRead = objFSO.OpenTextFile(file)'ファイルを開く If Err.Number = 0 Then HTMLOutPutData.WriteLine "<html>" HTMLOutPutData.WriteLine "<head>" HTMLOutPutData.WriteLine "<title></title>" HTMLOutPutData.WriteLine "</head>" HTMLOutPutData.WriteLine "<body>" HTMLOutPutData.WriteLine "<h1 align=""" &"center" &""">"& objFso.GetBaseName(file) & "</h1>" HTMLOutPutData.WriteLine "<hr>" Do Until fileRead.AtEndOfStream = true LINEDATA = fileRead.ReadLine Msgbox LINEDATA If InStr(LINEDATA,"'") = 0 then'含んでない場合 HTMLOutPutData.WriteLine "<font color=""" &"black"&""">" & LINEDATA & "</font><br>" Else HTMLOutPutData.WriteLine Replace(LINEDATA,"'","<font color=""" &"green"&""">'") & "</font><br>" End if Loop HTMLOutPutData.WriteLine "</body>" HTMLOutPutData.WriteLine "</html>" fileRead.Close Else MsgBox "ファイルが開けません" End If End if Next Msgbox "終わり!" ---------------------------------------- LINEDATA = fileRead.ReadLine Msgbox LINEDATA と実行した場合に、何故1行ずつ読み込めていないのか 調べ方が悪いのか情報が無かったため 何か情報があれば、お願い致します! 以上、よろしくお願い致します。

  • vbsスクリプト作成について

    いつもありがとうございます。 今回、知識がないのですが下記のような処理のVBSを作成したく調べております。 (1)test.vbsファイルを実行時にvbsファイルと同じディレクトリに「folder」フォルダを作成 (2)作成した「folder」フォルダにサービス「idsvc」の状態をテキスト形式で「service.txt」として出力 (3)上記と同様の処理(service.txtはリネームする)を現在ログインしているユーザのスタートアップに「start.vbs」として配置 (3)上記処理後、再起動を実施 (4)再起動後、start.vbsを実行後に自動削除 大きく分けて4つの処理を個別に作成して最終1つのファイルとして作成しようと思っております。 なんとかわからいなりに作成してはいるのですが どうしても下記方法がわかりません。 (2)の処理「folder」を作成後、service.txtのパス(最下位行)を変数に入れて出力する方法 (きたないソースで申し訳ないです) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ' フォルダ作成 '---------------------------------------------- Dim str_Path Dim objFdr Set objFdr = CreateObject("Scripting.FileSystemObject") str_Path = objFdr.CreateFolder(".\folder") Dim WshShell Set WshShell = CreateObject("WScript.Shell") Set objLog = WshShell.Exec("cmd /C ""sc query idsvc | findstr -i state > .\folder\service.txt""") ※サービス出力はvbsでの方法がわからなかったのでcmdを呼び出しています。 (4)再起動後の処理にて、再起動前に作成したフォルダに「service.txt」を出力する方法 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ objVBSFile.WriteLine("On Error Resume Next") objVBSFile.WriteLine("Dim WshShell") objVBSFile.WriteLine("Set WshShell = CreateObject(""WScript.Shell"")") objVBSFile.WriteLine("Set objLog = WshShell.Exec(""cmd /C """sc query idsvc | findstr -i state >C:\services.txt"""")") objVBSFile.WriteLine("Set objFSO = CreateObject(""Scripting.FileSystemObject"")") objVBSFile.WriteLine("objFSO.DeleteFile WScript.ScriptFullName") 他にもわからないことはありますが、調べてなんとかなるとおもっておりますが 上記についてはVBSの理解不足なため、つかめません。 申し訳ありませんが、アドバイス頂けないでしょうか。 以上、宜しくお願い致します。

  • VBSでフォルダ、ファイル作成時のエラーコード

    フォルダ、ファイルが存在しないとき、作成するスクリプトをVBSで作成していますが、疑問点があるのでご教示ください。 objFSO.CreateFolder、objFSO.CreateTextFileを実行が、正常に行われた場合、 Err.Numberに0がセットされると思っていましたが、実際は違っていました。 objFSO.CreateFolderでフォルダが作成される場合、Err.Numberに13が返されます。 objFSO.CreateTextFileでファイルが作成される場合、Err.Numberに438が返されます。 このスクリプトを実行後、フォルダ、ファイルが存在しない場合、作成されることも確認しています。 フォルダ作成後、作成されたフォルダに対して、ファイルの作成/データの書き込みのアクセス権を拒否にすると返されるErr.numberに70がセットされることも確認しています。 なぜ、フォルダ、ファイルが作成された場合、0が返されないのかご存知の方がいらっしゃいましたらご教示ください。 また、その情報が記載されている書籍およびサイトがあれば、お教えいただければ、幸いです。 Option Explicit Dim objFSO Dim objFile Const strFolderName = "C:\VBS" Const strFileName = "C:\VBS\test.txt" On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then WScript.Echo "FSOオブジェクトを作成しました" Else WScript.Echo "FSOオブジェクトを作成できませんでした" WScript.Quit(1) End If If objFSO.FolderExists(strFolderName) Then WScript.Echo "フォルダが見つかりました" Else WScript.Echo "フォルダが見つかりませんでした" If objFSO.CreateFolder(strFolderName) Then If Err.Number = 13 Then WScript.Echo "フォルダを作成しました" Else WScript.Echo "フォルダを作成できませんでした" WScript.Quit(1) End If End If End If If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else Script.Echo "ファイルが見つかりませんでした" If objFSO.CreateTextFile(strFileName) Then If Err.number = 438 Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If End If

  • VBSでファイル作成後、書き込みできない

    ファイルが存在している場合は、ファイルをオープンして書き込み、ファイルが存在していない場合は、ファイルを作成後、オープンして書き込みを行わせたいと考えています。 しかし、ファイルが存在していないとき、ファイルは作成されるのですが、『エラー:800A0046 書き込みできません。VBScript実行時エラー』が出て、書き込みができません。モードをWritingにしても同じでした。 お手数をおかけしますが、ご教示いただけますようお願いいたします。 Option Explicit '■ オブジェクトの宣言 Dim objFSO Dim objFile '■ 定数の宣言 Const strFileName = "C:\VBS\TEST.TXT" '■ 定数の宣言 '// ファイル入出力モード(8:追加書き込み) Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else WScript.Echo "ファイルが見つかりませんでした" Set objFile = objFSO.CreateTextFile(strFileName) If IsObject(objFile) Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If '// ファイルのオープン Set objFile = objFSO.OpenTextFile(strFileName,ForAppending) objFile.WriteLine "2012/12/21,100,ブレーキパッド,35000"

  • VBSのGetFolderメソッドについてですが

    VBSで質問です。環境はXP Proです。 GetFolderメソッドでFolderオブジェクトを取得し、Filesプロパティを For Eachでチェックしている時に、フォルダ内ファイルが削除された場合は、例外処理が起こるのでしょうか? それとも、削除処理自体が排他制御されてしまうのでしょうか? ----------------------------- ' 環境設定 Const strRootPath = "D:\" '監視対象フォルダ Dim objFso,objFolder,objFile,count Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder(strRootPath) count = 0 ' メインスクリプトの実行開始 For Each objFile In objFolder.Files     ' このタイミングでファイルが削除されてしまったら? If objFso.GetExtensionName(objFile) = "txt" Then count = count + 1 End If Next 皆様のお知恵をお貸しください。

  • VBSエラー"オブジェクト型の変数は定義されていません"について

    以下のコードは、あるルートフォルダにトップページ"TOP.html"をつくり(または上書きし)、各階層のフォルダの中に存在する拡張子がabc(仮称)のファイルと同じ名前のhtmlファイルを、abcファイルと同じフォルダに同じ数だけつくり(または上書きし)、トップページにその作成したすべてのhtmlファイルへのリンクを表示させる、という構想で作成中のVBSなのですが(具体的な数値等は"****"としました)、これを実行すると「●(マル)」と書いた55行目のところでエラー「オブジェクト型の変数は定義されていません」となってしまいます。このエラーをどのように対処すればよいかを教えていただければと思います。 私はExcelのVBAは多少の経験がありますが、VBScriptを書いたのはこれが初めてで、HTMLも未経験です。14・15行目の呼び出し方はこれでいいのかどうかも不安です。よろしくお願いします。 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set CurFolder = fso.GetFolder(".") Call CreatePages1(CurFolder, "*.abc", files) Set outFileStream = Nothing Set CurFolder = Nothing Set fso = Nothing 'サブフォルダへの処理 Public Sub SearchSubFolder1(ByVal folder) Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set folder2 = fso.GetFolder(folder.Path) For Each folder2 In folder.SubFolders Call CreatePages1(folder2, searchPattern, files) '再帰呼び出し Call SearchSubFolder1(folder2) Next Set fso = Nothing End Sub 'htmlファイル作成 Public Sub CreatePages1(ByVal folder, ByVal searchPattern, ByRef files) Set fso = WScript.CreateObject("Scripting.FileSystemObject") 'トップページを途中まで作成する。 Set outFileStream = fso.CreateTextFile(folder.Path & "\TOP.html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>Viewer</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" '各htmlファイルを作成する。 For Each fs In folder.Files Set outFileStream = fso.CreateTextFile(folder.Path & "\" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & ".html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>Browser</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" outFileStream.WriteLine "<OBJECT ID=""Browser1"" WIDTH=**** HEIGHT=**** CLASSID=""CLSID:****"">" outFileStream.WriteLine "<PARAM NAME=""_Version"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentX"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentY"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_StockProps"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""FileName"" VALUE=""" & folder.Path & "\" & fs.Name & """>" outFileStream.WriteLine "</OBJECT>" outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'トップページの続きを作成する。 Ext = fso.GetExtensionName(fs.Name) If LCase(Ext) = "html" Then ●(マル) outFileStream.WriteLine "<a href=""" & folder.Path & "\" & fs.Name & """>" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & "</a><br>" End If Next outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'サブフォルダへの処理。 Set fp = fso.GetFolder(folder.Path) Call SearchSubFolder1(fp) End Sub

  • VBSでのファイル読込、出力操作について

    いつもありがとうございます。 掲題の件について、ご教授頂けますでしょうか。 下記のように『start.vbs』を実行すると『a.txt』の行に記載されている実行ファイル名を読み込み 『test.vbs』にファイル名分のコマンドを書き込みしたいです。 例) ----------------------------- start.vbs (作成途中) ----------------------------- Set objWShell = CreateObject("wscript.shell") Set objFso = CreateObject("Scripting.FileSystemObject") Set objFile = objFso.OpenTextFile("c:\a.txt", 1, False) ' 出力先ファイル Set objVBSFile = objFSO.CreateTextFile(c:\test.vbs, True) If Err.Number > 0 Then WScript.Echo "Open Error" Else Do Until objFile.AtEndOfStream objVBSFile.WriteLine(objFile.ReadLine) Loop End If ----------------------------- a.txt ----------------------------- adobe.exe photoshop.exe ****.exe    ・    ・    ・ ------------------------------ start.vbs ------------------------------ objWShell.Run "cmd.exe c:\adobe.exe ", 0, True objWShell.Run "cmd.exe c:\photoshop.exe ", 0, True objWShell.Run "cmd.exe c:\****.exe ", 0, True    ・    ・    ・ vbsをサイトを参考にして作ってはいるものの、start.vbsを実行すると a.txtのファイル名をvbsに書き込むのが限界です。 少しずつ勉強していくのですが、本件少し早めに作りたいという背景があり ご教授頂けませんでしょうか。 また、わかりにくい説明となっておりますが どうぞ宜しくお願い致します。

  • VBS について

    以下のスクリプトは、あるフォルダ以下の(サブフォルダを含む)abcファイル(仮称)すべてについて同じ名前でhtmlファイルをつくると同時に、そこへリンクするメニューのページを上書きする、という構想で書いたものですが、実行すると2行目で ')'がありません というエラーが出てしまいました。(具体的な数値等は"****"としました) 私はExcelのVBAは多少の経験がありますが、VBScriptを書いたのはこれが初めてで、HTMLも未経験です。 "')'がない"というのはどういうことなのか、このエラーをどのように対処すればよいかを教えていただければと思います。よろしくお願いします。 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Public Sub GetAllFiles(ByVal folder As String, ByVal searchPattern As String, ByRef files As ArrayList) 'folderにあるファイルを取得する。 Dim fs As String() = System.IO.Directory.GetFiles(folder, searchPattern) 'トップページを途中まで作成する。 Set outFileStream = fso.CreateTextFile(folder.Path & "\***", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>****</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" '各htmlファイルを作成する。 For Each fs In folder.Files Set outFileStream = fso.CreateTextFile(folder.Path & "\" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & ".html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>***</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" outFileStream.WriteLine "<OBJECT ID=""****"" WIDTH=*** HEIGHT=*** CLASSID=""CLSID:****"">" outFileStream.WriteLine "<PARAM NAME=""_Version"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentX"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentY"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_StockProps"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""FileName"" VALUE=""" & folder.Path & "\" & fs.Name & """>" outFileStream.WriteLine "</OBJECT>" outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'トップページの続きを作成する。 Ext = fso.GetExtensionName(fs.Name) If LCase(Ext) = "html" Then outFileStream.WriteLine "<a href=""" & folder.Path & "\" & fs.Name & """>" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & "</a><br>" End If Next outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'folderのサブフォルダを取得する。 Dim ds As String() = System.IO.Directory.GetDirectories(folder) 'サブフォルダへの処理も行う。 Dim d As String For Each d In ds GetAllFiles(d, searchPattern, files) Next d End Sub Set CurFolder = fso.GetFolder(".") GetAllFiles(CurFolder, "*.abc", files) Set outFileStream = Nothing Set CurFolder = Nothing Set fso = Nothing

  • VBSでルートフォルダ名を取得したい

    (I)ドライブにUSBメモリーがあってルートフォルダ名がABCだとします。 VBSでルートフォルダ名を取得したくてコード書いてみたんですがMsgBoxには空欄しかでません。なにが間違っているのか教えて頂けないでしょうか? dim objFSO dim objDrive Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objDrive = objFSO.GetDrive("I") MsgBox objDrive.RootFolder.name