У меня есть требование, чтобы мой пакетный скрипт обнаружил, является ли тип ввода входного файла для пакетного процесса либо UTF-8, либо нет? Может ли кто-нибудь предложить мне какую-либо идею, можем ли мы найти тип кодировки или нет в окнах ??нахождение типа кодирования с использованием пакетного сценария
ответ
с certutil
вы можете отправить файл в шестнадцатеричном формате. Файлы UTF-8 начинаются с 0xEF,0xBB,0xBF
. Итак:
certutil -dump my.file.txt | find "ef bb bf" && echo this is utf-8
Вы можете поместить это в FOR /F
петлю, чтобы быть уверенным, что только первая строка обрабатывается.
обновление:
Оказалось, что -dump
вариант certutil
является buggy .so мне нужно использовать -encodehex
, который требует один временный файл:
@echo off
:detect_encoding
setLocal
if "%1" EQU "-?" (
endlocal
call :help
exit /b 0
)
if "%1" EQU "-h" (
endlocal
call :help
exit /b 0
)
if "%1" EQU "" (
endlocal
call :help
exit /b 0
)
if not exist "%1" (
echo file does not exists
endlocal
exit /b 54
)
if exist "%1\" (
echo this cannot be used against directories
endlocal
exit /b 53
)
if "%~z1" EQU "0" (
echo empty files are not accepted
endlocal
exit /b 52
)
set "file=%~snx1"
del /Q /F "%file%.hex" >nul 2>&1
certutil -f -encodehex %file% %file%.hex>nul
rem -- find the first line of hex file --
for /f "usebackq delims=" %%E in ("%file%.hex") do (
set "f_line=%%E" > nul
goto :enfdor
)
:enfdor
del /Q /F "%file%.hex" >nul 2>&1
rem -- check the BOMs --
echo %f_line% | find "ef bb bf" >nul && echo utf-8 &&endlocal && exit /b 1
echo %f_line% | find "ff fe 00 00" >nul && echo utf-32 LE &&endlocal && exit /b 5
echo %f_line% | find "ff fe" >nul && echo utf-16 &&endlocal && exit /b 2
echo %f_line% | find "fe ff 00" >nul && echo utf-16 BE &&endlocal && exit /b 3
echo %f_line% | find "00 00 fe ff" >nul && echo utf-32 BE &&endlocal && exit /b 4
echo ASCII & endlocal & exit /b 6
endLocal
goto :eof
:help
echo.
echo %~n0 file - Detects encoding of a text file
echo.
echo for each encoding you will recive a text responce with a name and a errorlevel codes as follows:
echo 1 - UTF-8
echo 2 - UTF-16 BE
echo 3 - UTF-16 LE
echo 4 - UTF-32 BE
echo 5 - UTF-32 LE
echo 6 - ASCII
echo for empty files you will receive error code 52
echo for directories you will receive error code 53
echo for not existing file you will receive error code 54
goto :eof
Спасибо за ваш ответ. Ваш ответ действительно полезен для меня. У меня есть еще одно сомнение в том, что для других типов файлов кодировки, таких как unicode и т. Д., Можете ли вы указать изменения, которые нужно выполнить, чтобы найти тип файла? – satish
здесь вы можете найти информацию о других кодировках utf: http://en.wikipedia.org/wiki/Byte_order_mark. Я не уверен, что он будет работать во всех случаях. – npocmaka
проверьте мое обновление пожалуйста. – npocmaka
- 1. Получение кода сценария пакетного сценария
- 2. , взаимодействующий с предварительной обработкой SPM с использованием пакетного сценария MATLAB
- 3. Обработка пакетного сценария с чередованием
- 4. Использование WINRAR с пакетного сценария
- 5. Сетевой файл пакетного сценария
- 6. Всегда поверх пакетного сценария
- 7. Выполнение пакетного сценария
- 8. Как запустить rexx с использованием пакетного сценария Windows (файл .bat)
- 9. Как запустить несколько сценариев SpecFlow с использованием пакетного сценария?
- 10. Unmap и карта сетевого диска с использованием пакетного сценария
- 11. Загрузка xml из онлайн-URL с использованием пакетного сценария
- 12. Как объединить два текстовых файла с использованием пакетного сценария
- 13. значение Чтение Внутренние теги XML с использованием пакетного сценария
- 14. Вызов пакетного сценария из сценария VBScript
- 15. Вызов сценария powershell из пакетного сценария
- 16. Пространства в аргументах пакетного сценария
- 17. Использование пакетного сценария в HTML
- 18. Pass PowerShell переменной пакетного сценария
- 19. Создание резервной копии пакетного сценария
- 20. Timing процесс с окна пакетного сценария
- 21. Разархивируйте файл с помощью пакетного сценария
- 22. разбор файла с помощью пакетного сценария
- 23. ZP4 адрес разбор пакетного сценария
- 24. папки из пакетного сценария Windows,
- 25. Запуск сценария пакетного сценария из сценария оболочки unix
- 26. Извлечение сертификата с использованием пакетного файла
- 27. Нахождение среднего с использованием поворотного
- 28. Запуск пакетного скрипта в другом каталоге, кроме каталога пакетного сценария
- 29. проблема запуска пакетного сценария, чтобы убить процесс
- 30. Нахождение родителя объекта, который с определенного типа
Что, собственно, вы пытаетесь делать? Я спрашиваю об этом, потому что вы можете легко преобразовать файлы перед их обработкой, но на самом деле определить, какая кодировка у них немного сложнее. –
Спасибо за ваш ответ. Если файл находится в формате UTF-8, я могу использовать файл как есть. Но когда файл находится в другом формате, мне нужно преобразовать файл в UTF-8 и его нужно обработать. для этого мне нужно знать формат файла. – satish