这是我编写的一个小脚本,它递归扫描没有一些父子目录的目录并提取其中文件的某些属性。
@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'
运行良好。