実現したいこと
bat処理(Windows)において下記data.txt内に記載されているcsvファイル名を、最後のスラッシュ以降(123や456のように)を取り出して変数に格納・比較し、最大値の取り出しを行いたいです。
発生している問題・分からないこと
for文中にループで処理を行い、/が発生した時点ループを抜け出しfor文の中にbreakしたいのです。
しかし調べてみたところ、for文中には:breakのようなラベルは記述できないようで、どのようにしたらfor文中に抜けることができるかわからない状態です。
処理としては
C:Desktop/test/123
C:Desktop/test/12
C:Desktop/test/1
C:Desktop/test/
のように後ろから削り、/まで来たらループを抜け出すように処理をしています。
該当のソースコード
bat
1set MAX="" 2set len="" 3for /f "delims=" %%A in (data.txt) do ( 4 set File="%%A" 5 :loop 6 if "!File:~-1,1!"=="/"(goto break) 7 set len=!File:~-1,1!!len! 8 set File=!Flie:~0,1! 9 goto :loop 10 :break 11 12 if !len! gtr !MAX! (set MAX="len") 13)
data.txt
1C:Desktop/test/123 2C:Desktop/test/456 3C:Desktop/789
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
:loopを使用せずにifやforでも試みたのですが、どうしても/(スラッシュ)が発生した時点で処理を抜けようと思うと、:breakのようなラベルを使用しなければなりませんでした。
補足
処理自体はbat処理で行いたいのですが、上記コード以外の処理の仕方でも問題ありません。
つたない文章で申し訳ありませんが、有識者の方々にご教授いただきたいです。
> 最大値の取り出しを行いたい
PowerShell でもよいのであれば以下の様になります。
$max = (Get-Content data.txt | %{ [int]($_ -split '/')[-1] } | Measure-Object -Maximum).Maximum
Write-Host $max
回答1件
あなたの回答
tips
プレビュー