Powershell Findstr未返回预期结果

Powershell Findstr未返回预期结果,powershell,batch-file,cmd,Powershell,Batch File,Cmd,您好,我有下面一行代码来列出与单词Hello findstr /s "Hello" .\*.* > C:\MyDir\result.txt 我的文件夹中有多个文件,分别是file1.xml和file2.xml,但是当我执行这个脚本时,它只给了我file1.xml,而不是file2.xml,有人能帮我吗。我的两个文件中的内容都是和 假设您的大小写是正确的,并且您需要区分大小写的匹配(使用/i使匹配不区分大小写),我会怀疑您的第二个文件是Unicode编码的。您可以通过在记事本中打开文件

您好,我有下面一行代码来列出与单词
Hello

findstr /s "Hello" .\*.* > C:\MyDir\result.txt
我的文件夹中有多个文件,分别是
file1.xml
file2.xml
,但是当我执行这个脚本时,它只给了我
file1.xml
,而不是
file2.xml
,有人能帮我吗。我的两个文件中的内容都是


假设您的大小写是正确的,并且您需要区分大小写的匹配(使用
/i
使匹配不区分大小写),我会怀疑您的第二个文件是Unicode编码的。您可以通过在记事本中打开文件并单击“文件”来验证这一点→ SaveAs。。。。“另存为”对话框底部的“编码”下拉列表显示文件的当前编码

不能处理Unicode文件,但可以(Raymond Chen)。但是,
find
不能递归到子文件夹中,因此您需要一个循环

或:


话虽如此,由于您似乎在处理XML文件,您可能希望使用PowerShell而不是CMD命令,这不仅是因为它透明地处理ANSI和Unicode,而且还因为它带有内置的XML解析器

根据你最终想要完成什么,你可以做如下事情

# get full paths for files containing <Hello> nodes
Get-ChildItem -Recurse |
  Where-Object { ([xml](Get-Content $_)).SelectNodes('//Hello') } |
  Select-Object -Expand FullName
#获取包含节点的文件的完整路径
获取子项-递归|
其中对象{([xml](获取内容$)。选择节点('//Hello')}|
选择对象-展开全名

#获取所有节点
Get ChildItem-递归| ForEach对象{
([xml](获取内容$)。选择节点('//Hello')
}

假设您的大小写是正确的,并且需要区分大小写的匹配(使用
/i
使匹配不区分大小写),我会怀疑您的第二个文件是Unicode编码的。您可以通过在记事本中打开文件并单击“文件”来验证这一点→ SaveAs。。。。“另存为”对话框底部的“编码”下拉列表显示文件的当前编码

不能处理Unicode文件,但可以(Raymond Chen)。但是,
find
不能递归到子文件夹中,因此您需要一个循环

或:


话虽如此,由于您似乎在处理XML文件,您可能希望使用PowerShell而不是CMD命令,这不仅是因为它透明地处理ANSI和Unicode,而且还因为它带有内置的XML解析器

根据你最终想要完成什么,你可以做如下事情

# get full paths for files containing <Hello> nodes
Get-ChildItem -Recurse |
  Where-Object { ([xml](Get-Content $_)).SelectNodes('//Hello') } |
  Select-Object -Expand FullName
#获取包含节点的文件的完整路径
获取子项-递归|
其中对象{([xml](获取内容$)。选择节点('//Hello')}|
选择对象-展开全名

#获取所有节点
Get ChildItem-递归| ForEach对象{
([xml](获取内容$)。选择节点('//Hello')
}

我想您可能需要检查语法。当我认为您打算使用追加重定向时,您正在调用写入重定向。因此,您的批处理文件正在执行其任务。。。它只是不断地覆盖先前的结果

试试这个:

findstr /s "Hello" .\*.* >> C:\MyDir\result.txt

有关重定向的更多信息,请参阅上的此页。我想您可能需要检查语法。当我认为您打算使用追加重定向时,您正在调用写入重定向。因此,您的批处理文件正在执行其任务。。。它只是不断地覆盖先前的结果

试试这个:

findstr /s "Hello" .\*.* >> C:\MyDir\result.txt

有关重定向的更多信息,请参见本页的

FINDSTR
是一个普通的旧可执行文件;(更强大的)PowerShell等价物是
Select String
。尝试
dir-recurse |选择string hello
。您好,我想使用windows命令进行测试我正在使用PowerShell没有运气仍然看到一个文件
findstr/s/n/I/m“Function”*>C:\MyDir\result.txt
您可以像
findstr/sinm“blahblah”一样加入
findstr
开关…
FINDSTR
是一个普通的旧可执行文件;(更强大的)PowerShell等价物是
Select String
。尝试
dir-recurse |选择string hello
。您好,我想使用windows命令进行测试我正在使用PowerShell没有运气仍然看到一个文件
findstr/s/n/I/m“Function”*>C:\MyDir\result.txt
您可以像
findstr/sinm“blahblah”一样加入
findstr
开关…
resultHi Nithya中仍然有一个文件名,我刚刚创建了两个xml文件,每个文件都包含以下内容:
Hello
,命令成功地在两个文件中找到了搜索词,但是result.txt将它们显示在同一行上。你可能也是这样吗?你好,我附上了图片,我有两个文件,但你可以看到结果中显示了一个文件。结果中仍然有一个文件名。我刚刚创建了两个xml文件,每个文件都包含以下内容:
Hello
,并且该命令在两个文件中都成功地找到了搜索词,但是result.txt将它们显示在同一行中。这对你来说可能也是真的吗?你好,我附上了图片,我有两个文件,但你可以在结果中看到它显示了一个文件
findstr /s "Hello" .\*.* >> C:\MyDir\result.txt