windows 在for循环内使用变量

woobm2wo  于 2023-01-31  发布在  Windows
关注(0)|答案(2)|浏览(149)

这个想法是我想检查一个子字符串是否在一个字符串内与批处理脚本。
例如,我想检查pass是否在%rev%的内部,如果没有相关的for循环,我可以这样做:

if /I "%rev:pass=%" neq "%rev%" (
echo String has pass
) else (
echo it doesnt has pass
)

但是当"%rev%"%%g替换时,我不知道如何在for循环中使用这个"%rev:pass=%"
我的代码在这里:

FOR /F "tokens=*" %%g IN (test.txt) do (
if /I "%%g:pass=" neq "%%g" (
echo String has pass
) else (
echo it doesnt has pass
)
)

我需要检查这个test.txt中的每个字符串是否有子字符串pass
我试图改变%%g的形式,但仍然无法实现。主要思想是检查文件中的每个字符串,如果字符串有pass作为子字符串

scyqe7ek

scyqe7ek1#

你不能直接操作for循环变量,所以你需要先将它们存储在常规变量中。然而,由于你通常不能在集合中设置和使用变量,你需要启用延迟扩展。这可以通过在脚本顶部添加setlocal enabledelayedexpansion来实现。

@echo off
setlocal enabledelayedexpansion

FOR /F "tokens=*" %%g IN (test.txt) do (
    set "line=%%g"
    if /I "!line:pass=!" neq "%%g" (
        echo String has pass
    ) else (
        echo it doesnt has pass
    )
)
2lpgd968

2lpgd9682#

试试这个。如果大小写是UPPER或Lower,它将匹配。它通过字符串替换和前后比较来工作。还提供了一个运行的命中计数。漂亮。

setlocal EnableDelayedExpansion
FOR /F "delims= tokens=*" %%g IN (test.txt) do (
set "str1=%%g"
set "str2=!str1:pass=replace!"
if not !str1!==!str2! set /a i+=1 & echo YES - FOUND !i!)

哦,另外,另一个答案是错的。两个值永远不会相等。试试看。

相关问题