バッチファイルを今日学び始めた者です。
C:/Users/user/Downloads/
直下のすべてのファイルを取得し、一つづつ表示する際に、進捗を付け加えたいと思っているのですが、うまくいきません。
以下が試したことです。
batch
1@echo off 2chcp 65001 3cls 4setlocal enabledelayedexpansion 5set default=C:\Users\user\Downloads\ 6cd !default! 7dir /a:-d /b *.*>files.txt 8set filecount=0 9for /f %%a in (!default!files.txt) do ( 10 set /a filecount+=1 11) 12echo "!filecount!個のファイルが見つかりました。" 13echo "ファイルを表示します。" 14set count=1 15for /f "delims=" %%a in (!default!files.txt) do ( 16 set /a percent=!count! / !filecount! * 100 17 echo "!count!/!filecount! (!percent!%%): %%a" 18 set /a count+=1 19) 20del !default!files.txt 21pause
自分が考えていることです。
2行目: chcp 65001
- 文字コードをUTF-8に設定。
4行目: setlocal enabledelayedexpansion
- よく分からないが、これを宣言しないと、変数を宣言した後、変数を使おうと思っても使えないことがある。
5行目: set default=C:\Users\user\Downloads\
- 頻繁にコードで使用するため変数に格納。
6行目: cd !default!
- Downloadsディレクトリに移動。
7行目: dir /a:-d /b *.*>files.txt
- Downloadsディレクトリ直下のすべてのファイルの名前を一時的にfiles.txtに保存する。/a:-dはファイルのみ取得、/bはファイル名のみ取得。
8-11行目: for /f %%a in (!default!files.txt) do ()
- files.txtの行数をカウント。これでファイル数がわかる。files.txtを一行ずつ読み込み、それに伴いfilecountを1づつ増やす。/fはおそらくファイル読み込み。
15行目: for /f "delims=" %%a in (!default!files.txt) do ()
- files.txtを一行ずつ読み込む。"delims="は区切り文字をなくすためのもの。
16行目: set /a percent=!count! / !filecount! * 100
- 現在のインデックスからファイル数を割り、100を掛けた進捗。原因はおそらくここ。
17行目: echo "!count!/!filecount! (!percent!%%): %%a"
- "インデックス/ファイル数 (進捗%): ファイル名"を表示する。
20行目: del !default!files.txt
- files.txtを削除。
出力
text
1"10個のファイルが見つかりました。" 2"ファイルを表示します。" 3"1/10 (0%): test1.txt" 4"2/10 (0%): test2.txt" 5"3/10 (0%): test3.txt" 6"4/10 (0%): test4.txt" 7"5/10 (0%): test5.txt" 8"6/10 (0%): test6.txt" 9"7/10 (0%): test7.txt" 10"8/10 (0%): test8.txt" 11"9/10 (0%): test9.txt" 12"10/10 (100%): test10.txt"
このように、進捗をうまく表示できません。考えられることとしては、計算式が間違っているか、setコマンドで割り算をすると少数が切り捨てられるのでうまく計算できないのどちらかです。
こちらを以下のようにするにはコードをどのように変えればよろしいのでしょうか?
text
1"10個のファイルが見つかりました。" 2"ファイルを表示します。" 3"1/10 (10%): test1.txt" 4"2/10 (20%): test2.txt" 5"3/10 (30%): test3.txt" 6"4/10 (40%): test4.txt" 7"5/10 (50%): test5.txt" 8"6/10 (60%): test6.txt" 9"7/10 (70%): test7.txt" 10"8/10 (80%): test8.txt" 11"9/10 (90%): test9.txt" 12"10/10 (100%): test10.txt"
また、echo "ファイルを表示します。"
の二重引用符を外すと
txt
1'�示します。' is not recognized as an internal or external command, 2operable program or batch file.
と表示されるのですがこれを治す方法はありませんか?できれば二重引用符を外して出力したいです。
また、この他に修正したほうがいいところがある場合はご指摘ください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/03 07:40 編集
2023/02/03 09:11 編集
2023/02/03 09:10
2023/02/03 13:21