VBSでファイル名と同じフォルダを作成し、移動させる

このQ&Aのポイント
  • VBSを使用して、ファイル名と同じフォルダを作成し、移動させる方法について困っています。
  • 特定のフォルダ内のファイル名を取得し、そのフォルダ名と同じ名称のフォルダを作成し、ファイルを移動する方法について教えてください。
  • 質問者は、VBSを使ってファイル名と同じ名前のフォルダを作成し、そのフォルダにファイルを移動したいと考えています。具体的な方法や参考になるURLやサンプルプログラムを教えていただけると助かります。
回答を見る
  • ベストアンサー

VBSでファイル名と同じフォルダを作成し、移動させる。

はじめまして。こんにちは。ファイル名の取得、フォルダの作成、移動ができなくて困っています。 たとえばC:\testというフォルダの中にaaa1.txt aaa2.txt,aaa3,txt・・・zzz343.txtというようにファイルがランダムにあったとします。最初の3文字は英語と決まっています。そこでaaa1.txtやaaa2.txtがあればaaaというフォルダを同じ階層に作成し、aaa1.txtとaaa2.txtを新しく作成したaaaというフォルダに移動させる。これをすべてのファイルにたいして行いたいのですがどうすればいいのでしょうか? 参考になるURLやサンプルプログラムがありましたら教えて下さい。よろしくお願い致します。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

だいたいこんな感じでいいかと思います。 C:\testとか特定のフォルダというので調べていません。 処理するフォルダにスクリプトを置いて実行することを前提としています。 ------------------------------------------------------------------- Dim fso, folder, regEx,x, exp, folderName Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(".") Set regEx = New RegExp regEx.Pattern = "^[a-z]{3}" '先頭に英字が3文字ある regEx.IgnoreCase = True ' 大文字と小文字を区別しない For Each x in folder.files exp=fso.GetExtensionName(x.Name) '拡張子 if UCASE(exp)="TXT" and regEx.test(x.Name) then folderName = Left(x.Name,3) ' 移動するフォルダ名を取り出す if not fso.FolderExists(folderName) then '既にフォルダがあるか? fso.CreateFolder(folderName) '無いのでフォルダを作る end if fso.MoveFile x.Name, folderName & "\" end if next

eri1235
質問者

お礼

ありがとうございます。 完璧でびっくりしました。 とても感謝しています。 また、何かあればよろしくお願いします。

関連するQ&A

  • VBSでファイル作成をするとき

    VBスクリプトでファイルを生成するソースを書いたのですがそれをバッチで実行するようにしてありますが例えばPCが起動していなく実行できなかった場合次回実行時に「もしこの名前のファイルがなかったら先に 作るはずだったファイルを作る」といったようなのが欲しいと思っております。 こういうのはプログラムで先にファイル検索をさせて無かったら作るといった感じになるのでしょうか? ファイル検索をさせるVBSはFileSystemObjectを使う方法になる以外に無いでしょうか? (ウイルスソフトが反応するため・・・・・) まだこの手の記述方法がわからないのでネットでサンプルを探したのですがなかったのでご存知の方ヒントをいただけないでしょうか? よろしくお願いします。 例:VBSCRIPTを1月にタスク実行でAAA1.txtを作成。 2月にこのタスクを実行したとき先にAAA1.txtがあるかを確認してあればAAA2.txtを作る。 もし無ければAAA1.txtを作る条件を当てはめ作ってからAAA2.txtを作る。

  • バッチでファイルをリネームして別フォルダ移動に行き詰まり・・・

    バッチ(コマンドプロンプト)でファイルをリネームして別フォルダに移したいのですが行き詰ってしまったのでどなたかご教示ください。当方XPの環境です。 まず、今日(例:2月4日時点で)簡単に説明するとあるフォルダに3つファイルが存在します。 「test1」フォルダに「AAA200711.txt」「AAA200712.txt」「AAA200801.txt」があるとします。 数字はその月に作ったファイルと思ってください。 そのファイルを「test2」フォルダへ移したいと思っています。 移す際にファイル名をリネームしたいと思います。 2008年1月のものを「AAA1.txt」2007年12月のファイルを「AAA2.txt」といった感じでやるつもりです。 当方で考えた下記の構文でですが先月、先々月のものはうまくリネームしてコピーされました。 ですが3ヶ月前のファイルだけなぜか出来ません。 下記にあるのはそのまんまコピーしたものになります。 原因がわからず戸惑っておりますのでよろしくお願いします。 @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a LASTMONTH=YYYYMM-1 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100 copy C:\test1\AAA%LASTMONTH%.txt C:\test2\AAA1.txt @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a TWOMONTHAGO=YYYYMM-2 if %TWOMONTHAGO:~-2%==00 set /a TWOMONTHAGO+=12-100 copy C:\test1\AAA%TWOMONTHAGO%.txt C:\test2\AAA2.txt @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a THREEMONTHAGO=YYYYMM-3 if %THREEMONTHAGO:~-2%==00 set /a THREEMONTHAGO+=12-100 copy C:\test1\AAA%THREEMONTHAGO%.txt C:\test2\AAA3.txt ↑これがうまくいかないのです。 日付の計算とかが間違っているのでしょうか? cd /d C:\test2 del AAA*.txt

  • フォルダ内のファイル存在監視する常駐プログラム

    あるフォルダ内に、あるファイルの存在を監視して、存在するとある処理を実行するような常駐型の監視プログラムをどのようにすればよいか教えてください。 ファイルはフォルダ内に複数存在する場合があり、古いもの順に取得し処理していきたいのです。 フォルダ名:c:\test\ ファイル名:aaa2009090415001234.txt (1)       aaa2009090416001234.txt (2)  とあると、(1)→(2)の順で処理したい。 aaaYYYYMMDDHHMMSS.txt の形式ファイル Windows系で、できればVBSがいいです。 サンプルコードまたは流れなどがわかれば幸いです。 よろしくお願いします。

  • 1つ上の階層にフォルダを移動させるバッチファイル

    windows XPで下記のようなバッチファイルを作成したいです。 aaaフォルダ内にyyy.batと111フォルダがあり、111フォルダの中にbbbフォルダとcccフォルダがあるとします。なお、bbb、cccフォルダ内にはファイルが存在しています。 そしてaaa、bbb、cccの各フォルダの名称は可変します。 この状態でyyy.batにbbb、cccフォルダをaaaフォルダ内に移動させる(一つ上の階層に移動させる)バッチプログラムを作成したいと思っています。 どのようにすればいいのでしょうか。 お分かりの方、お教えいただけないでしょうか。 よろしくお願いいたします。

  • C言語でのファイル検索&ファイル書き換えについて

    C言語である特定のフォルダを指定して、その階層内(サブフォルダも含む)にあるファイル、例えばsample_nameをファイル名に含むファイルを見つけ、そのファイル内の例えば下のような書き換えを行えるようなプログラムはどうつくればいいのでしょうか。 元ファイル ~sample_name1.txt~ aaa, 10 bbb, 20 ccc, 30 ~sample_name2.txt~ aaa, 30 ccc, 12 bbb, 20 ddd, 15 上のように各ファイルにaaaやbbbが共通に含まれています。 対象ファイル:sample_name 対象文字列:aaa 変換後:100 変換後ファイル ~sample_name1.txt~ aaa, 100 bbb, 20 ccc, 30 ~sample_name2.txt~ aaa, 100 ccc, 12 bbb, 20 ddd, 15

  • VB6.0 フォルダ配下(サブフォルダ含む)のファイルを全て読み込む方法

    環境 OS:WINDOWS 2000 PRO ソフト:VisualBasic 6.0 指定したフォルダ配下の全てのhtmlファイルを読み込む機能を作成したいと考えています。 C:\AAA\BBB\CCC\sample1.html C:\AAA\BBB\CCC\sample2.html C:\AAA\BBB\CCC\DDD\sample3.html C:\AAA\BBB\CCC\DDD\EEE\sample4.html C:\AAA\XXX\YYY\ZZZ\sample5.html 以上のような構造になっていた場合に、ルートフォルダとして『C:\AAA』を指定し、その配下全てのhtmlファイルを読み込み、1ファイルずつ加工したいと考えています。 何階層にも渡るファイルを全て読み込む方法がわかりません。 よろしくお願い致します。

  • 【VBS】古い日付のフォルダを削除したい

    あるフォルダ(C:\test\)内のフォルダ名が日付形式(YYYYMMDD)のものの中で、 一番新しい日付のフォルダを残し、古い日付のフォルダを削除したいです。 日付が新しいか古いかは、フォルダ名で判断。作成日時で判断するのではない。 C:\test\フォルダには、日付形式(YYYYMMDD)のフォルダとそれ以外の名称のフォルダ、ファイルが含まれます。 例ですが、C:\test\フォルダに以下のフォルダ・ファイルがあるとして、 C:\test\AbcD1\ C:\test\20130601\ C:\test\20130611\ C:\test\Aiueo2\ C:\test\aa2.log C:\test\20130602\ C:\test\20130605\ C:\test\20130614\ C:\test\Zxy2\ C:\test\aaa.txt 削除するのは、 C:\test\20130601\ C:\test\20130611\ C:\test\20130602\ C:\test\20130605\ です。 以下のフォルダについては、フォルダ名が日付形式(YYYYMMDD)ではないので、 削除しません。 C:\test\AbcD1\ C:\test\Aiueo2\ C:\test\Zxy2\ 以下のフォルダについては、フォルダ名の日付が最新のため、 削除しません。 C:\test\20130614\ ファイルについては、削除しません。 C:\test\aa2.log C:\test\aaa.txt フォルダの一覧を取得するvbsは作成できました。 ですのであとは、 1.日付形式のフォルダを取得 2.最新の日付形式のフォルダ名を取得する 3.最新以外の日付フォルダを削除する 部分ができれば、できそうです。 サンプルソースや参考サイトを教えてください。

  • 特定の拡張のファイルを検索し、別のPCにコピーフォルダ名毎コピーしたい

    AのPC上で*.txtを検索し、フォルダ階層名毎、BのPCにコピーしたい。 例)AのPC c:\sample.txt c:\test\sample.txt 希望する結果)BのPC c:\A ←検索したPCの名前のフォルダを作成 (難しければ手動で作成) c:\A\sample.txt c:\A\test\sample.txt どなたかわかる方、教えてくださいm(_ _)m

  • 条件にあった特定のファイルのフォルダ名を得る

    よろしくお願いします。 階層的に存在するファイル(すべて同名)で、条件にあった記述がされているファイルのフォルダ名を得たいのですが、どのような方法が考えられるでしょうか? 漠然とした質問で申し訳ありません。 例えば、 TEST--+--A--TEST.txt      |      +--B--TEST.txt      |      +--C--TEST.txt というフォルダ階層でフォルダ"/TEST/A~/TEST/C"があり、それぞれ"TEST.txt"というファイルを持っているとします。 その中の"/TEST/B/TEST.txt"だけ"dummy"という記述が1行あったとするとき、フォルダ名"/TEST/B"を抽出したいのですが何か良い方法はあるでしょうか? (実際の各フォルダ名は規則性なくかなりの量があります) サーバー・・・HP-UX CGI開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • VBSを利用して、ファイル名を取得

    VBSを利用して、ファイル名を取得 はじめまして VBSを利用して、ファイルのフルパスを取得したいと思っております。 具体的には、フォルダ内のファイルを1ファイルずつ取得するようなプログラムを 作成したいと思っております。 C:\TEST \2010 \aaa.csv C:\TEST \2010 \bbb.csv C:\TEST \2009 \ccc.csv C:\TEST \2008 \ddd.csv C:\TEST \2008 \eee.csv フルパスを取得したいのですが、どのようにしたら良いでしょうか。 最終的には、上記の読み込んだファイルごとにファイルの中身を1行ずつ確認して、 特定の文字が含まれているか確認をするようなスクリプトにしようと思っております。 そのため、objFS.OpenTextFile("取得フルパス",ForReading)のようにして 取得したフルパスごとに読み込みをしようと思っております。 どなたか、お手数ではございますが、ご教授願います。