我有.bat脚本,它将第一个等号前的值打印到.txt文件中:
.txt文件:
<html>
<head>
</head>
<body>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="325">
<select multiple="" size="10" style="overflow-x:auto; overflow-y:auto; width:320px;">
<option value="a1">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</option>
<option value="b1">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</option>
</select>
</td>
</tr>
</tbody>
</table>
</body>
</html>
.bat脚本:
1986=[TotalItemSize: 793.4 MB (831,989,085 bytes)]=[IssueWarningQuota: 5.039 GB (5,410,652,160 bytes)]
由于.txt文件带有BOM,因此我的值输出始终具有唯一的BOM字符:
@echo off
for /f "tokens=1 delims==" %%I in ('type C:\Users\edwio\Desktop\edwio_Test\mokedbi.txt') do (
echo %%I
)
答案 0 :(得分:0)
我不知道为什么在运行批处理文件时会得到'!1986
输出。
一个UTF-8编码的文本文件,其中EF BB EF
显示为
,代码页为Windows-1252,使用OEM code page 850在控制台窗口中输出´╗┐1986
(西欧代码页根据我的语言和区域设置)。
使用带有BOM FF FE
的UTF-16 Little Endian编码的文本文件会生成输出1986
。如果文本文件使用带有BOM FE FF
的UTF-16 Big Endian进行编码,则输出完全无用,而无需使用命令 chcp 来切换代码页。
但是,这是一个批处理代码,它从第一个等号左边的字符串中删除所有留给第一个数字的字符。
@echo off
setlocal EnableDelayedExpansion
for /f "usebackq tokens=1 delims==" %%I in ("%USERPROFILE%\Desktop\edwio_Test\mokedbi.txt") do (
call :GetValue "%%I"
if "!Value!" NEQ "" echo !Value!
)
endlocal
rem Exit the batch file.
goto :EOF
:GetValue
set "Value=%~1"
set "Digits=0123456789"
:CheckFirstChar
if "!Digits:%Value:~0,1%=!" NEQ "%Digits%" goto:EOF
set "Value=!Value:~1!"
if "!Value!" == "" goto :EOF
goto CheckFirstChar
子程序GetValue
从值字符串中删除BOM字符。
有关如何检查环境变量Value
的第一个字符是否有效的说明,请参阅How to check a string does not start with a number in batch?。
行set "Value=!Value:~1!"
将当前字符串Value
分配给Value
,但索引0处的字符除外,即除了第一个字符之外的所有字符,绝对不是数字。在命令提示符窗口set /?
中运行并阅读输出帮助以了解此语法。
子例程以goto :EOF
的第一个字符退出,Value
是一个数字,或者如果字符串变为空,如果字符串留给第一个等号,则不包含任何数字。
答案 1 :(得分:0)
执行此操作的简单方法(如果可行)是将BOM的末尾添加到delims
列表。运行type
命令,然后在#1986; 1986&#34;之前将打印出的字符复制到控制台。然后将其粘贴到delims=
行的源代码中。
for /f "tokens=2 delims==┐" %i in (mokedbi.txt) do echo %i
然后将tokens=
更改为2,以便在分隔后获得下一个内容。