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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 7

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

バッチファイル

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

Q&A

解決済

4回答

3832閲覧

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

harrier

総合スコア14

Windows 7

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

バッチファイル

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

0グッド

1クリップ

投稿2017/11/20 04:31

編集2017/11/21 01:08

バッチ処理を用いて,対象フォルダにあるファイル一覧を順に配列へと格納したいと考えています。
対象フォルダには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 対象フォルダ名>書き出し先ファイル
という単純な構成で今回の結果となってしまいましたが,ほかの方法をご存知の方がいらしたらお教えいただけるとありがたいです。
よろしくお願いします

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2017/11/20 04:54

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

2017/11/20 06:24

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

2017/11/21 01:07

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

2017/11/21 01:07

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

回答4

0

ベストアンサー

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

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

dos

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

投稿2017/11/20 04:51

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harrier

2017/11/21 01:05

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

0

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

BAT

1setlocal enabledelayedexpansion 2for %%a in (*.jpg) do ( 3 REM ファイル名を0埋め 4 set num=0000000000%%a 5 REM 後ろから14文字分を切り取り 6 set num=!num:~-14! 7 REM $数字という変数にファイル名を格納 8 set $!num!=%%a 9) 10 11REM `set $0`で$0始まりの変数が列挙されるので、順に出力 12echo ----- 13set $0 14echo ----- 15 16for /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 13:58

sa-yu

総合スコア201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2017/11/20 05:04

gitya107

総合スコア706

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takito

2017/11/20 05:50

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

2017/11/20 05:55

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

2017/11/20 06:01

現在のファイル名が記述されているだけであり、変更できる/できないに言及していないのでそういう手もありかなと思って記述しました。実際の現場においても仕様調整すればいい話ですし、そんなに固くなってもしょうがないかなって思っています。 また、ファイル名に関する部分についてのみ記述させてもらったので、片手落ち感は否めないです。 よって低評価がついてもしょうがないと思ってます。 takitoさんフォローありがとうございます。
guest

0

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

DOS

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

投稿2017/11/20 05:52

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問