Eine Powershell-Version von for / f (| findstr) für Unicode-Ordner / -Dateien

866
Roey Peretz

Hier ist ein kleines Skript, das ich geschrieben habe, das rekursiv ein Verzeichnis ohne übergeordnete Unterverzeichnisse durchsucht und einige Attribute der darin enthaltenen Dateien extrahiert.

@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 

Das Problem ist, dass findstr keine Unicode-Zeichen unterstützt (in diesem Fall hebräisch, für / f ist dies der Fall, wenn Sie die Konsolenschriftart ändern).

Was ist die PowerShell-Version dieses Skripts (vorausgesetzt, die PS-Schleife unterstützt Unicode-Zeichen)?

Vielen Dank

3
Nur ein Nitpick: Aus dem Titel sieht es so aus, als würde UTF die * conetnts * der Dateien betreffen, da UTF eine Dateikodierung / ein Dateiformat ist. IMHO wäre es besser "Unicode-Pfade" anstelle von "UTF-Ordner / -Dateien" zu sagen. Nathan.Eilisha Shiraini vor 6 Jahren 1
Es gibt keine "UTF" - Zeichen. UTF-8/16/32 sind Kodierungsschemata für Unicode und Windows verwendet UTF-16. [`findstr` unterstützt Unicode nicht] (https://superuser.com/q/306619/241386) [aber` find` tut] (https://blogs.msdn.microsoft.com/oldnewthing/20121128-00) /? p = 5963 /) phuclv vor 6 Jahren 0

1 Antwort auf die Frage

0
Christophe

Wenn Sie davon ausgehen, dass Ihr findstrBefehl zum Durchsuchen des Dateiinhalts nach קקקText verwendet wird, entspricht dies dem PowerShell-Code:

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 } }