秀丸で指定のフォルダのファイル数を数え、最後のファイルのファイル名を取得する方法について

このQ&Aのポイント
  • 秀丸で指定のフォルダのファイル数を数える方法がわからず困っています。
  • UWSCのGETDIR_FILES[ ]関数に相当する機能を秀丸で実現したいです。
  • COMの呼び出しを使用する方法があると思うのですが、FSOを使った記述がよくわかりません。
回答を見る
  • ベストアンサー

秀丸で指定のフォルダのファイル数を数え、最後のファイルのファイル名を取

秀丸で指定のフォルダのファイル数を数え、最後のファイルのファイル名を取得するというマクロを作成したいのですが、以下の点がわからず、困っております。 どうやら標準の関数ではファイル数を数える関数はないようなので、 COMの呼び出しを使おうと思うのですが、FSOを使った記述の仕方がヘルプを読んでみてもよくわかりませんでした。 普段はUWSCを使っており、いわゆるUWSCのGETDIR_FILES[ ]関数に相当することがしたいです。 UWSCだと folder = "ここにフォルダ名" count = GETDIR(folder) msgbox(GETDIR_FILES[count-1]) これだけなのですが、秀丸だと・・・という感じです。 お手数をおかけしますが、お分かりになられる方がいらっしゃいましたら、 御教授いただけないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

if(existfile(windir + "\\command.com") == true) {   $$doswin = "command.com"; } else {   $$doswin = "cmd.exe"; } ##temp = hidemaruhandle(0); newfile; insert "DEL FILELIST.TXT\r"; insert "DIR /B *.TXT > FILELIST.___\r"; insert "SORT FILELIST.___ > FILELIST.TXT\r"; insert "DEL FILELIST.___\r"; insert "DEL LISTMAKE.BAT\r"; insert "EXIT\r"; saveas "LISTMAKE.BAT"; ##bat = hidemaruhandle(0); setactivehidemaru ##temp; closehidemaruforced ##bat; runsync2 $$doswin + " /C LISTMAKE.BAT"; openfile "/(0,512,512,256) FILELIST.TXT"; closehidemaruforced ##temp; これでカレントディレクトリにある、拡張子txtのファイルの一覧がソートされた結果がファイルに記録され、 そりファイルを開いた状態の秀丸が新たに起動します。 gofileendでファイルの最後までカーソルを移動させれば、カレントディレクトリにある.txtのファイル数も判るでしょう。 # 作業ファイルのFILELIST.TXTが残りますが…

delcder0d3
質問者

お礼

回答ありがとうございます。返信が遅くなってしまい申し訳ありません。 教えていただいたマクロで希望に近いことができましたので、 こちらを使わせていただきたいと思います。 迅速な回答ありがとうございました。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

バッチファイルを生成して、DIRコマンドの出力をリダイレクトでファイル化、あとは検索なりすることで一応は可能かと思われますが… # 昔、そういう秀丸マクロを作ったことがある。 それはそれとして… >最後のファイルのファイル名 何を持って「最後」とするのでしょうか? DIRコマンドのオプションなしで実行したときの最後? # ディレクトリエントリ順…かと思われますがファイルシステムで異なったような。 何らかの条件でソートした時の最後?

関連するQ&A

  • VBSで指定したフォルダー内のファイルを書き出さないようにする

    あるフォルダ以下のファイル名を出力ファイル、f.name.txtに書き出すのですが "新しいフォルダ"というフォルダのなかにあるファイルは書き出さないようにしたいのですが、意に反してフォルダー内の全てのファイル名を書き出してしまいます。どこがおかしいのでしょう? ********************************************** Set FSO = CreateObject("Scripting.FileSystemObject") Set fl = WScript.CreateObject("Scripting.FileSystemObject") Set abc = fl.CreateTextFile("f.name.txt") ShowSubfolders FSO.GetFolder(".") Sub ShowSubFolders(Folder) For Each File in Folder.Files 'Folder内のファイルを列挙する Fname = File.name FolderCheck=Folder & "\" & "新しいフォルダ" If Folder <> FolderCheck Then abc.Write Folder & "\" & Fname & vbCrLf End If Next For Each Subfolder in Folder.SubFolders 'Foler内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub abc.Close

  • 再度:VBSで指定したフォルダー内のファイルを書き出さないようにする

    先ほども似たような質問をしました。 あるフォルダの中にあるファイル名の一覧をファイル"f.name.txt"を書き出したいのですが"新しいフォルダ"のなかにあるファイルは書き出さないようにしたいです。下記のVBSは"新しいフォルダ"のなかに更にフォルダが階層的に存在するときには"新しいフォルダ"の中のファイルも全て書き出してしまいます。 "新しいフォルダ"の中にフォルダがない場合は正しく動きます。 "新しいフォルダ"の中にフォルダが階層的にあっても"新しいフォルダ" の中にあるファイル名を書き出さないようにするにはどうしたらよいのでしょう? ************************************************************** Set FSO = CreateObject("Scripting.FileSystemObject") Set fl = WScript.CreateObject("Scripting.FileSystemObject") Set abc = fl.CreateTextFile("f.name.txt") ShowSubfolders FSO.GetFolder(".") Sub ShowSubFolders(Folder) If Folder.Name <> "新しいフォルダ" Then For Each File in Folder.Files 'Folder内のファイルを列挙する Fname = File.name abc.Write Folder & "\" & Fname & vbCrLf Next End If For Each Subfolder in Folder.SubFolders 'Folder内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub abc.Close

  • フォルダ内のサブフォルダ名やファイル名の取得

    VB初心者です。 あるフォルダ内のサブフォルダ名や数、ファイル名を取得したいのですが・・・ コントロールのDirListBoxを使用するか、Dir関数を使用したいのですが、上手くできません。 ご存知の方、教えてください

  • 長いフォルダ名のファイルが開きません

     テキストエディタを乗換えたのですが、 長いフォルダ名(例えばProgram Files等)以下のフォルダの テキストファイルが開けなくなってしまいました。 対処方法を教えてください。

  • フォルダ内で、一致するファイル名の数を表示してフォルダ名を修正してくれるソフト

     はじめまして。  ベクターでソフト探したのですが見つかりませんでした。知っている方いらっしゃいましたらお願いします。 ○やりたいこと 1、フォルダ内でファイル名を検索(例えばyoshioフォルダ内の「出張」) 2、条件に当てはまるファイル数を表示(△○件) 3、そのフォルダ名を変更(yoshioのフォルダ-△○)  ファイルをリストで表示するソフトは見つけられましたが、検索式に当てはまるファイル数を表示させて、そのフォルダ名を変更するようなソフトがみつかりませんでした。  フォルダ名を変えるのが難しいのであれば、せめて上記2のファイル数を表示まで行えるソフトがあれば助かるのですが、どなたかよろしくお願いいたします。  只今、手作業でこの作業(フォルダ内で出張に関するファイルの数を調べてフォルダの名前の後に数量を表示させる)を行っていますが、ソフトで自動化できないかと思っています。フォルダ数が沢山あるうえに定期的に数の確認をしていますので、作業の軽減を図りたいと思っています。  よろしくおねがいいたします。

  • ファイル名を変数として取り扱いたい

    ファイル名が変更されても正常に動作するようにしたい <処理概要> A.XLS、B.XLS、C.XLSというファイルがあります。 A.XLSにB.XLS、C.XLSのシートを取り込む処理をしています。 マクロはA.XLSで起動、処理しています。 A.XLSのファイル名を変更されても動くようにできるのでしょうか。 ご指導のほど、よろしくお願いいたします。 <ファイルの取り込み処理> For Each fName In FSO.GetFolder(MyFolder).Files If FSO.GetExtensionName(fName) = \\\"xls\\\" And _ FSO.GetBaseName(fName) <> \"A\" Then Set wBook = Workbooks.Open(fName, 0, True) For 番号 = 1 To Worksheets.Count wBook.Worksheets(番号).Copy _ after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) Next 番号 wBook.Close False End If

  • フォルダの中のファイル数を取得するには vba

    手作業でフォルダのプロパティからファイルの数を確認することはできるのですが VBAで(FSOなど)、該当のフォルダの中に何個ファイルが入ってるかを確認するコードはありますか? Sub test() Dim MyFileName As String Dim MyFolderName As String Dim i As Long MyFolderName = "\○○\icon" MyFileName = Dir(MyFolderName & "\*.*") Do While MyFileName <> "" MyFileName = Dir() i = i + 1 Loop MsgBox i End Sub このようなコードを作ってみたのですが、 画像のように実際に目で確認したファイル数と一致しません。 正しい数が取得できるvbaコードはありますか?

  • 【ファイルサーチ】指定のフォルダーではなく自分で選択したフォルダー内のファイルの総数をカウントしたい

    お世話になります。指定のフォルダーではなく自分で選択したフォルダー内の"csvファイル"の総数をカウントしたいのですがうまくいきません。アドバイスお願いいたします。 With Application.FileSearch .LookIn = Application.GetOpenFilename .Filename = "*.csv" If .Execute > 0 Then MsgBox .FoundFiles.Count & "個" End If For i = 1 To .FoundFiles.Count MsgBox .FoundFiles(i) Next i End With

  • フォルダ名の後ろにファイル数

    よろしくお願いします。 ウインドウズユーザーです。2000です。 メールソフトの未読メールのように、フォルダ名の後ろにファイル数が常に  ■(フォルダ名)■(3) というように 表示できるようなフリーソフトをご存知の方いませんでしょうか? MACではあるようですが、ウインドウズ用で 見つけられなくて、、。 知っている方、何卒教えてください。宜しくお願いします。

  • VBAでアクティブなファイルを参照して、ファイル一覧作成(サブフォルダ含む)

    VBAでアクティブなファイルのフォルダ(サブフォルダを含む)のファイル一覧を 作成したいと思っています。 以下のサイトを参考にして、パス、ファイル名を落とすまではできました。 http://okwave.jp/qa3544575.html === Sub test() Application.ScreenUpdating = False Sheet1.Cells.Clear Sheet1.Cells(1, 1) = "パス" Sheet1.Cells(1, 2) = "ファイル名" files "d:\", 2 Application.ScreenUpdating = True End Sub Sub files(path As String, ByRef row As Long) DoEvents Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim f As Object For Each f In fso.GetFolder(path).files Sheet1.Cells(row, 1) = path Sheet1.Cells(row, 2) = f.Name row = row + 1 Next For Each f In fso.GetFolder(path).SubFolders files f.path, row Next Set fso = Nothing End Sub === >files "d:\" の箇所を修正して、アクティブなブックを参照しようとしてみたのですが、 なかなか上手くいきません。 また、できれば *.xls などファイルの種類を指定したいのです。 filesearchを使用して組んだ時は 「AAA = ActiveWorkbook.path」「Filetype ~ 」 などでそれらの指定ができたのですが、上記に応用する事ができません。 どなたかご教示頂けますよう、よろしくお願いいたしますm(_ _)m

専門家に質問してみよう