Версия PowerShell для / f (| findstr) для папок / файлов Unicode

821
Roey Peretz

Вот небольшой скрипт, который я написал, который рекурсивно сканирует каталог без каких-либо родительских подкаталогов и извлекает некоторые атрибуты файлов внутри него.

@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 поддерживает символы Юникода)?

Спасибо

3
Просто придирка: из заголовка похоже, что UTF касается * conetnts * файлов, поскольку UTF - это кодировка / формат файла. ИМХО было бы лучше сказать «Unicode paths» вместо «UTF folder / files». Nathan.Eilisha Shiraini 7 лет назад 1
Там нет символов "UTF". UTF-8/16/32 являются схемами кодирования для Unicode, а Windows использует UTF-16. [`findstr` не поддерживает Unicode] (https://superuser.com/q/306619/241386) [но` find` поддерживает] (https://blogs.msdn.microsoft.com/oldnewthing/20121128-00 /? р = 5963 /) phuclv 7 лет назад 0

1 ответ на вопрос

0
Christophe

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