• ベストアンサー

ファイル名のスペース

ファイル名にスペースが表示されているのでそれを削除したいです。 vbsファイルをダブルクリックすると自動で処理することは可能でしょうか? ※スペースは半角と全角があります。 (例) 1234 .jpg→1234.jpg 1234 .jpg→1234.jpg 宜しくお願い致します。

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

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.5

プログラムファイル(「~.vbs」ファイル)を、これから処理したいフォルダに放り込んでダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。 スペース(半角スペースのみを対象にしています)が存在するファイル名のスペースをすべて削除してしまいます。 Option Explicit Dim f, gf, so Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") For Each f In gf.Files If f.Name <> WScript.ScriptName and InStr(f.Name, " ") > 0 Then f.Name = Replace(f.Name, " ", "") End If Next Set gf = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit このオプションを設定すると、変数を使用する前には、必ず「Dim」等によって宣言しなければなりません。 Set so = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしています。 Set gf = so.GetFolder(".") プログラムファイル(「~.vbs」ファイル)の存在しているフォルダを取得しています。 For Each f In gf.Files プログラムファイルの存在するフォルダ内のすべてのファイルを1つずつ処理します。 If f.Name <> WScript.ScriptName and InStr(f.Name, " ") > 0 Then ファイル名がプログラムファイル自身または、ファイル名にスペースが含まれていない場合は、実行しません。 f.Name = Replace(f.Name, " ", "") ファイル名からスペースを削除し、ファイル名に入れ直しています。 End If Next を繰り返しています。 Set gf = Nothing Set so = Nothing MsgBox("Finished!") 最後に「Finished!」と表示しています。

その他の回答 (4)

回答No.4

済みません。訂正です。 【誤】 >【バッチファイルのあるフォルダとその中の子フォルダの中のデータ】 を処理してくれます。(試してないですが孫フォルダも対象になります) ↓↓ 【正】 子や孫フォルダはスペース除去対象にはなりません。 ファイル名途中や例のファイル名末尾のスペース除去は確認してあります。 zzzzzzzzzz PS 【注意】 ファイル名のリネームでもし同じファイル名となる場合、最初の一つだけ処理します。 既にあった場合は処理されません。 (バッチ上、それなりのエラーメッセージが出ていますが消してあります) それとファイルが多い場合、処理にそれなりに時間が掛かかるかもしれません。

回答No.3

バッチファイルでスペースを抜くことは可能です。 但し、回答2さんのように同じフォルダに結果的に同じ名前になる可能性のある場合のエラー処理は考慮していません。 ←スペースが抜けることは確認しましたが、同じファイル名となる物がない場合のみです。 その場合どうなるか不明、試していません。 以下の======内をメモ帳にコピーして名前で拡張子まで含めて、例えば RenameFile.bat など、"<ファイル名>.bat"として操作したいフォルダに「文字コードANSI」で作成します。 そして、そのバッチ、ファイルクリックすれば 【バッチファイルのあるフォルダとその中の子フォルダの中のデータ】 を処理してくれます。(試してないですが孫フォルダも対象になります) メモ帳のtxtファイルで作成して拡張子をtxtからbatに替えてもOKです。 バッチファイルが歯車のアイコンになります。 開くとき、修正等の場合は右クリックで「編集」 私のPCで確認しましたが、全ての条件、環境で問題が無いかは分かりませんので自己責任で実行するか否か決めてください。 デバッグも必要かもしれませんので多少のデータを(D:)等にコピーしてそこで試してみてください。 多分コピ&貼り付け可能です。 ======ここから :--------------------------------------------------- loop.bat echo off for /F "delims=" %%f in ('dir /b') do call :sub "%%f" exit /b :sub set fname=%~1 set n=0 :loop call set c=%%fname:~%n%,1%% set /a n=n+1 if "%c%"=="" goto :EOF if "%c%"==" " goto break0 if "%c%"==" " goto break1 goto loop rem 半角スペース処理 :break0 call set newname=%%fname: =%% if "%newname%"=="" goto :EOF if "%newname:~0,1%"=="." goto :EOF ren "%fname%" "%newname%" goto :EOF rem 全角スペース処理 :break1 call set newname=%%fname: =%% if "%newname%"=="" goto :EOF if "%newname:~0,1%"=="." goto :EOF ren "%fname%" "%newname%" goto :EOF ====ここまで 参考にしたサイト ファイル名を特定の文字までを削除したい(ファイル名の先頭から最初に見つかった特定の文字までを削除する) ↓↓

参考URL:
http://d.hatena.ne.jp/jak-san/20090305/1236256670
回答No.2

>ソフトを使わずプログラムなどでは出来ないんでしょうか? vbスクリプトを自作して、そのvbsを実行(クリック)して、全ファイルをリネームする事は可能です。 ですが、そういうvbスクリプトを「ここで紹介する」のは、文字数的に不可能です。ご自分で研究を重ね、ご自分で自作するしかありません。 また「プログラムにバグがあって、Windowsが起動しなくなるなどの重大な不具合が出たり、ファイルが失われるなどの不具合があっても、責任は取れない」ので、やはり「自作するしか無い」です。 なお、プログラムを作るなら『「1234 .jpg」と「1234 .jpg」と「1234.jpg」が、1つの場所に同時に存在した場合』を想定しないといけません。 既存の「1234.jpg」が存在する場所では「1234 .jpgを1234.jpgにリネーム」は出来ませんし、「1234 .jpgを1234.jpgにリネーム」は出来ません。

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.1

「vbsファイルをダブルクリックすると」とゆうのが何のことか分かりませんが、指定したフォルダ下の全ファイル名を一括変更するアプリケーションソフトがあるので、それで可能ですよ。 色々あるので好きなものを選べば良いですよ。

参考URL:
http://www.vector.co.jp/vpack/filearea/winnt/util/file/name
infoda
質問者

補足

ソフトを使わずプログラムなどでは出来ないんでしょうか?