Вопрос Версия 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-цикл поддерживает символы Unicode)?

спасибо


3
2017-07-05 07:11


происхождения


Просто nitpick: из названия выглядит UTF о conetnts файлов, поскольку UTF - это кодировка / формат файла. IMHO было бы лучше сказать «Unicode paths» вместо «UTF-папок / файлов». - Nathan.Eilisha Shiraini
Нет символов «UTF». UTF-8/16/32 представляют собой схемы кодирования для Unicode, а Windows использует UTF-16. findstr не поддерживает Unicode  но find делает - phuclv


ответы:


Предполагая, что ваш 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
    }
}

0
2017-11-30 15:18