批处理:从包含冒号和感叹号的文件中读取一行
Batch: Reading in a line from a file that has a colon and exclamation
我正在尝试从包含冒号和感叹号的文件中读取一行。当我回显该行时,它只显示冒号后的所有内容。我需要保留 enabledelayedexpansion 以获得我将在 do 循环中执行的更高级代码。但现在我只想正确回应。
如有任何帮助,我们将不胜感激!
文件会这样写:
! 12345 APX:
6.32
我试过的代码是:
setlocal EnableDelayedExpansion
cd C:\Users\jwagh\Desktop\
for /f "usebackq delims=" %%a in (test.txt) DO (
setlocal DisableDelayedExpansion
echo %%a
set line=%%a
set example=%line:~0,-1%
echo %example%
)
可能禁用 delayedexpansion 是唯一可行的解决方案,但根据您的数据,将 delims
设置为 !
会将 %%a
设置为整行,减去初始的 [=12] =](假设显然只有一个 !
-已知长度的序列,并且它总是领先于行)
或
for /f "usebackq delims=!" %%a in (%FamilyFile%) DO echo ^^!%%a
唯一的防弹解决方案是在 %%a
扩展期间禁用 delayed expansion,并仅在实际需要时才启用它。例如,像这样:
setlocal DisableDelayedExpansion
for /F "usebackq delims=" %%a in (%File%) do (
set "Item=%%a"
setlocal EnableDelayedExpansion
echo(!Item:,-1!
endlocal
)
由于 setlocal
/endlocal
块创建的本地化环境在嵌套方面受到限制,因此您还需要将 endlocal
放入循环中。考虑到 endlocal
之后,自最近 setlocal
以来的所有环境变化都丢失了。
但现在完全不同的东西(与问题的revision 3相关):
由于 usebackq
选项,我假设 %File%
持有一个引用文件 path/name。
我建议不要在变量值中包含引号,使用以下语法:
set "File=D:\Data\file.ext" & rem // (particularly note the position of the opening quote)
参考 了解为什么这样更好。
我正在尝试从包含冒号和感叹号的文件中读取一行。当我回显该行时,它只显示冒号后的所有内容。我需要保留 enabledelayedexpansion 以获得我将在 do 循环中执行的更高级代码。但现在我只想正确回应。 如有任何帮助,我们将不胜感激!
文件会这样写:
! 12345 APX: 6.32
我试过的代码是:
setlocal EnableDelayedExpansion
cd C:\Users\jwagh\Desktop\
for /f "usebackq delims=" %%a in (test.txt) DO (
setlocal DisableDelayedExpansion
echo %%a
set line=%%a
set example=%line:~0,-1%
echo %example%
)
可能禁用 delayedexpansion 是唯一可行的解决方案,但根据您的数据,将 delims
设置为 !
会将 %%a
设置为整行,减去初始的 [=12] =](假设显然只有一个 !
-已知长度的序列,并且它总是领先于行)
或
for /f "usebackq delims=!" %%a in (%FamilyFile%) DO echo ^^!%%a
唯一的防弹解决方案是在 %%a
扩展期间禁用 delayed expansion,并仅在实际需要时才启用它。例如,像这样:
setlocal DisableDelayedExpansion
for /F "usebackq delims=" %%a in (%File%) do (
set "Item=%%a"
setlocal EnableDelayedExpansion
echo(!Item:,-1!
endlocal
)
由于 setlocal
/endlocal
块创建的本地化环境在嵌套方面受到限制,因此您还需要将 endlocal
放入循环中。考虑到 endlocal
之后,自最近 setlocal
以来的所有环境变化都丢失了。
但现在完全不同的东西(与问题的revision 3相关):
由于 usebackq
选项,我假设 %File%
持有一个引用文件 path/name。
我建议不要在变量值中包含引号,使用以下语法:
set "File=D:\Data\file.ext" & rem // (particularly note the position of the opening quote)
参考