プロが教える店舗&オフィスのセキュリティ対策術

下記のようなフォルダ構成で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まで)
としたのですが、実行すると「コマンドの設定が間違っています」という文字が黒い画面の中に一瞬見えます。
何か上記の文字の前後に書かないといけない文字があるのでしょうか?

A 回答 (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を行います。
自分でもデイレクトリ数をかなり絞って試してみましたが、これでうまく出来ました。

長文となり見苦しい解説となってしまいすみませんでした。
上手く変換できる事を期待しております。
    • good
    • 0
この回答へのお礼

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

本当に助かりました。
ありがとうございます!

お礼日時:2009/05/30 19:24

#2です。

度々失礼します。

#1さんの回答を見て気付きましたが、Aフォルダ下位のフォルダ名は00001~ですか?それとも、ただの1~ですか?

00001~だとすると、求めているファイル名が0000の付かないただの1.htmlにしたい場合だったら自分の方法だと駄目です。
フォルダと同期しますので、00001.htmlになってしまいます。
フォルダ名と同期しても良い場合だけお使い下さい。
大変失礼しましたm(_ _)m

この回答への補足

ご回答ありがとうございます。
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
ではうまくいかないのですが何か書き換えないといけないのでしょうか?

補足日時:2009/05/30 00:19
    • good
    • 0

質問例の場合ですと、Aフォルダ内にメモ帳などでバッチファイルを作成して下さい。


仮にrenindex.batとします。中身は次の1行のみです。

for /d %%i in (*) do ren %%i\index.html %%i.html

これでフォルダ名を取得して、フォルダのあるだけ繰り返し処理を実行します。

もしバッチファイルでなく、コマンドラインから直接処理をしたい場合は、Aフォルダ内に移動してから、%%iでなく%iで記述して実行してください。
    • good
    • 0

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」に結果を出力します。
おまけだと思ってくださいませ。

勘違いとかしてたら申し訳ないですが…
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/30 00:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!