Ответ 1
Это потому, что все между круглыми скобками загружается как одна строка. Таким образом, %FileName%
расширяется (во время загрузки) до его установки (во время выполнения). Если вам нужно использовать второй формат, вам нужно включить отложенное расширение. Тогда вам будет сложно, если имя файла содержит !
. Это будет работать, если в именах файлов нет скобок.
setlocal enabledelayedexpansion
for %%a in ("C:\Test\*.txt") do (
set FileName=%%~a
echo Filename is: !FileName!
)