質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.65%

batもしくはVBSでファイルの連番を除去する方法を教えてください

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,509

chrokurojp

score 24

以下はとある記事で見かけたbatファイルで
指定のフォルダ以下のファイルすべてに
"[]"付きの連番をファイル先頭に
付与してくれるのですが、

逆に今度は付けた"[]"付きの連番を
削除するbatに改修したいと思っているですが
「正規表現」を使えばいいのかなとは
推測しているのですが、具体的に
どうしたらいいのかわからないので
教えてください。

修正前
[0001]pict_A.jpg
[0002]thum_D.jpg
        ・
        ・
        ・
[0111]thum_D99.jpg

修正後
pict_A.jpg
thum_D.jpg
        ・
        ・
        ・
thum_D99.jpg

@echo off
setlocal enabledelayedexpansion

pushd ..

set rootDi=%cd%
popd


for /f "usebackq delims=" %%f in (`dir /b /a-d`) do (

set /a cnt+=1
set use=0000!cnt!
set use="["!use:~-4!"]"
set fileName=%%f
set newFileName=!use!!fileName!
echo 対象 : !fileName! 
echo リネーム後 : !newFileName!
ren "!fileName!" "!newFileName!"
echo --------------------------
)

)
echo fin

pause

exit
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Ken.sakanakana

    2016/01/15 00:36

    修正前のファイル名と、修正後のファイル名を記載頂くとより的確な回答がでると思います。連番を取るだけですとファイル名が重複してしまいそうです。
    複数のファイルを一つに固めるだけなら、copy /b *sourcefile destfile で一つにまとめられます。

    キャンセル

  • chrokurojp

    2016/01/15 00:49

    アドバイスありがとうございます。修正例を追記しました

    キャンセル

回答 1

checkベストアンサー

0

同じ感じで書くとこんなですね(括弧を1つ余計なので取りました)。
先頭に付加されているのが固定長なので、「7文字目以降を取る」というのも有りだと思います。

@echo off
setlocal enabledelayedexpansion

pushd ..
set rootDi=%cd%
popd

for /f "usebackq delims=" %%f in (`dir /b /a-d`) do (
  set fileName=%%f
  set newFileName=!fileName:*]=!
  echo 対象 : !fileName! 
  echo リネーム後 : !newFileName!
  ren "!fileName!" "!newFileName!"
  echo --------------------------
)
echo fin
pause
exit

追記:拡張子BATの時は処理対象外にする。

@echo off
setlocal enabledelayedexpansion

pushd ..
set rootDi=%cd%
popd

for /f "usebackq delims=" %%f in (`dir /b /a-d`) do (
  if /i "%%~xf" neq ".BAT" (
    set fileName=%%f
    set newFileName=!fileName:*]=!
    echo 対象 : !fileName! 
    echo リネーム後 : !newFileName!
    ren "!fileName!" "!newFileName!"
    echo --------------------------
  )
)
echo fin
pause
exit

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/15 00:59

    ありがとございます。

    実現できました!!!

    ついでに下記のような拡張子が「.bat」のファイルを
    対象外とするにはどうしたらいいのか差し出がましいのですが
    教えてくれませんか

    for /f "usebackq delims=" %%f in (`dir /b /a-d`) do (
    の直後に if文でファイル名文字列に「bat」があれば
    スキップするみたいな流れまでしかイメージできていなくて
    どう書けばいいのかがわかりません

    【SCRIPT】_rename_renban.bat

    キャンセル

  • 2016/01/27 20:42

    追記しておきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.65%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる