不完全
本当は10くらい表示するようにしたいが、全くうまくいかない。
10くらい表示するために、tokensは1-10になっている。
bat_ShowNewOne.batをリストを作成したフォルダに直に置く。batファイル自体の文字コードはANSI。
なお、環境依存文字でも大丈夫なようにUTF-8で出力される。
変数は1文字になる。%FILES%
%FILES
%%FILES
はエラー。
Dirを囲んでいるのはバッククォートだが、そのためには事前にbackq
が入っていないとダメ。クォーテーションではない。
最新とは更新日付ベースになります。
ファイル名には空白が含まれているので、こんなややこしいことになっている可能性があります
@Echo Off
Chcp 65001
Cls
cd %~dp0
FOR /F "usebackq tokens=1-10 delims==" %%i IN (`Dir *.pdf /b /OD`) DO @echo %%i > ThisFolderPdfFileslist.txt
Chcp 932
@Echo On
コマンドラインでも実験できる
この時は変数の前の%%
は%
CLSが入っているので、いらない人は削除してください。
Cls && FOR /F "usebackq tokens=1 delims==" %i IN (`Dir *.pdf /b /Od`) DO @echo %i > ThisFolderPDFFileslist.txt
しかし、以下のように画面に表示させる場合は、いったんすべてのPDFファイルが表示され、最後に1つ表示され、画面では効果が分かりにくい。
FOR /F "usebackq tokens=1 delims==" %i IN (`Dir *.pdf /b /Od`) DO @echo %i
BingのchatGPT
正しいコマンドは以下のようになります。といって出てきたのがこれ。
for /f “Tokens=1-10” %%I IN (‘dir *.txt /b /o-d’) do Echo %%I %%J %%K %%L %%M %%N %%O %%P %%Q %%R
はい間違い@Echo
じゃないとうまくいかない。
txtファイルは無理
なぜなら、最新のファイルが、ファイルリストになるため。
Textファイルのときは最新ではなく、最新の次から10にしなければいけない。
しかし、今のところ、最新1つしか出ないので、リストしか出力されない。
逆に出力ファイル名をタイトルっぽくして、11にしてもいいかもしれない。
という妄想はまず10出てきてからだ。AIはほんと使えないな。
10は出ない
FOR /F "usebackq tokens=1-10 delims==" %%I IN (
Dir *.pdf /b /OD) DO @echo "%%I %%J %%K %%L %%M %%N %%O %%P %%Q %%R"
こういうのも試したが、うまくいかない。
FOR /F "usebackq tokens=1-10 delims==" %I IN (`Dir *.mp4 /b /OD`) DO @echo "%I %J %K %L %M %N %O %P %Q %R"
"ファイル名.mp4 "
結果が空白が含まれている。このため空白が出力されているらしい。(元環境大臣構文)
最大でも最新のファイル一つしか入っていない。Forの説明からすると各変数に入っていくはずだが、
戦いはこれからだ
今のところうまくいっていないのが、このあたりのサブルーチンを使う方法を次は試してみる。
for - Windows バッチ ファイル内の文字列を連結する方法 - 入門サンプル
【Windowsバッチファイル】引数のダブルクォーテーションを削除するサンプル
バッチファイルで変数を使う方法 | そまちょブログ
引数のダブルクォーテーションを削除するサンプル | Windows バッチファイル
windows - バッチファイルで変数を複数行にわけて指定したときのダブルクォーテーションの指定について - スタック・オーバーフロー