• ベストアンサー
  • 困ってます

フォルダ内のファイル名の末尾7文字を一括置換

フォルダ内のファイル名の末尾7文字を一括置換 こんにちは、VBA初心者です。 D:\test フォルダに test_jp.txt、sample_jp.txt、testsample_jp.txt といった名前のファイルが格納されているとします。 これらのファイル名の「_jp.txt」の部分(末尾7文字の部分)を「_en.txt」に置換したいのですが、うまくいきません。 以下のようなプログラムを書いてみたのですが、どこがいけないのでしょうか。 ※「実行時エラー53 ファイル名が見つかりません。」となります。 ※ VBEのローカルペインによると、エラー時には filename 変数に sample_jp.txt が格納されています。 Sub ファイル名置換() Dim fileName As String fileName = Dir("D:\test\*_ja.txt") Do Until fileName = "" Name "D:\test" & fileName As "D:\test" & Left(fileName, Len(filename) - 7) & "_de.txt" filename = Dir() Loop End Sub

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数501
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1

こんばんは。 ディレクトリとファイル名を区切る「\」が抜け落ちています。 それから言ってることとコードが正しく対応していません。 これで当方では動きました。 いきなりリネームするのではなく、「Debug.Print」などを入れて正しく ファイルをとらえているかどうか、確認するとよいです。 (イミディエイト・ウィンドウに出力されます) Sub ファイル名置換() Dim fileName As String fileName = Dir("D:\test\*_ip.txt") Do Until fileName = "" ' Debug.Print fileName Name "D:\test\" & fileName As "D:\test\" & Left(fileName, Len(fileName) - 7) & "_en.txt" fileName = Dir() Loop End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

早速のご回答ありがとうございます! おっしゃるとおり D:\test の後の \ が抜けていたのが原因でした。 VBAの勉強を始めたばかりなので、うっかりミスなのか、構文に問題があるのか、自分ではなかなか判断がつきません。。。 質問の内容とコードが一致していないのは、「教えて」用にコードを書きなおしたときに間違えてしまいました。 質問するときは、そういうところも気を付けないとマズイですよね。 今後は気をつけます。

関連するQ&A

  • ファイル名の一括置換がIF文のときだけエラーになる

    ファイル名の一括置換がIF文のときだけエラーになる こんにちは。VBA初心者です。 フォームから受け取ったディレクトリ内にあるファイルの名前を一括置換しようとして、以下のようなコードを書いたのですが、「実行時エラー'53' ファイルがありません。」となってしまします(だだし、1つ目のファイルだけは正しくリネームされます)。 フォームから受け取ったパスは使用せず(IF文は使用せず)、例えば、ファイル名の末尾を「_ja.txt」から「_de.txt」と固定的に置換するだけならちゃんと動くのですが、どこがいけないでしょうか。 ※VBEのローカルペインによると、エラー時の「myRename1」には「"D:\export\de\test_ja.txt"」、「myRename2」には「"D:\export\de\acn200_de.txt"」が格納されているので、問題ないように思えるのですが。。。 Sub ファイル名変更(myPath As String) Dim myFilename1 As String Dim myFilename2 As String Dim myRename1 As String Dim myRename2 As String myPath = myPath & "\" myFilename1 = Dir(myPath & "*_ja.txt") If myPath = "D:\export\de\" Then myFilename2 = Replace(myFilename1, "_ja.txt", "_de.txt") ElseIf myPath = "D:\export\en\" Then myFilename2 = Replace(myFilename1, "_ja.txt", "_en.txt") Else myFilename2 = Replace(myFilename1, "_ja.txt", "_fr.txt") End If myRename1 = myPath & myFilename1 myRename2 = myPath & myFilename2   Do While myFilename1 <> "" Name myRename1 As myRename2 Loop End Sub

  • コマンドプロンプトでファイル名に含まれるスペースを別の文字に置換したい

    コマンドプロンプトでファイル名に含まれるスペースを別の文字に置換したい BAT実行や、BATにドロップする程度の操作でファイル名置換したいと思っています。 たとえば、「abcTEST123.txt」というファイルを下記のバッチにドロップすると、 「abctest123.txt」と言うファイル名に置換されます。 for %%A in (*TEST*.txt) do call :sub %%A :sub set A=%1 ren %A% %A:TEST=test% しかし「TEST」をスペースにしてもファイル名の置換はできません。 コマンドプロンプトではスペースは扱えないのでしょうか。 解決策がありましたらご教授願います。

  • excelマクロで特定文字を置換したい

    質問させてください。 excelマクロで特定文字を置換したい思っています。 <sample.txt> 【作業前】 ----------------------------------------- 実行日時     :2006/07/13 15:29:14 作業者アカウント名:sghdfrsgdsz 作業a名   :zsdfgdrfg 作業b名 :zdfgfdzdg 作業c名  :zdgdfgzdg ---------------------------------------- <sample.txt> 【作業後】 ---------------------------------------- 2006/07/13 15:29:14 sghdfrsgdsz zsdfgdrfg zdfgfdzdg zdgdfgzdg ---------------------------------------- 以下のような動作を実現したいと思っています。 1.上記の<sample.txt>をエクセルで開きます。 2.cell(A,1)を選択し、"実行日時     :"を""に置換します。 3.すべての行を置換します。 4.ファイルを閉じます。 ファイルを開くところ OpenFileName = strPath & "\" & Filename & ".txt" 'ファイル名を指定 Workbooks.Open OpenFileName は分かるのですが、セルを選択し、置換するところが分かりません。 どなたか知っていらっしゃる方いらっしゃいましたら教えていただけないでしょうか。 以上、大変お手数ですが宜しくお願い致します。

  • このようなフォルダ名の一括置換をするには?

    次のように、途中の@を空白に置換して末尾に@を付け直す処理です。 "200805@Athletic Meet" → "200805 Athletic Meet@" 私の場合、 dir /b "*@*" > list.txt として、結果をテキストエディタで次のような形式に一括編集。 ren "200805@Athletic Meet" "200805 Athletic Meet@" で、バッチファイルとして実行。 &#65293;&#65293;&#65293;&#65293; もっと簡単な手順はありますでしょうか? ren "*@*" "*@" ・・・これじゃダメですしね。。。。

  • フォルダ内のファイル名取得の仕方が分かりません

    Apache2.0.47、PHP4.3.2で使用しています。 フォルダ内のファイル名の取得を以下のように書いています。 (scandirは使えませんでした) <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } sort($files); print_r($files); ?> "."と".."も取得されるので、以下のように変更したのですが同じ結果でした。 <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { if(filename!=". "){ if(filename!=".. "){ $file[] = $filename; } } } sort($files); print_r($files); ?> "."と".."をはぶいたファイル名だけを取得したい場合にはどうすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 絶対パス名からファイル名を取り出して、変数に格納するバッチ

    DOSコマンドバッチで定義した変数"fullpath"に絶対フルパス名が格納されているとします。 この変数からファイル名だけを抽出して別の変数"filenae"に格納したいのですが方法がわかりません。 1. set fullpath = "C:\test\test.c" 2. ----ここの部分をどのように処理すれば?------ 3. set filename = fullpathから抽出したファイル名 私がやってみた方法として、for文とdir /bを組み合わせてみたのですが for %a in ( dir /b c:\test\test.c ) do set filename =%a 本来dir /bを実行するとファイル名のみが表示されるのに、For文をかますと絶対フルパスでfilenameに値が格納されてしまいます。 dir /b c:\test\test.cの結果を直接filename変数に格納できれば解決するのですが、コマンド結果を変数に格納するにはFor文を使わないとだめなんですよね? なにかよい方法はないでしょうか?

  • viの置換で /を含む文字

    viで、置換を行いたいのですが度忘れしています。 以下のように/スラッシュを含む文字をファイル全体で置換する方法が知りたいです。 以下は当然駄目だと思うのですが・・・ このようにメタ文字は/だけなのでしょうか? :s/c:/test/sample/../g  駄目な例 c:/test/sample を ..に置き換えたいです。 c:/test/sample/data.bat

  • ファイル名からテキスト内文字列の置換

    フォルダ内に tokyo.txt、nagoya.txt、osaka.txt… といったファイル名のテキストファイルがあり そのテキストファイルの中に 地名リンクという文字列があります。 この地名リンクという文字列を各々のファイル名 tokyo.txt、nagoya.txt、osaka.txt…(できれば.txtなしのtokyo,nagoya,osaka) に一括置換したいのですが、何かいい方法はありませんか。

  • 指定文字を含むファイル名の取得

    こんばんは、質問させてください。 今あるディレクトリのファイルを取得しようと考えています。ですが、取得したいファイルはファイル名末尾が"tmp"となったものだけを取得したいと考えています。 $dir = "/home/httpd/test/"; while($fnm[] = readdir($dir)); closedir($dir); sort($fnm); reset($fnm); while($a = each($fnm)){ if(($a[1] != ".") and ($a[1] != "..") and ($a[1] != "")){ $file_data[] = $a[1]; } } ってとこまでしかわからず、欲しくないファイル名まで$file_dataに入ってしまいます。 aaaaa_1111.txt(取得したくない) aaaaa_1111.txt.tmp(取得したい) aaaaa_1111.tmp.txt(取得したくない) 末尾が"tmp"のみ欲しいです。 すみませんが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 一括でファイル名の一部を置換したい

    LinuxのFedora Core 10, シェルにtcshを使用しています。よろしくお願いします。 ======================================================================= 複数のディレクトリ内に、"(from home)"のような文字列を含むファイルがあり、 それらのファイル名から一括で"(from home)"という文字列を取り除きたいのですが ======================================================================= 例えば以下のように、2つのディレクトリ(Directory1,Directory2)の下に、 "(from home)"という文字列を含むファイルが2つずつある場合を考えて、 /Directory1/sample (from home).txt         sample2 (from home).txt /Directory2/ sample3 (from home).txt          sample4 (from home).txt > rename "(from home)" "" `find / -name "(from home)" -print` を試したのですが上手くいかず、 > foreach i (`find / -name "(from home)" print`) foreach? rename "(from home)" "" $i foreach? end でも上手くいきませんでした。 もしかしたらfindコマンドで見つけたファイル名をrenameコマンドに 上手く渡せていないのかと思うのですが、どのようにすれば良いのでしょうか? また別の方法でも、一括でファイル名の一部を変更する方法があれば、 ご教授お願い致します。