Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
Windows FINDSTR查找字符串的文本开始和结束_Windows_Batch File_Cmd_Findstr - Fatal编程技术网

Windows FINDSTR查找字符串的文本开始和结束

Windows FINDSTR查找字符串的文本开始和结束,windows,batch-file,cmd,findstr,Windows,Batch File,Cmd,Findstr,我有字符串photo=“999”price=“10”category=“1”。我只想要10。这意味着我需要输入以price=“开头并以”结尾的字符串 findstr如果成功,则始终返回完整的行。因此,它不是执行此任务的正确工具(实际上,cmd中根本没有任何工具可以这样做) 但是,通过一点逻辑,您可以解决这个问题:从一开始就移除零件,直到(包括)触发字price(一个任务,set命令很乐意执行),然后使用for/f循环处理其余部分,以获得所需的子字符串: set "string=phot

我有字符串
photo=“999”price=“10”category=“1”
。我只想要
10
。这意味着我需要输入以price=“开头并以”结尾的字符串

findstr
如果成功,则始终返回完整的行。因此,它不是执行此任务的正确工具(实际上,
cmd
中根本没有任何工具可以这样做)

但是,通过一点逻辑,您可以解决这个问题:从一开始就移除零件,直到(包括)触发字
price
(一个任务,
set
命令很乐意执行),然后使用
for/f
循环处理其余部分,以获得所需的子字符串:

set "string=photo="999" price="10" category="1""
echo check: %string%
echo debug: %string:*price=%
for /f tokens^=2^ delims^=^" %%a in ("%string:*price=%") do set "ver=%%~a"
echo ver=%ver%
如果您确定字符串的确切格式(在您的示例中,搜索的子字符串是第二个带引号的参数,因此第四个标记在被
”拆分时),那么它将变得非常简单:

for /f tokens^=4^ delims^=^" %%a in ("%string%") do echo ver=%%~a


下面是一个示例,它试图遵循与示例代码类似的方法

它使用
FindStr
来隔离
C:\price.txt
中包含单词
price=”的任何行“
。该行保存为名为
price
的变量,该变量在嵌套的
For
循环的延迟扩展下被拆分,以删除字符串
price
的第一个实例之前的所有内容,在本例中,保留
=“10”category=“1”
。嵌套循环使用双引号字符作为分隔符(应该是您所需的值),进一步拆分该标记,以获取第二个标记

@For/F Delims^=^EOL^=%%G In(''%\uuu AppDir\uuu%findstr.exe/IR“\”C:\price.txt“)Do@(设置“price=%%G”&设置本地启用延迟扩展
对于/F代币^=2^Delims^=^“%%H In(“!price:*price=!”)执行@EndLocal并设置“price=%%H”)
@Echo%%price%%=%price%%暂停
由于我们没有相关文件的代表性样本,因此我们不得不得出结论,要求找到文件中唯一的
price=“anumber”

因此,由于正确框定的
findstr
output将选择这一行,因此我们所需要做的就是处理字符串

这是一种快速而肮脏的方法;它可能适合OP的目的

首先,删除字符串中的引号,因为它们有干扰的习惯

接下来,在字符串处理模式下使用
for/f
,它在括号中的带引号的字符串上发挥作用。该字符串是原始字符串,减去引号,因此替换所有字符,直到“Spaceprice”“不包含任何内容,并获取结果的第一个标记,从而在示例中,
=10
分配给
%%a

然后通过简单地连接两个字符串来执行“set/a somevariablename
=10


请注意,如果文件包含一行,如
。。。pricelastweek=“9”…
则可能需要采取其他措施。

很明显,您需要匹配包含
price=“
的行,因为可能还有其他行

现在还不清楚的是,您是否需要精确匹配
10
,或者只希望它是任意数字

似乎你只是想匹配任何数字并抓住它

这可以通过以下方式轻松完成:

@For/F“Tokens=4 Delims=^=“%%A In('
键入“C:\price.txt”^查找/I“price=”“”)Do@(
设置“Ver=%%~A”&调用设置Ver&Pause)
While is您需要匹配
Price=“10”
,这似乎不太有用,但至少有一个人理解了这个意思,而且您的措辞有点不清楚,所以我要补充一点,这很好:

@For/F“Tokens=4 Delims=^=“%%A In('
键入“C:\price.txt”^ | FIND/I“price=”“10”“”)Do@(
设置“Ver=%%~A”&调用设置Ver&Pause)
请注意,在我在
@
符号中留下的所有示例中,因为我假设这是您很聪明,将
ECHO保留在
上,并且仅在您想要调试正在执行的某些特定操作时删除
@
符号

然而,如果不是这样的话,值得指出的是,在脚本中,通常最容易将
ECHO OFF
放在脚本的开头,而不是在每个语句的开头放一个
@
,以阻止它回声


干杯!:)

您的
查找STR
匹配不正确,因为它试图匹配
C:\price.txt
中以字符串
price=
开头的任何一行,并且很明显您的行以
photo=
开头。即使您要将其更改为
“^photo>=“
,您的第一个令牌
%%A
,将解析为
照片
,您的第二个令牌
%%B
,将解析为
“999”price=“10”category=“1”
。在这种情况下,您需要对
%%B
执行进一步的操作以隔离所需的值。那么
for/F“tokens=4 delims==”(“C:\price.txt”)中的%%A是否执行echo/%%~I
?是否需要查找任何价格?然后使用以下命令:
@For/F“Tokens=4 Delims=^=“%A In('TYPE”C:\price.txt“^ FIND/I“price=”“”)Do@(Set”Ver=%%~A“&Echo price found是“%%~A”
或者你是说当价格等于10时才需要价格?(在我看来不太可能)如果是这样的话:
@For/F“Tokens=4 Delims=^=“%A In('TYPE”C:\price.txt“^;FIND/I“price=”“10”“”“)Do@(设置“Ver=%%~A”)
你的问题标题和内容的措辞有点不清楚你真正需要完成什么。希望这会有帮助!:)Ben,请你说明是哪个“
人理解了这个意思”
需要匹配Price=“10”
”?@compo也许吧!你能保守秘密吗?我不知道,从来没有人委托过我!
for /f tokens^=4^ delims^=^" %%a in ("%string%") do echo ver=%%~a
for /f tokens^=4^ delims^=^" %%a in (file.txt) do echo ver=%%~a
@ECHO OFF
SETLOCAL

set "string=photo="999" price="10" category="1""

:: remove quotes
set "string=%string:"=%"
for /f %%a in ("%string:* price=%") do set /a pricefound%%a
set pri
goto :eof