バッチファイルで次の行が機能するのはなぜですか?
for %%a in ("C:\Test\*.txt") do set FileName=%%~a
echo Filename is: %FileName%
しかし、これらはしませんか?:
for %%a in ("C:\Test\*.txt") do (
set FileName=%%~a
echo Filename is: %FileName%
)
「a」変数が2行目まで保持されないようです。なぜこれなのか、2番目の例のように「a」の内容をどのように使用するのですか?
これは、括弧内のすべてが1行としてロードされるためです。したがって、%FileName%
は、(実行時に)設定される前に(ロード時に)拡張されます。 2番目の形式を使用する必要がある場合は、遅延拡張を有効にする必要があります。ファイル名に!
が含まれていると、問題が発生します。これは、ファイル名に括弧がなければ機能します。
setlocal enabledelayedexpansion
for %%a in ("C:\Test\*.txt") do (
set FileName=%%~a
echo Filename is: !FileName!
)