Отсутствует "!" строка, когда EnableDelayedExpansion
Когда я включил DelayedExpansion в сценарии, он не отображает строку "!" В имени файла. Например:
оригинал
File01-TEXT!.TxtЭхо
File01-text.txt
Я думаю, это из-за setlocal EnableDelayedExpansion
, но я не могу удалить, потому что мне это нужно.
@echo off
setlocal EnableDelayedExpansion
cd "C:\Files"
for %%a in (*.txt) do (
REM Here's the problem...
echo %%a
set "str=%%a"
set new_str=!str:0,3!
)
echo %new_string%
pause >nul
1 ответ
Решение
В зависимости от реального кода вы можете работать с отключенным отложенным расширением, включить его там, где необходим доступ к измененному контенту, а затем снова отключить.
@echo off
setlocal enableextensions disabledelayedexpansion
cd "C:\Files"
for %%a in (*.txt) do (
set "str=%%a"
rem Option 1
echo file: %%a
setlocal enabledelayedexpansion
echo substring: !str:~0,3!
endlocal
rem Option 2 - capture changed value to use inside non delayed expansion context
setlocal enabledelayedexpansion
for %%b in ("!str:~0,3!") do (
enlocal
echo %%a -- %%~b
)
)