String 带令牌或delim的Findstr/g

String 带令牌或delim的Findstr/g,string,batch-file,token,delimiter,findstr,String,Batch File,Token,Delimiter,Findstr,假设我们有两个文件 First.txt 123 456 和Second.txt 789;123 123;def 482;xaq 我需要的是在第二个文件中找到只包含第一列中第一个文件的条目的行(标记1,delim;)。 这就是我需要的: Output.txt 123;def 当然, findstr /g:first.txt second.txt 将输出两行: 789;123 123;def 知道如何混合findstr和for/f以获得所需的输出吗? 谢谢大家! 是CSV的一般形式。批%A

假设我们有两个文件

First.txt

123
456
和Second.txt

789;123
123;def
482;xaq
我需要的是在第二个文件中找到只包含第一列中第一个文件的条目的行(标记1,delim;)。 这就是我需要的:

Output.txt

123;def
当然,

findstr /g:first.txt second.txt
将输出两行:

789;123
123;def
知道如何混合findstr和for/f以获得所需的输出吗?
谢谢大家!

是CSV的一般形式。批%A中的注释变为%%A

for /f "delims=," %A in (csv.txt) do findstr /c:"%A" file2.txt
这是输出

C:\Users\User>for /f "delims=," %A in (csv.txt) do findstr /c:"%A" csv1.txt

C:\Users\User>findstr /c:"55" csv1.txt
55,61,hi there, Good

C:\Users\User>findstr /c:"60" csv1.txt
54,60,hi there, Bad

C:\Users\User>findstr /c:"Bad" csv1.txt
54,63,hi there, Bad
54,60,hi there, Bad

C:\Users\User>findstr /c:"55" csv1.txt
55,61,hi there, Good
两个文件的内容

55,60
60,60
Bad,60
55,60


是CSV的一般形式。批%A中的注释变为%%A

for /f "delims=," %A in (csv.txt) do findstr /c:"%A" file2.txt
这是输出

C:\Users\User>for /f "delims=," %A in (csv.txt) do findstr /c:"%A" csv1.txt

C:\Users\User>findstr /c:"55" csv1.txt
55,61,hi there, Good

C:\Users\User>findstr /c:"60" csv1.txt
54,60,hi there, Bad

C:\Users\User>findstr /c:"Bad" csv1.txt
54,63,hi there, Bad
54,60,hi there, Bad

C:\Users\User>findstr /c:"55" csv1.txt
55,61,hi there, Good
两个文件的内容

55,60
60,60
Bad,60
55,60


您可以利用
findstr
的超级有限的正则表达式功能,将first.txt的每一行与second.txt的每一行的开头进行比较

@echo off
for /F %%A in (first.txt) do findstr /R /C:"^%%A;" second.txt

/R
标志意味着搜索字符串应被视为正则表达式。搜索字符串中的
^
表示
%%A
位于行的最开头。
是一个文字分号,用于防止
123
行拾取
1234;suo dong zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi

@echo off
for /F %%A in (first.txt) do findstr /R /C:"^%%A;" second.txt

/R
标志意味着搜索字符串应被视为正则表达式。搜索字符串中的
^
表示
%%A
位于行的最开头。
是一个文字分号,用于防止
123
行拾取
1234;xiao zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zhi zh

@echo off
for /F %%A in (first.txt) do findstr /R /C:"^%%A;" second.txt
findstr /b /g:first.txt second.txt

但是请注意,如果
first.txt
包含一行
12
,则这将匹配
123;abc
129;pqr
在第二个文件中。

如果第一列中的所有元素长度相同,那么简单的答案是

findstr /b /g:first.txt second.txt

但是请注意,如果
first.txt
包含一行
12
,则这将匹配
123;abc
129;pqr
在第二个文件中。

无需对每个值执行单独的
findstr
,并且为了避免行首部分匹配的问题,您可以尝试

@echo关闭
setlocal enableextensions disabledelayedexpansion
(cmd/q/c)(对于/f“delims=”(first.txt)中的%%a do echo(%%a;)
)| findstr/g://l/b second.txt

它所做的是读取
first.txt
并用分隔符回显每一行。该输出由
findstr
使用
/g:///code>检索,以使用标准输入作为要匹配的元素的源,这些元素将被视为行(
/l
)开头的文本(
/b
)在
second.txt
文件

中,无需对每个值执行单独的
findstr
,为避免行首部分匹配的问题,您可以尝试

@echo关闭
setlocal enableextensions disabledelayedexpansion
(cmd/q/c)(对于/f“delims=”(first.txt)中的%%a do echo(%%a;)
)| findstr/g://l/b second.txt

它所做的是读取
first.txt
并用分隔符回显每一行。该输出由
findstr
使用
/g:///code>检索,以使用标准输入作为要匹配的元素的源,这些元素将被视为行(
/l
)开头的文本(
/b
)在
second.txt
文件中,您可以更明确一些吗?我尝试了您的命令,但得到了相同的输出
789;123
123;def
。谢谢!这些不是CSV文件,只是格式类似。这家伙有分号分隔的值,所以应该是
delims=;
。这是一个示例,供您参考ange以适应。你能更明确一点吗?我尝试了你的命令,但我得到了相同的输出
789;123
123;def
。谢谢!这些不是CSV文件,只是格式相似。这家伙有分号分隔的值,所以应该改为
delims=;
。这是一个适合你的例子。非常好。我不是hink这是我第一次看到
/
/G
选项一起使用!似乎起作用了。但是,在两个文件中精确长度的工作非常好。我想这是我第一次看到
/
/G
选项一起使用!似乎起作用了。但是,在两个文件中精确长度的工作是可以编辑的s^%%A;,以满足我的需要。似乎如预期的那样有效。非常感谢您将其设置为^%%A;,以满足我的需要。似乎如预期的那样有效。非常感谢您的发现。您的解决方案似乎适用于任何长度。正是我所需要的。嗯,很好的发现。您的解决方案似乎适用于任何长度。正是我所需要的