Batch file 批处理:从带有冒号和感叹号的文件中读取一行

Batch file 批处理:从带有冒号和感叹号的文件中读取一行,batch-file,colon,Batch File,Colon,我试图从包含冒号和感叹号的文件中读取一行。当我回显这行时,它只显示冒号后面的所有内容。我需要保持enabledelayedexpansion,以便在do循环中执行更高级的代码。但现在我只想正确地回应。 任何帮助都将不胜感激 文件会这样说: !!12345 APX: 6.32 我试过的代码是: setlocal EnableDelayedExpansion cd C:\Users\jwagh\Desktop\ for /f "usebackq delims=" %%a in (test.txt)

我试图从包含冒号和感叹号的文件中读取一行。当我回显这行时,它只显示冒号后面的所有内容。我需要保持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设置为整行,减去初始
(显然,假设只有一个已知长度的
-序列,并且它总是在前面)


可能禁用delayedexpansion是唯一可行的解决方案,但根据您的数据,请将
delims
设置为
%%a设置为整行,减去初始
(显然,假设只有一个已知长度的
-序列,并且它总是在前面)


唯一的防弹解决方案是在扩展
%%a
时禁用,并仅在实际需要时启用。例如,类似这样的内容:

setlocal DisableDelayedExpansion
对于/F“usebackq delims=“%%a in(%File%)do(
设置“项=%%a”
setlocal EnableDelayedExpansion
回音(!项目:,-1!
端部
)
由于由/块创建的本地化环境在嵌套方面受到限制,因此还需要将
endlocal
放入一个循环中。请注意,在
endlocal
之后,自最新的
setlocal
以来的所有环境更改都将丢失


但是现在有一些完全不同的东西(与问题的主题相关):
由于
usebackq
选项,我假设
%File%
包含一个带引号的文件路径/名称。
我建议不要使用以下语法在变量值中包含引号:

set“File=D:\Data\File.ext”&rem/(特别注意开头引号的位置)

参考以了解为什么这样做更好。

唯一的防弹解决方案是在扩展
%%a
时禁用,并仅在实际需要时启用。例如,类似以下内容:

setlocal DisableDelayedExpansion
对于/F“usebackq delims=“%%a in(%File%)do(
设置“项=%%a”
setlocal EnableDelayedExpansion
回音(!项目:,-1!
端部
)
由于由/块创建的本地化环境在嵌套方面受到限制,因此还需要将
endlocal
放入一个循环中。请注意,在
endlocal
之后,自最新的
setlocal
以来的所有环境更改都将丢失


但是现在有一些完全不同的东西(与问题的主题相关):
由于
usebackq
选项,我假设
%File%
包含一个带引号的文件路径/名称。
我建议不要使用以下语法在变量值中包含引号:

set“File=D:\Data\File.ext”&rem/(特别注意开头引号的位置)

参考以了解为什么这更好。

在扩展
%%a时禁用延迟扩展,并仅在您真正需要时启用它…我尝试在do循环中重新启用它,但它不起作用。“它不起作用”不是一个非常精确的描述,是吗?也许你应该发布更多的代码,这样可能会更容易帮助你。一般来说,你需要考虑
setlocal
/
endlocal
的环境本地化,并且你需要知道这些块的嵌套级别是有限的,因此你需要在当你有一个
setlocal
时循环…这是因为你需要在你的
DO
中禁用延迟扩展。不要用评论中提供的建议编辑你的问题。你最近的编辑不再给出你在文本中描述的症状。在扩展
%a
期间禁用延迟扩展,并在只有当你真的需要它时…我尝试在do循环中重新启用它,但它不起作用。“它不起作用”不是一个非常精确的描述,是吗?也许你应该发布更多的代码,这样可能会更容易帮助你。一般来说,你需要考虑
setlocal
/
endlocal
的环境本地化,并且你需要知道这些块的嵌套级别是有限的,因此你需要在当你有一个
setlocal
时循环…那是因为你需要在你的
DO
中禁用延迟扩展。不要用评论中提供的建议编辑你的问题。你最近的编辑不再给出你在文本中描述的症状。这就是我最后所做的。谢谢!这就是我最后所做的。谢谢你欧点!
for /f "usebackq delims=!" %%a in (%FamilyFile%) DO echo ^^!%%a