Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何找到具有特定字符串的变量?_Batch File - Fatal编程技术网

Batch file 如何找到具有特定字符串的变量?

Batch file 如何找到具有特定字符串的变量?,batch-file,Batch File,我想创建一个脚本,用于检查特定字符串中以“var”开头的所有变量。下面的代码中有三个变量,我希望它找到字符串code,并输出包含它的变量的名称 set var1=hi set var2=code set var3=bye :: variable checker here echo Variable %variable% has the string 'code' in it. 在上面的例子中,输出应该是var2,但是我一点也不知道如何检查字符串的变量。下面是我的注释,作为一个答案,用Rem

我想创建一个脚本,用于检查特定字符串中以“var”开头的所有变量。下面的代码中有三个变量,我希望它找到字符串
code
,并输出包含它的变量的名称

set var1=hi
set var2=code
set var3=bye

:: variable checker here

echo Variable %variable% has the string 'code' in it.

在上面的例子中,输出应该是
var2
,但是我一点也不知道如何检查字符串的变量。

下面是我的注释,作为一个答案,用
Rem
ark来说明它是如何工作的:

@Echo关闭
Rem取消定义名称以Var开头的任何变量
对于/F“Delims=”('Set Var 2^>NUL')中的%%A,请执行设置“%%A=”
Rem定义一些名称以Var开头的新变量
设置“Var1=Some string”
设置“Var2=代码字符串”
设置“Var3=另一个包含代码的字符串”
设置“Var4=345678”
Rem显示名称以Var开头的所有变量及其值
设置变量2>NUL
Rem检查名称以Var开头且值中包含字符串“code”的任何变量
对于('Set Var 2^>num^ | Find“code”')中的/F“Delims==”%%A,Do Echo变量%%A中包含字符串“code”。
Rem暂停脚本以查看输出
暂停
当然,在搜索所需字符串时,可以使用
/I
选项和
Find
忽略大小写

如果要查看值大小写是否与
code
不敏感地匹配,可以将
的第二个
循环更改为:

For/F“Tokens=1*Delims==”%A In('Set Var 2^>NUL')如果/I“%%B”==“code”Echo变量%%A具有字符串值“code”,则执行该操作。

假设变量应包含任何形式的
code
,这是非常简单的:

@echo off
for /f "tokens=1,* delims==" %%i in ('set ^|findstr "code" ^|findstr "var"') do echo %%i has code in it as %%j
或者,如果案例不重要:

@echo off
for /f "tokens=1,* delims==" %%i in ('set ^|findstr /i "code" ^|findstr /i "var"') do echo %%i has code in it as %%j
您可以使用查找具有特定值的变量:

2>numset变量| findstr/X/I/C:[^=][^=][^=]*=code”
要处理结果,请使用:

for/F“令牌=1*delims==eol==”%%V in('
2^>nul set VAR^| findstr/X/I/C:“[^=][^=][^=]*=code”
“)do echo变量%%V设置为%%W。
如果要进行区分大小写的比较,请删除
/I

如果不希望整个值匹配,请将
/X
替换为
/B
以匹配开头,或替换为
/E
以匹配结尾,或删除
/X
以匹配任何位置


如果一个值以(an)
=
开头,则在输出中会缺少符号。

这能帮助您吗,
@For/F“Delims==”%%a in('Set var 2^>num^/I“code”')Do@Echo变量%%a中有字符串“code”。