Версия PowerShell для /f (|findstr) для папок / файлов Unicode
Вот небольшой скрипт, который я написал, который рекурсивно сканирует каталог без каких-либо родительских подкаталогов и извлекает некоторые атрибуты файлов внутри него.
@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 поддерживает символы Юникода)?
Спасибо
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
}
}
У меня была аналогичная проблема с
findstr
, и решил это с помощью
Select-String
вместо
findstr
.
cat .\log*.txt | findstr -I Error
глючил, но
cat .\log*.txt | Select-String -Pattern 'Error'
работал нормально.