Использование Findstr для поиска какой-либо строки с не-ASCII символом по пакетам - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь использовать findstr в Testing_Results1, чтобы найти строку Conexão falhou.. Но не работает, потому что ã. Я пытался заменить Conexão на ConexÆo, но не сработало. Также пытался пропустить ã таким способом , но тоже не работает.

:Testing_Results1
    findstr /I /C:"Conexão falhou." WinSCP.log >nul && (
              echo Sem conexÆo com a internet.
              echo Verifique o problema e tente novamente.
              pause
              goto End
    ) || (
              goto Testing_Results2        
    )

    :Testing_Results2

    findstr /I /C:"Conexão perdida" WinSCP.log >nul && (
              echo ConexÆo com o servidor perdida. Tente novamente.
              pause
              goto end
    ) || (
              goto Success
    )

    :Success
    echo Arquivo(s) Exportado(s) com sucesso.
    echo/ &echo/ &echo/
    pause
    goto End


    :Error
    echo Erro desconhecido ocorrido.
    pause
    goto End

    :End
    del /f /s /q %temp%\ftpsend.dat >nul 2>nul
    del /f /s /q WinSCP.log >nul 2>nul
    exit

Может быть, этот вопрос можно считать дублированным из них:

Но там я не нашел решения своей проблемы.

Есть идеи?


Редактировать 1:

Следуй за моим кусочком WinSCP.log

. 2019-05-24 14:36:21.725 --------------------------------------------------------------------------
. 2019-05-24 14:36:21.725 Session name: xxxx@ftp.xxxx.com.br (Ad-Hoc site)
. 2019-05-24 14:36:21.725 Host name: ftp.xxxx.com.br (Port: 21)
. 2019-05-24 14:36:21.725 User name: xxxxx(Password: Yes, Key file: No, Passphrase: No)
. 2019-05-24 14:36:21.725 Transfer Protocol: FTP
. 2019-05-24 14:36:21.725 Ping type: Dummy, Ping interval: 30 sec; Timeout: 15 sec
. 2019-05-24 14:36:21.725 Disable Nagle: No
. 2019-05-24 14:36:21.725 Proxy: None
. 2019-05-24 14:36:21.725 Send buffer: 262144
. 2019-05-24 14:36:21.725 UTF: Auto
. 2019-05-24 14:36:21.725 FTPS: None [Client certificate: No]
. 2019-05-24 14:36:21.725 FTP: Passive: Yes [Force IP: Auto]; MLSD: Auto [List all: Auto]; HOST: Auto
. 2019-05-24 14:36:21.725 Local directory: default, Remote directory: home, Update: Yes, Cache: Yes
. 2019-05-24 14:36:21.725 Cache directory changes: Yes, Permanent: Yes
. 2019-05-24 14:36:21.725 Recycle bin: Delete to: No, Overwritten to: No, Bin path: 
. 2019-05-24 14:36:21.725 Timezone offset: 0h 0m
. 2019-05-24 14:36:21.725 --------------------------------------------------------------------------
. 2019-05-24 14:36:21.725 Conectando a ftp.xxxxx.com.br...
. 2019-05-24 14:36:21.725 Conexão falhou.

Редактировать 2:

Следуйте за изображением моего cmd, используя этот код:

@echo on
findstr /I /C:"Conexão falhou" WinSCP.log 
echo %errorlevel%
pause

enter image description here

1 Ответ

0 голосов
/ 28 мая 2019

Точное поведение, которое вы видите, немного зависит от того, какую кодовую страницу использует ваш текстовый файл.Предполагая, что в вашем файле используется кодовая страница 1252 - латиница (западноевропейская), тогда ã равно 0xE3 (десятичное 227).

Причина сбоя FINDSTR объясняется на Каковы недокументированные функции и ограничениякоманда Windows FINDSTR? в разделе Пределы символов для параметров командной строки - Расширенное преобразование ASCII .Там объясняется, как FINDSTR преобразует (искажает) многие не-ASCII-символы командной строки в значение ASCII.

Если вы прочитаете указанный раздел, вы увидите, что символ 227 преобразуется в 112, что соответствует буквеp.Таким образом, ваша команда FINDSTR ищет неправильную строку.

Единственный способ использовать FINDSTR для поиска вашей строки - поместить строку поиска в текстовый файл и использовать параметр /g:file.FINDSTR не портит символы при использовании опции /G.

Если содержимое «search.txt» представляет собой одну строку Conexão falhou, то следующая команда будет соответствовать правильным строкам:

findstr /I /L /G:search.txt WinSCP.log

При этом способ отображения строки может быть неправильным, в зависимости от вашей активной кодовой страницы.По умолчанию на моей машине установлена ​​кодовая страница 437, поэтому ã отображается на моей машине как π.В любом случае, код символа 0xE3.Если вы передадите результаты FINDSTR в файл, вы должны увидеть правильный результат.

Если вы действительно хотите поместить строку поиска в командную строку, тогда вы можете явно указать поиск по регулярному выражению, даже есливы используете /C, добавив опцию /R.Затем вы можете использовать . для сопоставления с любым символом в исходной позиции.

findstr /I /R /C:"Conex.o falhou" WinSCP.log

Другой вариант - вместо этого использовать команду НАЙТИ:

find /I "Conexão falhou" <"WinSCP.log"

Хотя на моем компьютере мне нужноследующее из-за активной кодовой страницы 437

find /I "Conexπo falhou" <"WinSCP.log
...