• ベストアンサー

バッチの作り方

下記のようなフォルダ構成で1つのフォルダに1つのindex.htmlが入っています。 Aフォルダ―1フォルダ―index.html       2フォルダ―index.html       3フォルダ―index.html       4フォルダ―index.html         ・         ・         ・ (以降、500フォルダあります) このそれぞれのindex.htmlを、フォルダ名についている数字.htmlに変更したいと以前こちらで相談したところ、バッチ化するといいという解凍をいただいたのですが、バッチの作り方がわかりません。 自分で作ったバッチ内には ren 00001 \index.html 00001 \1.html ren 00002 \index.html 00002 \2.html ren 00003 \index.html 00003 \3.html ren 00004 \index.html 00004 \4.html ren 00005 \index.html 00005 \5.html ren 00006 \index.html 00006 \6.html ren 00007 \index.html 00007 \7.html ren 00008 \index.html 00008 \8.html ren 00009 \index.html 00009 \9.html ren 00010 \index.html 00010 \10.html (以後100まで) としたのですが、実行すると「コマンドの設定が間違っています」という文字が黒い画面の中に一瞬見えます。 何か上記の文字の前後に書かないといけない文字があるのでしょうか?

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

  • ベストアンサー
  • yien
  • ベストアンサー率77% (24/31)
回答No.4

#2&3です。補足頂きありがとうございました。 htmlのファイル名に0000がついてもよかったのですね。 取り敢えず安心しました。 さて追記質問の件ですが、Xフォルダから更に深い場所にあるフォルダ名を取得して処理する場合、forコマンドには基準以下の各サブディレクトリの全てに対して実行させる/rオプションがあります。 これを使って、 for /d /r %%i in (*) do ren %%i\index.html %%i.html とすればよさそうですが、ここでちょっと問題があります。 実行させるrenコマンドは、第2引数(この場合は変換後のファイル名)にドライブ名・パス名を付加してはならないという約束があります。 /rを使うと自動的に第2引数にもパス名が付加されてしまい、狙ったパスの指定内容としては正しいのですが、構文誤りとなって処理出来ないのです。 これはrenコマンド側の仕様ですので回避出来ません。 そこで、cdコマンドで一旦階層を下げて、同時に「&」を使って先程のバッチの内容を同時実行させてしまいましょう。 Xフォルダ直下に次の一行の内容のバッチファイルを作って実行して下さい。 仮にcdrenidx.batとします。 for /d /r %%i in (*) do cd %%i & for /d %%i in (*) do ren %%i\index.html %%i.html この内容は、前述の内容の前にforコマンドでcd(チェンジディレクトリ) を繰り返す内容をつけただけですが、&を使ってcdと同時にrenを行います。 自分でもデイレクトリ数をかなり絞って試してみましたが、これでうまく出来ました。 長文となり見苦しい解説となってしまいすみませんでした。 上手く変換できる事を期待しております。

rolly1224
質問者

お礼

ご回答ありがとうございます。 いろいろ試して出来なかったのに、すんなり希望通りに出来ました。 本当に助かりました。 ありがとうございます!

その他の回答 (3)

  • yien
  • ベストアンサー率77% (24/31)
回答No.3

#2です。度々失礼します。 #1さんの回答を見て気付きましたが、Aフォルダ下位のフォルダ名は00001~ですか?それとも、ただの1~ですか? 00001~だとすると、求めているファイル名が0000の付かないただの1.htmlにしたい場合だったら自分の方法だと駄目です。 フォルダと同期しますので、00001.htmlになってしまいます。 フォルダ名と同期しても良い場合だけお使い下さい。 大変失礼しましたm(_ _)m

rolly1224
質問者

補足

ご回答ありがとうございます。 Aフォルダ下位のフォルダ名は00001です。 希望通りの結果が得られました。 ありがとうございます。 こういう階層のフォルダが10個あるので一括で変換するには、1つのフォルダにまとめて一括で出来ないかなと思ったのですが、そういうことは出来ないでしょうか? Xフォルダ―Aフォルダ―1フォルダ―index.html                 2フォルダ―index.html                 3フォルダ―index.html                 4フォルダ―index.html                 (以降、500フォルダあります)      ―Bフォルダ―1フォルダ―index.html                 2フォルダ―index.html                 3フォルダ―index.html                 4フォルダ―index.html                 (以降、500フォルダあります)      ―Cフォルダ―1フォルダ―index.html                 2フォルダ―index.html                 3フォルダ―index.html                 4フォルダ―index.html                 (以降、500フォルダあります)      (以降、Kフォルダまであります) といったフォルダ構成にした場合、Xフォルダ直下に教えていただいたバッチを置いてたたけば、全部のA~Kフォルダ内が変換されるようになるには、 教えていただいた for /d %%i in (*) do ren %%i\index.html %%i.html ではうまくいかないのですが何か書き換えないといけないのでしょうか?

  • yien
  • ベストアンサー率77% (24/31)
回答No.2

質問例の場合ですと、Aフォルダ内にメモ帳などでバッチファイルを作成して下さい。 仮にrenindex.batとします。中身は次の1行のみです。 for /d %%i in (*) do ren %%i\index.html %%i.html これでフォルダ名を取得して、フォルダのあるだけ繰り返し処理を実行します。 もしバッチファイルでなく、コマンドラインから直接処理をしたい場合は、Aフォルダ内に移動してから、%%iでなく%iで記述して実行してください。

  • riveron77
  • ベストアンサー率48% (180/370)
回答No.1

C:\A_Folder    |-00001    |  |-index.html    |    |-00002    |  |-index.html …という状態だとして↓こうでは? (△は半角スペース) ren△C:\A_Folder\00001\index.html△1.html△>△C:\Result\Result.txt ren△C:\A_Folder\00002\index.html△2.html△>>△C:\Result\Result.txt (中略) ren△C:\A_Folder\00500\index.html△500.html△>>△C:\Result\Result.txt exit > 自分で作ったバッチ内には > ren 00001 \index.html 00001 \1.html 例えば「00001」と「\index.html」の間に半角スペースが入ってますが… 「00001」と「\1.html」の間も同様… またコマンドプロンプトを表示すると↓こんな表示になっている恐れがあるので Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\(ユーザー名)> 「C:\A_Folder\00001\」という感じでパスも入れてます。 ※ご存知だったら申し訳ありません(汗) >△C:\Result\Result.txt と >>△C:\Result\Result.txt は「C:\Result\Result.txt」に結果を出力します。 おまけだと思ってくださいませ。 勘違いとかしてたら申し訳ないですが…

rolly1224
質問者

お礼

ご回答ありがとうございました。 半角入っていました・・・。 Resultの方法も知らなかったので勉強になりました。 ありがとうございます。

関連するQ&A