Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/47: Рейтинг темы: голосов - 47, средняя оценка - 4.81
1 / 1 / 0
Регистрация: 08.03.2010
Сообщений: 55

Результат выполнения команды SYSTEMINFO записывается в файл в неверной кодировке (Windows XP)

15.03.2015, 14:15. Показов 10553. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Возникла проблема с программой, которую пишу на Делфи. Под Windows 7 и 8.1 все работает, а на ХР нет.

Разобрался в чем проблема. У меня в коде командная строка выполняет такие команды:
Bash
1
2
chcp 1251
systeminfo > info.txt
Но в ХР все русские символы переносятся иероглифами.
Даже если просто в командной строке ХР выполнить команды выше, в файле будут иероглифы.

Причем если попробовать к примеру такую команду:
Bash
1
2
chcp 1251
help > info.txt
То русский текст отображается нормально.

В чем проблема и почему ХР не может перенести команду systeminfo в файл?

В самой командной строке команда systeminfo выполняется корректно.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2015, 14:15
Ответы с готовыми решениями:

В текстовый файл не записывается результат выполнения команды
При запуске приложения через консоль все работает c:\iperf_client\iperf.exe -c 172.16.8.88>c:\iperf_client\report.txt Но когда запускаешь...

Вывод в правильной кодировке в файл результата выполнения команды
понимаю что как и почему. из консоли получаем текстовик в кодировке OEM 866. а нужна windows 1251 выход конечно перекодировать в...

Вывести результат выполнения команды HELP в текстовый файл так, чтобы у каждой команды был порядковый номер
Всем привет, нужна помощь! Необходимо команду help вывести в текстовый документ, чтобы у каждой команды был свой порядковый номер. ...

19
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.03.2015, 09:49
Цитата Сообщение от Segh Посмотреть сообщение
В самой командной строке команда systeminfo выполняется корректно.
Потому что кодовая страница ком. строки по умолчанию - 866.
А блокнот Windows работает с ANSI.
Цитата Сообщение от Segh Посмотреть сообщение
chcp 1251
Это не несет никакого влияния. SystemInfo - это внешняя утилита. Ей все равно какая сейчас кодовая страница у ком. строки.

Не по теме:


P.S. первый раз слышу, чтобы батник писали на Дельфи :D

1
1 / 1 / 0
Регистрация: 08.03.2010
Сообщений: 55
16.03.2015, 10:16  [ТС]
Dragokas, так ведь на win 7 и 8.1 работает.

Я не батник пишу, у меня просто этот код в Делфи используется. Хотя дело тут не в нем, а в том, что на ХР не могу перенести в файл результат выполнения команды SystemInfo.

Это можно как-нибудь решить?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.03.2015, 10:59
Лучший ответ Сообщение было отмечено Segh как решение

Решение

Хм. Видимо версии утилит отличаются наличием в Win7 проверки.

Segh, здесь в соседней теме Вашему "коллеге" уже подсказали: Как сохранить/перекодировать файл в UTF-8 из консоли?
1
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
16.03.2015, 11:03
Цитата Сообщение от Segh Посмотреть сообщение
Я не батник пишу, у меня просто этот код в Делфи используется. Хотя дело тут не в нем, а в том, что на ХР не могу перенести в файл результат выполнения команды SystemInfo.
Какая-то совершенно вольная манипуляция терминами. Что значит перенести? Попытаюсь догадаться, в программе на Дельфи запускается systeminfo.exe? Тогда попробовать запустить "%comspec% /c systeminfo.exe > info.txt" как там это делается на Дельфи, раскрыв переменную среды comspec.

Цитата Сообщение от Segh Посмотреть сообщение
Но в ХР все русские символы переносятся иероглифами.
На языке высокого уровня нет возможности перекодировать файл в нужную кодировку?
1
1 / 1 / 0
Регистрация: 08.03.2010
Сообщений: 55
16.03.2015, 11:18  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Хм. Видимо версии утилит отличаются наличием в Win7 проверки.
Походу так. И еще chcp работает в win 7. Когда без смены кодировки переносишь в файл, русские символами иероглифами становятся.

Да, как раз только что нашел такой код:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
SetLocal
::Файл с кодировкой OEM-866
set FileIn=C:\text.txt
::Результат, куда записывать WIN-1251
set FileOut=C:\text2.txt
 
chcp 866> nul
for /f "delims=" %%a in (%FileIn%) do (
  if not defined cpReady (
    chcp 1251> nul
    set CpReady=True
  )
  call :convert "%%a"  2>NUL
)
chcp 866> nul
goto :eof
 
:convert
echo.%~1>>"%FileOut%"
Работает, осталось в Делфи запихать все.

А есть кроме systeminfo в командной сроке какая-нибудь еще команда которая показывает инфу о компьютере?
Нашел еще set, но там не то, что нужно. Все говорят про какую-то MDS, но она не работает...

Очень нужно определить вюдюху и процессор. Т.к systeminfo выдает описание процессора, а не модель.

Цитата Сообщение от Smitis Посмотреть сообщение
Что значит перенести?
Перенести, значит systeminfo > info.txt.

Как-то так
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
16.03.2015, 11:42
Цитата Сообщение от Segh Посмотреть сообщение
Перенести, значит systeminfo > info.txt
Догадался. Но это называется перенаправлением вывода.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.03.2015, 11:45
Segh, перекодировать файл целиком будет более надежно (866 -> 1251).

Цитата Сообщение от Segh Посмотреть сообщение
А есть кроме systeminfo в командной сроке какая-нибудь еще команда которая показывает инфу о компьютере?
Море.
Ищите в этом разделе. Такой вопрос не раз подымали.
1
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
16.03.2015, 11:46
Цитата Сообщение от Segh Посмотреть сообщение
А есть кроме systeminfo в командной сроке какая-нибудь еще команда которая показывает инфу о компьютере?
Имхо, выбрано не то направление. Надо не с батниками и кодировками воевать, а прямо из дельфи определять, какое оборудование установленно.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.03.2015, 11:49
Чувствую, по этой теме будет незачет за использование "сторонних средств" (как тонко подметил Smitis).
0
1 / 1 / 0
Регистрация: 08.03.2010
Сообщений: 55
16.03.2015, 14:15  [ТС]
Цитата Сообщение от Smitis Посмотреть сообщение
прямо из дельфи определять, какое оборудование установленно.
В делфи определяю видюху, но почему-то не пишет ее объем. Если бы мог все это определить нормально в делфи, то естественно не парился бы с кодировками

Dragokas, есть разрешение пользоваться любыми средствами и языками программирования, увы... более-менее я знаю только Делфи.

Добавлено через 2 часа 17 минут
Цитата Сообщение от Smitis Посмотреть сообщение
Догадался. Но это называется перенаправлением вывода.
А можно перенаправить этот вывод в файл, но как источник указать не команду или что-то другое, а все, что выведено на экране?

В общем, сохранить все что на экране в файл?

Раньше пробовал clip - копировать в буфер, но опять же на xp не работает...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.03.2015, 14:24
Segh, Ваш предыдущий скрипт (точнее мой, скопированный Вами) так и делает.

Bash
1
echo Инфа > файл
(запись с заменой)

Bash
1
echo Инфа >> файл
(дозапись)
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
16.03.2015, 18:40
Мне кажется, что тут два пути решения проблемы.
1. Делаем всё на дельфи. Например, через WMI. Раз systeminfo получает нужную информацию, значит и в программе эту информацию можно получить.
2. Решаем через внешние утилиты. Разбираемся с разными кодировками и с отличиями утилит в разных системах. Изобретаем способы передачи данных через буфер обмена (это не решит проблемы с кодировками). Придумываем ещё много разных обходных способов, каждый раз решая очередную проблему, не решив её бросаем и придумываем новый способ с новыми проблемами.

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

П.С. (В качестве шутки)
Цитата Сообщение от Segh Посмотреть сообщение
а все, что выведено на экране?
Скачать компонент для снятия скриншота экрана.
Скачать компонент распознования текста.

П.П.С.
В конце концов, разве трудно на дельфи прочитать и по косвеным признакам (ключевым фразам) определить кодировку и перекодировать в нужную?

П.П.П.С.
У меня вызов
Bash
1
cmd.exe /c "chcp 866 & systeminfo.exe >info.txt"
прекрасно сохраняет в указанной кодировке (хоть 866, хоть 1251).
Ради эксперимента дома проверю на XP.
А вот видеокарты не показывает. Так что, systeminfo может быть и не решение проблемы.
2
1 / 1 / 0
Регистрация: 08.03.2010
Сообщений: 55
16.03.2015, 20:14  [ТС]
Цитата Сообщение от Smitis Посмотреть сообщение
прекрасно сохраняет в указанной кодировке (хоть 866, хоть 1251).
На win 7 и 8.1 у меня тоже все прекрасно сохраняет.

Средствами Делфи, не используя что-то стороннее все очень печально. К примеру называние видюхи определяет, а объем нет. С процом вообще беда, только некоторые характеристики, частоту, описание и т.п. Ну и конечно руки кривые и не доходит как все полностью доделать)
Уже задавал подобную тему с определением конфигурации компа в форуме по делфи.

Кроме видюхи и объема видеопамяти systeminfo еще и название процессора не показывает, а отображает только его описание.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.03.2015, 21:04
Цитата Сообщение от Segh Посмотреть сообщение
название процессора не показывает
Bash
1
WMIC CPU Get Name /Value
Цитата Сообщение от Segh Посмотреть сообщение
К примеру называние видюхи определяет, а объем нет
Bash
1
WMIC Path Win32_VideoController get AdapterRAM
Только у меня почему то значение с минусом показывает.

Вот еще. Может что полезное найдете.
Считывание информации о компьютере
1
1 / 1 / 0
Регистрация: 08.03.2010
Сообщений: 55
16.03.2015, 21:12  [ТС]
Dragokas, я собственно из этой темы и нашел некоторый код, который мне нужен. По Вашему совету "искать в этом разделе"
Пробовал в батнике код от Jeka_Osokin, у меня работает.
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
16.03.2015, 23:07
Дома у меня под XP systeminfo информацию по видеокарте тоже не вывела. Странно.
А кодировка да, не меняется, всегда 866.
1
1 / 1 / 0
Регистрация: 08.03.2010
Сообщений: 55
17.03.2015, 09:20  [ТС]
Dragokas, не понял... командой
Bash
1
echo.%~1>>"%FileOut%"
ну или
Bash
1
echo.%~1>> 1.txt
у меня символы "%~1" записывается файл.

Или так нельзя делать?)
Я думал можно взять всю инфу, которая выведена на экран ком. строки и запихать все в файл.

Цитата Сообщение от Smitis Посмотреть сообщение
Дома у меня под XP systeminfo информацию по видеокарте тоже не вывела. Странно.
Может она и не должна выводить? А кодировка не меняется наверно из-за того, что как говорил Dragokas "SystemInfo - это внешняя утилита".
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
17.03.2015, 10:35
Цитата Сообщение от Segh Посмотреть сообщение
А кодировка не меняется наверно из-за того, что как говорил Dragokas "SystemInfo - это внешняя утилита".
Она и в XP и в Win7 внешняя. Под Win7 кодировка меняется, под XP нет.

Цитата Сообщение от Segh Посмотреть сообщение
Может она и не должна выводить?
Тогда зачем все эти пляски с systeminfo, если нужную информацию она не выводит?
0
1 / 1 / 0
Регистрация: 08.03.2010
Сообщений: 55
17.03.2015, 14:14  [ТС]
Цитата Сообщение от Segh Посмотреть сообщение
у меня символы "%~1" записывается файл.
Разобрался.
Цитата Сообщение от Smitis Посмотреть сообщение
Она и в XP и в Win7 внешняя. Под Win7 кодировка меняется, под XP нет.
Я это и имел ввиду, думал по крайней мере))
Цитата Сообщение от Smitis Посмотреть сообщение
Тогда зачем все эти пляски с systeminfo, если нужную информацию она не выводит?
Она мне нужна для получения других сведений
Извращаюсь как могу

Dragokas, Smitis большое спасибо за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2015, 14:14
Помогаю со студенческими работами здесь

Запись вывода результата выполнения команды ping в текстовый файл в нужной кодировке
Собственно для запоминания результата пинга в тхт использую следующюю команду: ping google.com > *.txt (например) и вместо текста я в...

Как записать результат выполнения команды telnet в файл?
Добрый день, подскажите как записать результат команды telnet <имя удаленного сервера> <порт> в файл? Пробовал через...

Информация записывается или считывается из файла в неверной кодировке
Записываю в файл строку из текстбокса Key private void ключToolStripMenuItem1_Click(object sender, EventArgs e) { ...

Результат парсинга представлен в неверной кодировке
Делаю парсинг. В переменную сохраняю то, что спарсил(cохраняю в UTF8). Потом из переменной вывожу результат парсинга в Label1.Text ...

Запись в файл в неверной кодировке
не могу понять в чём дело.. заработался уже.. в файле выводятся каракули((( а нужно записать 5 строк и считать их на консоль... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru