Используйте сценарий для автоматизации выполнения задач, которые в качестве альтернативы могут выполняться человеком-оператором.
В моем ответе на оригинальный вопрос о переполнении стека Windows / NTFS есть два полезных сценария : два файла с одинаковыми длинными именами в одном каталоге? ,
Приложение для завершения истории. Вот еще один подход к решению OQ (моя абсолютно первая попытка). Скрипт сравнивает строки (например, имена файлов) одинаковой длины символ за символом и выводит разные (или не-ANSI):
param( [string[]] $strArr = @('ΗGreek', 'НCyril', 'HLatin') )
Set-StrictMode -Version latest
$strDiff = ''
$arrDiff = @()
for ($i=0; $i -lt $strArr.Count; $i++) {
for ($j=$i+1; $j -lt $strArr.Count; $j++) {
if ( ($i -ne $j) -and ( $strArr[$i].Length -eq $strArr[$j].Length) ) {
for ($k=0; $k -lt $strArr[$i].Length; $k++) {
if ( # -and # different characters AND
( [int][char]$strArr[$i][$k] -gt 255 -or
[int][char]$strArr[$j][$k] -gt 255 ) )
{ # at least one is out of pure ASCII range
if ( $strArr[$i][$k] -ne $strArr[$j][$k] ) {$Eq = '#'} else {$Eq = '='}
if ( $strDiff -notmatch $strArr[$i][$k] ) { $strDiff += $strArr[$i][$k]}
if ( $strDiff -notmatch $strArr[$j][$k] ) { $strDiff += $strArr[$j][$k]}
$arrDiff += "{0,4} {1} U+{2:x4} $Eq {3} U+{4:x4} {5} {6}" -f
($k+1), $strArr[$i][$k], [int][char]$strArr[$i][$k],
$strArr[$j][$k], [int][char]$strArr[$j][$k],
$strArr[$i], $strArr[$j]
}
}
}
}
}
if ($strDiff.Length -ne 0 ) {
if ( Get-Command -Name Get-CharInfo -ErrorAction SilentlyContinue ) {
$strDiff | Get-CharInfo
}
'' # an indent line
$arrDiff
}
Вывод (немного сложный для просмотра…) Первая таблица (с заголовками) выводится из (скорректированного) пользовательского командлета Get-CharInfo
; последний (без заголовков) объясняется ниже:
PS D:\PShell> .\SO\43381802.ps1 ( Get-childitem -path 'C:\testC\43381802' ).Name
Char CodePoint Category Description
---- --------- -------- -----------
e U+0065 LowercaseLetter Latin Small Letter E
е U+0435 LowercaseLetter Cyrillic Small Letter Ie
M U+004D UppercaseLetter Latin Capital Letter M
М U+041C UppercaseLetter Cyrillic Capital Letter Em
8 e U+0065 # е U+0435 MailClient.txt MailCliеnt.txt
1 M U+004d # М U+041c MailClient.txt МailClient.txt
1 M U+004d # М U+041c MailClient.txt МailCliеnt.txt
8 e U+0065 # е U+0435 MailClient.txt МailCliеnt.txt
1 M U+004d # М U+041c MailCliеnt.txt МailClient.txt
8 е U+0435 # e U+0065 MailCliеnt.txt МailClient.txt
1 M U+004d # М U+041c MailCliеnt.txt МailCliеnt.txt
8 е U+0435 = е U+0435 MailCliеnt.txt МailCliеnt.txt
1 М U+041c = М U+041c МailClient.txt МailCliеnt.txt
8 e U+0065 # е U+0435 МailClient.txt МailCliеnt.txt
Объяснение последней строки:
8
позиция символа в обеих сравниваемых строках
e U+0065
сам символ и его код Unicode (1-я строка)
#
#
или =
(разные или одинаковые, но не ANSI, соответственно)
е U+0435
сам символ и его код Unicode (2-я строка)
МailClient.txt
1-я строка
МailCliеnt.txt
2-я строка