• ベストアンサー

コマンドプロンプト ファイル名変更 

お世話になります。 コマンドプロンプトで”123HOGE.txt”というファイル名に"123-HOGE.txt"という風に123とHOGEの間に"-"を挿入したいのです。 ただこの123は伝票番号で長さが123-99999まで可変なのです。 HOGEは固定なので、"HOGEの前に-を入れろ"というロジックが作りたいのです。 どなたかご教授いただけませんでしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.4

<!--[ANo.3]さんの回答より引用 for文と環境変数を駆使するか --> 駆使してみたよ! [hoge.cmd] Rem @Echo Off For %%i in (*HOGE.txt) Do Call :DO_PROCESS "%%~i" Exit /b 0 :DO_PROCESS Set TARGET=%~1 Set NUMBER=%TARGET:HOGE.txt=% Set CHECK=%NUMBER:~0,1% Rem 10進数以外は無視 If "%CHECK%"=="0" Exit /b 0 Set /a STATUS="%NUMBER%" 2>nul Rem 数値以外は無視 If ERRORLEVEL 1 Exit /b 0 Rem 123 より小さいときは無視 If "%NUMBER%" LSS "123" Exit /b 0 Rem 99999 より大きいときは無視 If "99999" LSS "%NUMBER%" Exit /b 0 Rem ファイル名変更 Ren "%TARGET%" "%NUMBER%-HOGE.txt" Exit /b 0

yakkun2338
質問者

お礼

discriptyさん、早速のご連絡ありがとうございました。 ご教授いただきました方法で実現することができました! 本当にありがとうございました。 ただ、1点だけ気になるところがありまして、以下のロジックがあると動作しなかったため、試しに削除しましたところ動作するようになりました。 ちゃんとファイル名には123~99999までの数字を入れているのですが・・。 Rem 数値以外は無視 If ERRORLEVEL 1 Exit /b 0 いずれにしましても、やりたかった事はdscriptyさんのロジックで出来ましたのでこの度は本当にありがとうございました。 ご教授いただきました詳細なロジックにつきましては今後勉強させていただきます。 本当にありがとうございました。

その他の回答 (4)

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.5

簡単なサンプルです。該当ファイル名有無や大文字小文字は考慮していません。 表示される内容が思い通りだったら、後ろから二行目のecho を削除して echo ren %1 %x%   ↓ ren %1 %x% に修正して下さい。実際にリネームされます。 :---------------------------------------------- echo off for /F "delims=" %%f in ('dir /b *log.txt') do call :sub "%%f" pause dir *log.txt exit /b :sub set x=%1 set x=%x:log=-log% echo ren %1 %x% goto :EOF

yakkun2338
質問者

お礼

pita-goraさん、ご連絡ありがとうございました。 少し前にdscriptyさんからご教授いただきました方法で実現できましたが、今回pita-goraさんにご教授いただきました方法でも実現できました! 本当にありがとうございます。 pita-goraさんのロジックを見てあらためて色々な方法があることを勉強させていただきました。 大変勉強になりました。 ありがとうございました。

回答No.3

OSの種類くらい書いた方がいいと思いますが。 基本的に、MS-DOSやWindowsのコマンドプロンプトのRENコマンドは、 ・リネームするファイルの指定に使用したワイルドカードと変更後のファイル名の指定に使用するワイルドカードは連動しない ということになっています。 ren 1234567?.txt ?2345678.txt を実行した場合、12345678.txtが82345678.txtになるわけではありません。最初の指定で?の部分の文字が8でも、変更後の?に使用されるのは元々のファイル名の1文字目である1なので、ファイル名は変わりません。 ren *HOGE.txt *-HOGE.txt とすると、123HOGE.txtはリネームの対象となりますが、*-HOGE.txtの*の部分は、元々のファイル名全体が使用されるので、123HOGE.txt-HOGE.txtになります。 よって、文字を挿入するようなことはできないので、for文と環境変数を駆使するか(できるかどうかまでは検証してません)、VBScriptなど別のテクノロジを使用するしかないでしょう。

yakkun2338
質問者

補足

m-take0220さん、早速のご連絡ありがとうございました。 大変失礼いたしました。 何も当方の環境情報を書かずに質問だけしておりました。 今更ですが私の環境はWindowsXP Pro SP3です。 renについて細かなご説明いただきまして誠にありがとうございます。 こういった場合はrenではダメで、for分などのテクニックが必要なのですね。大変勉強になりました。 ありがとうございました。

回答No.2

これ、マジで聞いています? >コマンドプロンプトで”123HOGE.txt”というファイル名に"123-HOGE.txt" ren ”123HOGE.txt" "123-HOGE.txt" です。

yakkun2338
質問者

補足

lupin-333333さん 早速のご連絡ありがとうございました。 すいません、私コマンドプロンプトと書いてしまいましたがバッチファイルを作成して実行しようと思っておりました。大変申し訳ございません。 ただ"-"を入れるだけならネットで調べて分かったのですが、ファイル名の"123"部分が可変の時にどうやったらいいかが分からなかったのです・・。 ご回答ありがとうございました。 当方、勉強不足で申し訳ありませんでした。

回答No.1

単に ren *HOGE.txt *-HOGE.txt では駄目ですか?

yakkun2338
質問者

補足

Higurashi777さん 早速のご連絡ありがとうございました。 すいません、私コマンドプロンプトと書いてしまいましたがバッチファイルを作成して実行しようと思っておりました。大変申し訳ございません。 早速教えていただきました"ren *HOGE.txt *-HOGE.txt"という記述でバッチファイルを作成して試してみましたが以下の様になってしまいました。 (実施前) 123HOGE.txt ↓ (実施後) 123HOGE.txt-HOGE.txt となってしまいました・・。

関連するQ&A

  • コマンドプロンプトでファイル名に追記

    お世話になります。 コマンドプロンプトでファイル名に追記する方法を教えていただけませんでしょうか。 例えば"A.txt"というファイルがあり、何かの処理が終ったら、"完了-A.txt"といった感じにしたいのですが、可能でしょうか? どなたかご教授いただけますと幸いでございます。

  • コマンドプロンプトで相対パスの取得

    コマンドプロンプトにて、絶対パスから相対パスを取得する方法はございますでしょうか? hoge  ├ hoge2.txt  └ hoge3.txt という階層で、 for %%A in (hoge\*.txt) do ( echo %%A ) と for で回すと、%%Aには絶対パスが入ります。 この%%Aに相対パス(hoge\hoge2.txt)を格納する方法、もしくは%%Aから相対パスを抜き出す方法が知りたいのです。 VBなど別プログラムを起動させずに、あくまでもコマンドプロンプト上での方法がありましたら、どうかご教授下さいませ。

  • コマンドプロンプトについて

    またまたこのことについて、お世話になります。 Cドライブに入っているあるファイル(file.txt)をMOに保存するのに、 コマンドプロンプトからコマンドを打って、 保存させることは出来るのでしょうか? もしできるのでしたら、そのやり方を教えて頂けないでしょうか? どうか宜しくお願いします。

  • コマンドプロンプトでのファイル操作について

    コマンドプロンプトでのファイル操作について、ご存知のかたどうか教えてください。 a.txt b.txtという2つのファイルがあるとします。 <a.txtの内容> 1111 2222 3333 <b.txtの内容> aaaa bbbb cccc 上記の2つのファイルを読み取りc.txtというファイルへ以下のように 出力したいのですが、コマンドプロンプト(batでも問題ありません) にてできるのでしょうか? <c.txtの内容> 1111,aaaa 2222,bbbb 3333,cccc ご教授のほど、宜しくお願いします。

  • コマンドプロンプト標準出力とファイル出力両方

    お世話になってます コマンドプロンプトで echo "こんにちは" とするとプロンプトに こんにちは と書き込まれます。 echo "こんにちは" >> file.txt とするとfile.txtに こんにちは と書き込まれます。 では、1行で プロンプトとfile.txtの両方に こんにちは と書き込むことは出来ますか? file.txtは上書きではなく、追記で行いたく思ってます。 よろしくお願いします。

  • コマンドプロンプトについて

    コマンドプロンプトについてご教授ください。 自分の端末上のCドライブ直下に『copytest』フォルダを作成し、そのフォルダ内に『abc.txt』を作成しようとしていますが、一度に作成できるのでしょうか?

  • コマンドプロンプトでファイル名一括変更

    コマンドプロンプトのrenコマンドでフォルダ内の同一拡張子のファイル名の拡張子を一括変更することはできますが、 (例 ren *.txt *.htm ) 拡張子以外の共通部分を拡張子を含む形で一括変更することはできませんか? たとえば拡張子のないd01という文字列で終わるファイル名を一括してd01の部分を消して拡張子を.jpgにしたいのです。

  • 【コマンドプロンプト】リストファイルを読む方法

    この度はお世話になります。 コマンドプロンプトを使用し、フォルダ名が 多数書かれているtxt(リストファイル.txt)を読み込み、 リストに載っている物に対して特定の処理 (フォルダ名を小文字に変更)を行おうと考えております。 -リストファイル.txt- AAAA BBBB CCCC ---------------- まず、リストファイルを読み込んで一番初めに 書かれているAAAAフォルダの名前を変更し、 続いてフォルダBBBBの名前を変更するなどの 処理を行いたいのですが、 どのように記述を行えば教えていただけませんでしょうか

  • コマンドプロンプトでテキストの引き算をする方法

    コマンドプロンプトで2つのテキストファイルの引き算をする方法があれば、ご教授いただきたいです。 A.TXT --- 11111 22222 33333 44444 B.TXT --- 33333 11111 55555 A.TXTからB.TXTを引き算して、 --- 11111 44444 を出力したいです。 エクセル上でなんとかならなくもないのですが、1万件単位で何度もチェックをする予定のため、コマンドプロンプトからコマンド一発でできる方法はないかと思い、質問させていただきました。 よろしくお願い致します。

  • コマンドプロンプトで

    コマンドプロンプトで dir > list.txt と書いたbatファイルを作成し実行すると、中にあるフォルダ・ファイルの一覧ができますが、中にあるフォルダ名のフォルダ・ファイル名までは取得することができません。 一番下フォルダのファイル名まで取得する方法はありますでしょうか? よろしくお願いします。

専門家に質問してみよう