• ベストアンサー

バッチの作り方

下記のようなフォルダ構成で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

  • バッチにすると動作しない

    コマンドプロンプト初心者です。 仕事でファイルの名前を一括変換する為にバッチを作成したいのですが、 コマンドプロンプトでは動作するのに、bat形式のファイルに保存して実行すると、一瞬だけ窓が開いてすぐ終了してしまいます。 変換はもちろんされておりません。 フォルダの構成は下記の通りです。 フォルダ ┣フォルダA    ┣p001-a01_01.jpg    ┣p002-b01_01.jpg    ┗p003-c01_01.jpg ┣フォルダB    ┣p001-a01_01.jpg    ┣p002-b01_01.jpg    ┗p003-c01_01.jpg ┗フォルダC フォルダ内にある001-a01_01.jpgの【_01】を消して001-a01.jpgという風にしたいのですが、 cd C:\Data for /r /d %i in (*) do ren %%i\p???-a01_01.jpg p???-a01.jpg for /r /d %i in (*) do ren %%i\p???-b01_01.jpg p???-b01.jpg for /r /d %i in (*) do ren %%i\p???-b01_01.jpg p???-c01.jpg 上記のコマンドをメモ帳に書いて、コマンドプロンプトで実行したところ、ファイル名の変換はされました。 しかし、そのメモ帳をbat形式で保存をして実行をすると、冒頭で書いたように実行されません。 書き方など、自分なりに調べて試してみたのですが、やはり変換されません。 コマンドプロンプトで実行する時と、バッチで実行する時では書き方が違うのでしょうか? よろしければ知恵を貸していただきたく思います。

  • バッチ(bat)の作り方を教えてください

    今、特定フォルダ内にあるファイル3つが存在すればコマンドを実行し、無ければ4時までループさせるといったことをバッチでしたいと考えております。 イメージは以下の通りです。 D:\a.txt,D:\b.txt,D:\c.txt バッチを1時から動かして、上記3つが揃えば、そこからコマンドを実行しバッチは終了 もしなければ10分置きにファイルをチェックし、4時を過ぎればバッチを終了(コマンドを実行させない)ということをしたいです。 コマンドは何でも良いので例えば「echo HELLO」とでもしておきます。 よろしくお願いいたします。

  • バッチファイルがデスクトップからしか開けない

    調べてもちょっとわからないのでお聞きします。 作成したバッチファイルをデスクトップに保存した場合は開けるのに、普通のフォルダに保存して エクスプローラーから開こうとすると開けません。一瞬コマンドプロンプトの画面が出て、速攻で消えてしまい、結局実行されていません。たとえば chrome.bat(ファイル名) start chrome と保存した場合、デスクトップからはちゃんとchromeが起動するのにエクスプローラーからだとできません。 なぜでしょうか。一瞬コマンドプロンプトのウィンドウが出てすぐ消えてしまいます。 原因がわかる人がいたら回答をお願いします。

  • バッチえファイルを編集するには??

    こんばんは。 初めて掲載します。 バッチファイルで、複数のあるファイルの中身の特定の文字列を一括編集したと思っているのですが、どのようにコマンドを組めばいいのでしょうか? コマンド、バッチは初めてなのでどのように組めばいいのか是非ともご教授願います。 例として、バッチを実行すると、 C:\temp\の下にtest1.xmlとtest2.xmlがあります。 バッチファイルを実行すると、その2つのファイルの中身のある特定の文字を編集("AAA"という文字列を"BBB"に)して保存する。 というような処理を行いたいです。

  • バッチファイルで同じフォルダ名がある場合

    バッチファイルで下記のように実行後にフォルダ名を指定して フォルダを作成したいのですが既に同じフォルダ名があった場合 同じフィルだがある旨のメッセージを表示するのとそこでバッチファイルを 終了してよいか?というようなバッチファイルを作成したいのですが バッチファイルコマンドプロンプトの知識があまりありません。 どなたか教えてください。 echo off set /p USER_INPUT=フォルダ名を入れてください。: mkdir %USER_INPUT%

  • バッチファイル実行時のプロンプトを非表示にしたい

    WindowsXPでバッチファイルからバッチを実行するとコマンドプロンプトが一瞬表示されバッチが終了すると自動で閉じますが、このプロンプトを表示しないようには出来ないでしょうか? バッチの結果を知らせる必要が無い処理なのであの一瞬出てくるプロンプトが邪魔で…。

  • 複数のフォルダを開くバッチファイルの作成方法

    windows上で、複数のフォルダを一斉に開くバッチファイルを 作りたいのですが、上手い方法が見つかりません。 「explorer "開きたいフォルダのパス"」 このコマンドを記述したバッチファイルを実行すると 指定したフォルダを開く事が出来ますが、 開いたフォルダを閉じるまでバッチファイルに処理が戻らない為 「explorer」コマンド以降の処理が行われません。 この現象に対する対処法、もしくはフォルダ一斉オープンが可能な 別のロジックをご提示頂けないでしょうか。 尚、「windowsのバッチファイルで実現」する事が前提です。 同様の処理が可能なフリーソフト等は必要ありませんので ご了承願います。 以上、よろしくお願い致します。

  • 【バッチファイル】for繰り返しがうまくいかない

    バッチファイルの置いてあるフォルダ内(ついでにサブフォルダ内も)の 特定の拡張子(今回は.txt)ファイル全てを対象に (1)ある行ある列n文字目から2文字を読み込む×2 (2)読み込んだ文字をそのファイル名の先頭に追加 というバッチファイルを作りたいです。 具体例 テキストの中身↓ a.txt ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○xx ○○yy ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... →ファイル名を「xxyya.txt」にしたい そこで素人ながら下記のようなバッチファイルを作成してみましたが、 フォルダ内にある1つ目のファイルに対してはうまく動くのですが 2つ目以降はリネーム出来ません。 フォルダ内すべての.txtファイルに実行するための 対処法がお分かりになれば、ご教授いただけると幸いです。 「rename.bat」 cd /d %~dp0 rem .txtファイルを列挙 for /f "usebackq tokens=*" %%i in (`dir /s /b *.txt`) do ( set name=%%~xni rem 特定の行列の文字列を抜き出して変数へ格納 for /f "skip=5 tokens=2,3" %%a in (%%i) do ( set front=%%a set back=%%b rem 7行目以降は不要なのでforから離脱 goto break ) :break rem 抜き出した文字列からさらに必要な文字を抜き出して変数へ set hed="%front:~2,2%%back:~2,2%" rem 元のファイル名へ追記 ren %name% %hed%%name% )

  • バッチ組むとき楽にパス切りたい

    複雑な操作を(半)自動化したいので、コマンドプロンプトで色々試しながらバッチを組んでいます。 バッチ組んでるといろいろ外部コマンドをネットから拾ってきたりして、ファイルが増えて、見づらくなるので、フォルダ掘って見やすく整理すると今度はパスが通ってないとか言われて、面倒です。 フォルダ構成も最初から完璧に定まるわけもなく、一通り片がつくまでフォルダ名も場所も変わり、パスも状況に応じてその都度切り直さないとならないので、その操作が面倒です。 今はとりあえず関係しそうなフォルダ群のうちの最上位のフォルダからtreeコマンドで一覧を出してパスを通したいフォルダ名をひとつひとつpathコマンドの引数へコピペしてますが正直やってられません。 しかもバッチがバグってるとプロンプトごと固まったりして落とさざるを得なくなるので、当然、環境変数も全部クリアされるので、毎回似たような操作をしてる気がします。 正直うんざりです。 どうしたらもっと楽にできますか。 楽したいから道具を使ってるのです。 強力な回答をお待ちしています。 なお環境はWin7 64ビットです。

  • パスワード付きzipファイルをバッチで解凍

    パスワード付きzipファイルをWindowsXP端末で バッチ(コマンドライン)から解凍する方法は無いでしょうか。 プログラム(c言語かコマンドプロンプトの予定)を実行すると、 ユーザの操作無しにzip解凍して、ファイル処理させたいと思っています。

専門家に質問してみよう