Batch file 批处理:从带有冒号和感叹号的文件中读取一行
我试图从包含冒号和感叹号的文件中读取一行。当我回显这行时,它只显示冒号后面的所有内容。我需要保持enabledelayedexpansion,以便在do循环中执行更高级的代码。但现在我只想正确地回应。 任何帮助都将不胜感激 文件会这样说: !!12345 APX: 6.32 我试过的代码是: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)
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