适用于 Unicode 文件夹/文件的 for /f (|findstr) 的 powershell 版本

适用于 Unicode 文件夹/文件的 for /f (|findstr) 的 powershell 版本

这是我编写的一个小脚本,它递归扫描没有一些父子目录的目录并提取其中文件的某些属性。

@echo off
echo Path,Name,Extension,Size > filelist.txt
for /f "delims=" %%i in ('dir D:\שער /A:-d /s /b ^| findstr /l /i /v ^/c:"קקק" ^/c:"ttt"') 
do echo %%~dpi,%%~ni,%%~xi,%%~zi >> filelist.txt

问题是 findstr 不支持 Unicode 字符(在本例中是希伯来语,如果您更改控制台字体,则 /f 不支持)。

该脚本的 PowerShell 版本是什么(假设 PS 循环确实支持 unicode 字符)?

谢谢

答案1

假设您的findstr命令用于在文件内容中搜索文本קקק,以下是等效的 PowerShell 代码:

Set-Content -Path 'filelist.txt' -Value 'Path,Name,Extension,Size' -Encoding UTF8

foreach( $file in (Get-ChildItem -File -Path 'C:\Temp\שער' -Recurse) )
{
    $nameCount = Get-Content -Path $file.FullName -Encoding UTF8 | Select-String -Pattern 'קקק' | Measure-Object | Select-Object -ExpandProperty Count

    if( $nameCount -gt 0 )
    {
        $line =  $file.DirectoryName + ',' + $file.BaseName + ',' + $file.Extension + ',' + $file.Length
        Add-Content -Path 'filelist.txt' -Value $line -Encoding UTF8
    }
}

答案2

我遇到了类似的问题findstr,并通过使用Select-String而不是解决了它findstr

cat .\log*.txt | findstr -I Error虽然有问题,但是cat .\log*.txt | Select-String -Pattern 'Error'运行良好。

相关内容