• 締切済み

バッチファイル ファイル名の変更

お世話になります。 バッチファイル(*.bat)の開発をしています。 現在、 C:temp\20100101\xxx.data1.file.log.dat というパスがあるとして、ファイル名だけに対し、 .(ピリオド)をなくしたいと考えています。 つまり、上記のファイルを、 C:temp\20100101\xxxdata1filelogdat のように置き換えたいと思っています。 .(ピリオド)をブランクに置き換えると C:temp\20100101\xxx data1 file log dat のようになってしまうので、隙間ができないようにしたいです。 実装方法をご教授頂けますでしょうか。

みんなの回答

  • --HV--
  • ベストアンサー率25% (5/20)
回答No.3

testuser>set AAA=X.Y.Z testuser>echo %AAA% X.Y.Z testuser>echo %AAA:.=% XYZ こんな感じ。 環境変数の置換という形で考えたらわかりやすいのではないでしょうか。 置換前ファイル名を一時的に環境変数にセットし、 それを置換したファイル名を、上記手法で作ればよいかと。

curryteam
質問者

お礼

わかりました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • --HV--
  • ベストアンサー率25% (5/20)
回答No.2

文字列操作が大分楽なのでvbsを多用しちゃってますが、、。 実装手順としては、 (1) フルパスから、フォルダ名とファイル名に文字列を分割する   最後の「\」を探して、その前後を取りだすことになるのかな   または、「dir /b <fullpath>でファイル名だけをまず抽出 (2) 下記キーワードで検索すればいろいろ出てきますが、文字列の置換をする。「.」を「」に置換。 「コマンドプロンプト 文字置換」 (3) ren 「(1)で抽出したファイル名」 「(2)で置換したファイル名」 でリネーム これに、あるフォルダ内のデータを丸ごとループにかけたりすれば、きっとやりたいことができるんじゃないでしょうか。

curryteam
質問者

補足

お世話になります。 具体的には、 pushd C:\temp for /f "delims=" %%F in ('dir /s /b /a-d') do ( <文字列置換> ren [置換前][置換後] となると思いますが、 「.」を「」に置換、という箇所はどういう風に実装すればよいでしょうか?サンプルを検索しましたが、よく理解できませんでした。 すいませんが、よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

回答では無いですが、少し複雑になる処理を行う場合はバッチファイルではなく、WHSを活用すると良いですよ。 WSHは言語として、VBScriptやJavaScriptが使われます。 メモ帳で書いてダブルクリックで実行できるので、バッチファイル感覚です。 私は最近、かなり多用しておりますが、質問の内容とかもっと複雑なこともたいていはできるので重宝します。 参考まで。。 http://www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_01.html

curryteam
質問者

お礼

ご回答ありがとうございます。WSHですか、聞いたことはありますが、私はまだ使ったことはありません。本当はこういう仕掛けを作っていく方が理想なんでしょうね。 ただ今回は他のミドルウェアなどの兼ね合いもあるので、バッチファイルで作らざるを得ません。今後の参考にさせて頂こうと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • パスを通すバッチファイルの作り方

    Windowsで、ある処理を行うバッチファイル(.bat)の作り方を 教えてください。 ・機能:システム環境変数 Path に、C:\TestFolderを追加 (パスを通すバッチ) ・変更は再起動後も有効。 ・GUIでの変更方法をわかるので、バッチファイルの記述方法を教えてください。 よろしくお願いします。

  • バッチファイルの組み方について

    パソコンの起動と同時に不要なファイルを自動的に削除したいと思い、バッチファイルを組みたいのですが、分からない点があるのです。 今、 C:\Windows\Temp\*.tmp と C:\Program Files\Trend Micro\Virus Buster 2002\temp\*.tmp の2カ所に存在するtempファイルの削除をバッチファイルを組んで行いたいのです。 一つの時(上段1つの時)は autoexe.batに if exist c:\windows\temp\*.tmp del \windows\temp\*.tmp と命令文を入れて、上手くいっていたのですが、2カ所にある時の組み方が分かりません。 具体的にどの様にすれば、上手くいくでしょうか? if exist C:\Program Files\Trend Micro\Virus Buster 2002\temp\*.tmp del C:\Program Files\Trend Micro\Virus Buster 2002\temp\*.tmp ともう一行実行文を入れた場合は上手くいきませんでした。 ご存じの方、よろしくお願いいたします。

  • バッチファイル 現在のフォルダ名をファイル名に置き換える

    こんにちは。超初心者なのですが教えてください。 ある複数フォルダに格納されている.txtファイルを、現在の フォルダ名を取得して、別フォルダにリネームして 格納するバッチファイルを作成したいと考えています。 for文を繰り返し使わなければいけないことはわかっているのですが、それをどう表現していいのか全然わかりません。 例えば、 データ取得元として以下のファイルがあったら C:\temp\20100101\data1.txt C:\temp\20100101\data2.txt C:\temp\20100101\data3.txt C:\temp\20100102\data1.txt C:\temp\20100102\data2.txt C:\temp\20100103\data1.txt C:\temp\20100103\data2.txt これを別フォルダに、現在のフォルダ名をファイル名にくっつけて 以下のように一つのフォルダに纏めて格納したいと思っています。 ファイルの中身はそのままコピーしたいので、どこかでcopyコマンド を使うかもしれないです。 C:\test\data1_20100101.txt C:\test\data2_20100101.txt C:\test\data3_20100101.txt C:\test\data1_20100102.txt C:\test\data2_20100102.txt C:\test\data1_20100103.txt C:\test\data2_20100103.txt 実装方法として以下までは考えましたが、これ以上は無理そうです。 rem set A=C:\temp rem set B=C:\test for %%A in (C:\temp\) do ( if not "%%A"=="" ( pushd "%%A" for /d %%B in (*) do ( if not "%%B"=="" ( pushd "%%B" for /d %%C in (*) do ( if not "%%C"=="" ( pushd "%%C" ) ) ) ) popd? ) ) 申し訳ありませんが、お助け願います。

  • ディレクトリ名をファイル名するバッチファイル

    ディレクトリ名を取得してその名称でフォルダを作るバッチファイルを考えています。 OSはWINDOWS XPです。 こういったディレクトリがあるとします。 111~444:名称が固定のディレクトリ bbb:名称が可変するディレクトリ mmm.bat、xxx.text:111フォルダと同じところにあるファイル 111┬222─bbb┬333─yyy.text    │        └zzz.text    │    └bbb┬333─yyy.text         └zzz.text mmm.bat xxx.text mmm.batを実行すると、111ディレクトリ以下のフォルダ名を取得し、 下記のようにフォルダを作成し、yyy.textの場所にbatファイルと同じ 所にあるxxx.textをコピーして差し替えるという動作をしたいのです。 (zzz.textは内容は違うが同じファイル名です) 444┬222─bbb┬333─xxx.text    │       └zzz.text    │    └bbb┬333─xxx.text        └zzz.text バッチコマンドで、ディレクトリ名を取得して空のフォルダを作る所までは 下記のようにできたのですが、 444┬222─bbb─333    │    └bbb─333 二つのzzz.textのコピー方法と、yyy.textの場所にxxx.textをコピーするにはbbbという可変するディレクトリを通らなければいけないのでその取得方法がわかりません。 分かる方は是非お教えください。 言葉が足りないところは補足もいたします。 よろしくお願いいたします。

  • Windowsのバッチファイルでcallコマンド時にログを残す方法について

    お世話になっております。 Windowsのバッチファイルについての質問です。 Windowsのバッチファイル内で、さらにバッチファイルをcallコマンドに よって、呼び出しているのですが、その呼び出したバッチファイルの logを残したいのですが、実装方法が分かりません。 # UNIXのscriptコマンドのようなコマンドがあれば実装できると # 考えたのですが、存在していないようです。 callコマンドは、リダイレクトorパイプが使えないらしいので、 以下のような記述だとlogを出力することができません。 call test.bat > test.log ご存知の方がいらっしゃいましたら、ご教示下さい。 以上、よろしくお願いいたします。

  • バッチファイルについて

    ファイルの中身を抽出するバッチを作成しました。 そのバッチファイルを実行し、test.csvというファイル名をつけて出力できたんですが、出力パスも指定することは可能なんでしょうか? find.bat > test.csv

  • DOSバッチでの相対パスの認識

    基本的な質問ですみません。 下記バッチがあるとします。 C:\HOME\BAT\EXP\LIST\DEL.BAT バッチでは下記ディレクトリ内ファイルを削除しようと 考えてます。 C:\HOME\LOG\JOB\JOB.LOG でバッチで「DEL ../../../LOG/JOB/JOB.LOG」と記述しましたが 削除されません。 コマンドプロンプトで「CD ../../../」としても上記「HOME」フォルダに 移動できず絶対パスだと移動できます。 「DEL」「CD」コマンドは相対パスの場合、何かコツがあるのでしょうか?。 それとも単に間違えているのか・・。 アドバイスお願いします。

  • バッチファイルについて

    バッチファイルで複数起動する時に フォルダー名のフルパスが必要ですよね?? 参照 start "" "C:\Documents and aaaa\root\デスクトップ\aaaa\aaaa.bat" これのaaaa.batより以前を自動で拾いたいのですが可能ですか?? また拾ってきて aaaa.batとどうやって引っ付ければ start "" "C:\Documents and aaaa\root\デスクトップ\aaaa\aaaa.bat" ココに指定できますか?? 初心なもので、質問がおかしいと思いますが、宜しくお願います。

  • バッチファイルのログ出力方法

    バッチファイルのログ出力方法 サーバーに置いてあるmdbファイルを各クライアント端末のデスクトップ(複数台)にコピーする バッチファイルを作成しています。 COPY /Y "C:\(コピー元の絶対パス)\コピーファイル.mdb" \コピー先の絶対パス でファイルのコピーができることが確認で見ました。 例えば、正常にコピーができたのか、何らかの理由(PCが落ちていたetc)でコピーができなかったのかを ログで出力したいのですが、どのようにコーディングすればよいでしょうか? ログの出力場所は「.batファイルと同じディレクトリー」にしたいです。 一生懸命調べたのですが… 素人なので分かりませんでした。 皆様宜しくお願いいたします。

  • バッチでファイルの読み込み

    Windowsバッチでファイルの読み込みをしようと思っているのですが、 下記コマンドの実行で「ファイルが見つかりません」となります。 ※パスにスペースを含むのでusebackqを使用しました。 FOR /F "usebackq tokens=1,2 delims= " %%i in ("c:\temp 1\data.txt") DO echo %%i WindowsServer2003でうまくいかなかったのですが、 Xpですれば問題なくファイルを読み込めました。 何か差があるのでしょうか?