String 批处理脚本问题,扩展延迟,字符串中出现感叹号
我有一个以下格式的文件。每行记录三个值,用|分隔。我已经编写了一个批处理脚本来验证每行中是否有3条记录,并报告是否有任何不良记录(少于或多于3个值) 值11 |值12 |值13 |String 批处理脚本问题,扩展延迟,字符串中出现感叹号,string,batch-file,delay,expansion,String,Batch File,Delay,Expansion,我有一个以下格式的文件。每行记录三个值,用|分隔。我已经编写了一个批处理脚本来验证每行中是否有3条记录,并报告是否有任何不良记录(少于或多于3个值) 值11 |值12 |值13 | 值21 |值22 |值23 | 价值31 |价值32 |价值33| PSUEDO代码: 对于文件中的每一行,执行 (1) 将行读取到变量。 (2) 写入临时文件并获取文件长度。 (3) 将|从线路上移除。 (4) 将此修改行写入临时文件并获取文件长度。 (5) 两个计算长度之间的差值给出值count 代码: 问题:
值21 |值22 |值23 |
价值31 |价值32 |价值33| PSUEDO代码: 对于文件中的每一行,执行
(1) 将行读取到变量。
(2) 写入临时文件并获取文件长度。
(3) 将|从线路上移除。
(4) 将此修改行写入临时文件并获取文件长度。
(5) 两个计算长度之间的差值给出值count 代码: 问题: 问题来了,当有!在文件中,并设置DelayedExpansion。两人之间的角色!当它们设置为变量时将被截断。为了解决这个问题,我设置了endlocal,然后再次设置DelayedExpansion。有了这个变化,问题就来了!已解析,但在“endlocal”语句之后,“endlocal”之前定义的变量不再可用 更改代码:
.
.
for /f "delims=" %%m in (!file_name!) do (
endlocal & set current_line=%%m
setlocal EnableDelayedExpansion
echo.!current_line!>temp_file
.
.
如果有人能帮忙,我将不胜感激!!
注意:实际文件包含数百条记录。您可以在开始时使用
setlocal
而不是endlocal
for /f "delims=" %%m in (!file_name!) do (
setlocal DisableDelayedExpansion
set "current_line=%%m"
setlocal EnableDelayedExpansion
echo(!current_line!>temp_file
...
endlocal
endlocal
)
但当一行以开头时,即使这样也会失败代码>和空行也被删除
对于完整的解决方案,您可以阅读切换delayedexpansion仅在循环中的特定次数下有效。一旦达到最大计数,切换就不起作用。切换可以无限工作,但重要的是添加相同数量的endlocal
for /f "delims=" %%m in (!file_name!) do (
setlocal DisableDelayedExpansion
set "current_line=%%m"
setlocal EnableDelayedExpansion
echo(!current_line!>temp_file
...
endlocal
endlocal
)