![リスト内のファイル以外の項目に対してバッチ ファイルがループしない](https://rvso.com/image/1605151/%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E4%BB%A5%E5%A4%96%E3%81%AE%E9%A0%85%E7%9B%AE%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%83%90%E3%83%83%E3%83%81%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E3%83%AB%E3%83%BC%E3%83%97%E3%81%97%E3%81%AA%E3%81%84.png)
Windows 10 を使用した管理者特権のコマンド内で、次のバッチ ファイルを実行します。
@echo off
cls
for /f "tokens=1-6 delims=," %%G in ("3D Objects,Documents,Downloads,Music,Pictures,Videos") do (
echo %%G
)
これら 6 つの項目がすべてリストされることを期待していました。 代わりに、最初の項目 (3D オブジェクト) のみがリストされ、その後停止します。 「トークン」を使用しても大きな違いはないようですし、「デリミット」は思ったように機能していないようです。
質問:FOR
リスト内のカンマ区切りの項目を処理できると考えるのは間違いでしょうか?
答え1
非ファイル リストの場合、次のように示されているため、期待どおりに動作していないと思いますfor /?
。
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] FOR /F ["options"] %variable IN ("string") DO command [command-parameters] FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
これは、、またはのFOR /F
いずれかのハンドルを意味していると思います。これは具体的には実際のファイルを意味していると思います。この場合、非ファイル リストをそこに置くことを意味し、これはおよび が解析または反復処理できない文字列として解釈されます。command
string
file-set
file-set
delims
tokens
解決するには、非ファイルリストを通常ののためにtokens
または を使用せずにループしdelims
、スペースを含む値が二重引用符で囲まれていることを確認します。
@echo off
cls
for %%G in ("3D Objects",Documents,Downloads,Music,Pictures,Videos) do (
echo %%~G
)
すべての値を二重引用符で囲み、~
変数プレースホルダーで [ ] チルダを使用して出力値から二重引用符を解析し、二重引用符のない目的の出力を得ることができます。
@echo off
cls
for %%G in ("3D Objects","Documents","Downloads","Music","Pictures","Videos") do (
echo %%~G
)
出力
3D Objects
Documents
Downloads
Music
Pictures
Videos