Batch file 如果FOR循环中的字符串比较失败

Batch file 如果FOR循环中的字符串比较失败,batch-file,cmd,windows-7-x64,Batch File,Cmd,Windows 7 X64,我一直在尝试遵循我在这里和其他页面上找到的一些示例,但我无法使IF正常工作 我想做的是: 有一个文件名为SIS134F160107.txt。它有带数字的数据记录。 我需要将以09开头的行(仅限)复制到另一个可以命名为output.txt或其他任何文件的文件中 我的代码如下: @echo on setlocal enableDelayedExpansion set "Comp=09" FOR /F %%# IN (SIS134F160107.txt) DO ( Call Set "Line

我一直在尝试遵循我在这里和其他页面上找到的一些示例,但我无法使IF正常工作

我想做的是:

有一个文件名为
SIS134F160107.txt
。它有带数字的数据记录。
我需要将以09开头的行(仅限)复制到另一个可以命名为
output.txt
或其他任何文件的文件中

我的代码如下:

@echo on
setlocal enableDelayedExpansion
set "Comp=09"
FOR /F %%# IN (SIS134F160107.txt) DO (
    Call Set "Line=%%#"
    Call Echo %%Line%%
    Call Set "Token=%%Line%%"
    Call Echo %%Token%%
    Call Set "T=%%Token:~0,2%%"
    Call Echo %%T%%
    Call Echo %%Comp%%
    if %%T%%==%Comp% (call Echo Imprimir .%Comp%. .%%T%%.)
PAUSE
)
其结果是IF从未打印过任何信息,但如果我打印了IF的not语句,则我得到:

C:\....\Batch>setlocal enableDelayedExpansion
C:\....\Batch>set "Comp=09"
C:\....\Batch>FOR /F %# IN (SIS134F160107.txt)
DO (
Call Set "Line=%#"
 Call Echo %Line%
 Call Set "Token=%Line%"
 Call Echo %Token%
 Call Set "T=%Token:~0,2%"
 Call Echo %T%
 Call Echo %Comp%
 if NOT %T% == 09 (call Echo Imprimir .09. .%T%. )
 PAUSE
)

C:\....\Batch>(
Call Set "Line=09Linea01"
 Call Echo %Line%
 Call Set "Token=%Line%"
 Call Echo %Token%
 Call Set "T=%Token:~0,2%"
 Call Echo %T%
 Call Echo %Comp%
 if NOT %T% == 09 (call Echo Imprimir .09. .%T%. )
 PAUSE
)
09Linea01
09Linea01
09
09
Imprimir .09. .09.
Press any key to continue . . .

C:\....\Batch>(
Call Set "Line=88Linea01"
 Call Echo %Line%
 Call Set "Token=%Line%"
 Call Echo %Token%
 Call Set "T=%Token:~0,2%"
 Call Echo %T%
 Call Echo %Comp%
 if NOT %T% == 09 (call Echo Imprimir .09. .%T%. )
 PAUSE
)
88Linea01
88Linea01
88
09
Imprimir .09. .88.
Press any key to continue . . .
一些回声信号得到09,而一些没有。所以我不明白为什么即使字符串“相等”,IF也不起作用

我也尝试过使用EQU,但没有用


我的代码中的错误在哪里导致字符串比较无法按我的预期工作?

对于初学者。。。09中的前导0使其假定数字为八进制。09不是合法的八进制数。进行字符串比较,而不是算术比较。更改所有出现的

if NOT %T% == 09


由于您已调用了
delayedexpansion
,因此无需
调用echo…
<代码>回声!排队
回声!代币也同样有效<代码>%var%
提取
var
的“解析时”值!瓦尔通过运行更改的当前值”值

将被解释为

如果“%T%”=comp的原始值

因此,除非
comp
包含文本值
%T%
,否则结果将为假;因此,事实并非如此

使用


它将
T
当前值与
comp
原始值进行比较。您可以修复代码,但有更好的方法。这正是FINDSTR设计用来解决的问题类型

使用简单的正则表达式搜索,解决方案将变成一个简单的单行程序:

findstr "^09" "SIS134F160107.txt" >output.txt
或者使用字符串文字搜索的这一行

findstr /b /c:"09" "SIS134F160107.txt" >output.txt

要仅获取以09开头的行,可以使用以下命令:
findstr/B“09”SIS134F160107.txt>anotherFile.txt
it's午后在我的位置您好,我使用了这个比较,IF语句起作用了。谢谢你的帮助!这是真的,我试着比较,它说这是一个八进制数,因此无效。我回到代码中,使用“%comp%”值进行比较,而不是直接使用09。天哪!这是我第一次使用这种编码,我不知道我可以像那样使用findstr!!!!它在我的test_批处理中起作用了,现在我必须从预定义的格式中获取路径和文件名,这样就可以完成了。谢谢你的帮助,所有的帮助!
if "!T!"=="%comp%" ....
findstr "^09" "SIS134F160107.txt" >output.txt
findstr /b /c:"09" "SIS134F160107.txt" >output.txt