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

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

ただいまの
回答率

91.34%

  • Windows 7

    287questions

    Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

  • バッチファイル

    132questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

バッチ処理でフォルダ内の数値でつけられたファイル名を番号順に出力をしたい

解決済

回答 4

投稿 2017/11/20 13:31 ・編集 2017/11/21 10:08

  • 評価
  • クリップ 1
  • VIEW 99

harrier

score 6

バッチ処理を用いて,対象フォルダにあるファイル一覧を順に配列へと格納したいと考えています。
対象フォルダには0.jpg~50.jpgまでの画像があり、それらの画像の名前をバッチ処理で配列へと格納したいと考えています。
現在考えた方法として直接的にやるやり方が見つかりませんでしたので、一度dirコードを使用しテキストファイルへ書き出して、配列への格納を行おうと考えていましたが、テキストファイルへの書き出し時に,

0.jpg
1.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
2.jpg
20.jpg

といった風に書き出しがおこなわれてしまいます.ここで数字の順番どおりに書き出しを行うのはどのようにやればよいのでしょうか?
dir 対象フォルダ名>書き出し先ファイル
という単純な構成で今回の結果となってしまいましたが,ほかの方法をご存知の方がいらしたらお教えいただけるとありがたいです。
よろしくお願いします

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • KojiDoi

    2017/11/20 13:54

    「配列」の意味が分かりません。バッチファイルにそのような概念はないと思いますし、perlやCやその他の言語でいう配列を扱いたいなら、それぞれの言語仕様に基づいた対応を行わなければなりません。最終的にどうしたいのでしょうか?

    キャンセル

  • ttyp03

    2017/11/20 15:24

    タイトルと質問内容があっていません。タイトルの修正をお願いします。

    キャンセル

  • harrier

    2017/11/21 10:07

    KojiDoi様 擬似的に配列をと思ったのですが、少しタイトルと質問の内容が異なっている様でしたので編集をしておきました

    キャンセル

  • harrier

    2017/11/21 10:07

    ttyp03様 的確なご指摘ありがとうございます。変更をしておきます

    キャンセル

回答 4

checkベストアンサー

+4

ファイル名は文字であって数値ではないのでそのような順番になってしまいます

考え方を変えて0~50までの数値順にファイル名を生成してヒットしたものを出力する方法でいかがでしょう?

for /L %%N in (0,1,50) do dir /b %%N.jpg >> list.txt

投稿 2017/11/20 13:51

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/11/21 10:05

    返信が遅くなり申し訳ありません。
    もっともシンプルであり実用性が高そうでしたのでtakitoさんのご回答をベストアンサーにさせていただきました

    皆様も貴重なご意見ありがとうございます

    キャンセル

+3

こういったのを考えるのが、無駄に好きだったり。。。
参考までに別解を。
やっていることは、gitya107さんのファイル名を補完するというのをバッチ内でやっています。

setlocal enabledelayedexpansion
for %%a in (*.jpg) do (
    REM ファイル名を0埋め
    set num=0000000000%%a
    REM 後ろから14文字分を切り取り
    set num=!num:~-14!
    REM $数字という変数にファイル名を格納
    set $!num!=%%a
)

REM `set $0`で$0始まりの変数が列挙されるので、順に出力
echo -----
set $0
echo -----

for /f "tokens=1,* delims==" %%a in ('set $0') do echo %%b

以下、出力例

cmd>dir /b *.jpg
img_10.jpg
img_1024.jpg
img_11.jpg
img_12.jpg
img_13.jpg
img_14.jpg
img_15.jpg
img_16.jpg
img_17.jpg
img_18.jpg
img_19.jpg
img_20.jpg
img_21.jpg
img_22.jpg
img_23.jpg
img_24.jpg
img_25.jpg
img_256.jpg
img_26.jpg
img_27.jpg
img_28.jpg
img_29.jpg
img_32.jpg
img_4.jpg
img_5.jpg
img_512.jpg
img_6.jpg
img_64.jpg
img_7.jpg
img_8.jpg
img_9.jpg

cmd> a.bat
-----
$0000000004.jpg=4.jpg
$0000000005.jpg=5.jpg
$0000000006.jpg=6.jpg
$0000000007.jpg=7.jpg
$0000000008.jpg=8.jpg
$0000000009.jpg=9.jpg
$0000000010.jpg=10.jpg
$0000000011.jpg=11.jpg
$0000000012.jpg=12.jpg
$0000000013.jpg=13.jpg
$0000000014.jpg=14.jpg
$0000000015.jpg=15.jpg
$0000000016.jpg=16.jpg
$0000000017.jpg=17.jpg
$0000000018.jpg=18.jpg
$0000000019.jpg=19.jpg
$0000000020.jpg=20.jpg
$0000000021.jpg=21.jpg
$0000000022.jpg=22.jpg
$0000000023.jpg=23.jpg
$0000000024.jpg=24.jpg
$0000000025.jpg=25.jpg
$0000000026.jpg=26.jpg
$0000000027.jpg=27.jpg
$0000000028.jpg=28.jpg
$0000000029.jpg=29.jpg
$0000000032.jpg=32.jpg
$0000000064.jpg=64.jpg
$0000000256.jpg=256.jpg
$0000000512.jpg=512.jpg
$0000001024.jpg=1024.jpg
-----
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
20.jpg
21.jpg
22.jpg
23.jpg
24.jpg
25.jpg
26.jpg
27.jpg
28.jpg
29.jpg
32.jpg
64.jpg
256.jpg
512.jpg
1024.jpg

投稿 2017/11/20 22:58

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

[ファイル名に関するところについて]
仕様上並び順がそうなるのは正しいです。00,01・・・・09,10とファイル名を「0(ゼロ)」で補間すれば意図している並び順になります。3桁であれば000,001・・・999という感じです。

投稿 2017/11/20 14:04

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/11/20 14:50

    低評価の理由がわかりませんが、0を先頭に補うことで狙い通りのソート順にし、最後に付け足した0を削除する手順は方法のひとつとしてよいと思います

    キャンセル

  • 2017/11/20 14:55

    質問者さまはゼロサプレスなファイル名に対して解決したいと言っているのだから、そこの前提を変えたら意味がないと思いますけどね。
    ただtakitoさんは更に一歩踏み込んで、ソート後に0を削除すると言っているので、そこまで書いてあればマイナス評価はなかったんじゃないでしょうか。

    キャンセル

  • 2017/11/20 15:01

    現在のファイル名が記述されているだけであり、変更できる/できないに言及していないのでそういう手もありかなと思って記述しました。実際の現場においても仕様調整すればいい話ですし、そんなに固くなってもしょうがないかなって思っています。

    また、ファイル名に関する部分についてのみ記述させてもらったので、片手落ち感は否めないです。
    よって低評価がついてもしょうがないと思ってます。
    takitoさんフォローありがとうございます。

    キャンセル

+1

takitoさんの回答がシンプルで良いと思いますが、他に実現方法がないか探ってみました。
無理やり感はありますし、桁が増えたら追加しないといけないですが、dirとfindstrを組み合わせて一応実現はできましたので、参考までに載せておきます。

dir /b | findstr "\<.\.jpg\>" | sort > list.txt & dir /b | findstr "\<..\.jpg\>" | sort >> list.txt & dir /b | findstr "\<...\.jpg\>" | sort >> list.txt

REM 以下は行を分けただけです
dir /b | findstr "\<.\.jpg\>" | sort > list.txt & ^
dir /b | findstr "\<..\.jpg\>" | sort >> list.txt & ^
dir /b | findstr "\<...\.jpg\>" | sort >> list.txt

投稿 2017/11/20 14:52

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

ただいまの回答率

91.34%

関連した質問

同じタグがついた質問を見る

  • Windows 7

    287questions

    Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

  • バッチファイル

    132questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。