Аватар для GBIT
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223

Вывод в правильной кодировке в файл результата выполнения команды

02.10.2013, 09:42. Показов 93132. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
понимаю что как и почему.
из консоли получаем текстовик в кодировке OEM 866. а нужна windows 1251

выход конечно перекодировать в AkelPad например. но хочется найти решение, чтобы выводить в файл сразу в правильно кодировке.

допустим выполняю команду:
Code
1
C:\Users\ADM>systeminfo >> D:\file.txt
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.10.2013, 09:42
Ответы с готовыми решениями:

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

Вывод даты и результата выполнения команды pathping в файл
Добрый день! Нужен батник, который выводит в файл дату/время плюс результат выполнения команды pathping -n yandex.ru С выводом даты...

Вывод в файл результата выполнения команды при запуске пакетного файла через Планировщик заданий
Хочу вывести результат выполнения команды w32tm /stripchart /computer:ntphost /samples:1 /dataonly в файл для последующей обработки. ...

22
 Аватар для mosath
135 / 134 / 5
Регистрация: 03.09.2013
Сообщений: 726
02.10.2013, 09:59
chcp /?
0
 Аватар для GBIT
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
02.10.2013, 10:11  [ТС]
mosath, если вы о том чтобы сделать так:
Code
1
2
C:\Users\ADM>chcp 1251
C:\Users\ADM>systeminfo >> D:\file.txt
то это не работает. меняется только кодировка в консоли. на файл не распространяется, вроде.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
02.10.2013, 14:49
Лучший ответ Сообщение было отмечено как решение

Решение

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
Setlocal EnableDelayedExpansion EnableExtensions
set pset=%COMPUTERNAME%
set tmpFile=tmp%Random%.tmp
systeminfo> %tmpFile%
for /f "delims=" %%a in (%tmpFile%) do (
  if not defined cpReady (
    chcp 1251> nul
    set CpReady=True
  )
  call :convert "%%a"
)
del /q %tmpFile%
chcp 866> nul
goto :eof
 
:convert
echo %~1>>"%pset%.txt"
4
 Аватар для GBIT
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
02.10.2013, 23:00  [ТС]
Dragokas, глядя на это, если честно, мне хочется сказать: браво, маэстро!
не иначе.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
03.10.2013, 12:36
Лучший ответ Сообщение было отмечено как решение

Решение

В юникоде еще можно:

Bash
1
2
3
systeminfo> tmp.txt
cmd /U /C type tmp.txt > sysinfo.txt
del tmp.txt
Есть и консольный перекодировщик:
https://www.cyberforum.ru/post3644494.html
https://www.cyberforum.ru/post4854353.html
4
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
06.10.2013, 18:18
До кучи вариант через VBScript: Поиск файлов по списку и запись в CSV с учетом русских букв
1
21 / 19 / 4
Регистрация: 15.01.2015
Сообщений: 202
18.04.2016, 13:24
еще можно так
Windows Batch file
1
@echo off && chcp 1251 && systeminfo >> file_name.txt && @echo on
Источник:http://code-snippets.ru/home/c... -fajl.html
1
 Аватар для ComSpec
3464 / 2002 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
18.04.2016, 14:54
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

yagami2, ну и чем Ваш код принципиально отличается от кода

Цитата Сообщение от GBIT Посмотреть сообщение
Code
1
2
C:\Users\ADM>chcp 1251
C:\Users\ADM>systeminfo >> D:\file.txt
?

Если приведённая Вами конструкция работает в Вашей ОС, то это не говорит о том, что она будет работать в других ОС.

Кстати, у меня в Windows 8 и Ваш вариант, и вариант, который не работал у GBIT, работают.

Но чтобы текст вывода команды SYSTEMINFO сохранялся в файле в кодировке Win-1251 на всех ОС, надо использовать либо первый код от Dragokas, либо вот такой:
Windows Batch file
1
@systeminfo| >"systeminfo.txt" cmd/c for /f "delims=" %%i in ('find/n /v ""') do @^>nul chcp 1251^& set x=%%i^& cmd/v/c echo[!x:*]^^^^=!
.
2
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,326
11.10.2016, 21:37
Пробую написать батник для удаления не верных ярлыков, кодировка 866. Проблема в том, что не удаётся получить вывод find (путь с кириллицей) в кодировке 866 для дальнейшей обработки if.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
setlocal enabledelayedexpansion
 
set dir1=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
set dir2=HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
 
for %%a in ("%dir1%","%dir2%") do (
    for /f "tokens=2 delims=:" %%b IN ('reg query "%%~a"') do (
        for %%c in ("C:%%b\*.lnk") do (
echo %%c
            for /f "tokens=*" %%d in ('find ":"^<"%%c"^| find /v "/"') do (
echo %%d
chcp 866>nul
echo %%d
pause
            if not exist "%%d" echo del /f /q "%%c"
))))
pause
exit
п.с. буду благодарен по оптимизации кода.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
11.10.2016, 23:36
Цитата Сообщение от sov44 Посмотреть сообщение
батник для удаления не верных ярлыков
Попробуй, может тебе больше понравиться это (там заодно и удаление вирусных):
Вложения
Тип файла: zip AutoCure LNK (сборка от 11.10.2016).zip (466.8 Кб, 37 просмотров)
1
 Аватар для volodin661
6806 / 2305 / 349
Регистрация: 10.12.2013
Сообщений: 7,935
12.10.2016, 06:55
Цитата Сообщение от GBIT Посмотреть сообщение
выход конечно перекодировать в AkelPad например. но хочется найти решение, чтобы выводить в файл сразу в правильной кодировке
Windows 10 ?




ну и не в AkelPad, Notepad++,Vim, а с помощью iconv
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,326
12.10.2016, 09:55
Цитата Сообщение от Dragokas Посмотреть сообщение
Попробуй, может тебе больше понравиться это
Благодарю, забираю в коллекцию . Но в настоящий момент нужно решение либо на командной строке (WinXp-Win7(10)) либо на гибриде vbs и командной строки.
0
Любознательный
 Аватар для YuS_2
7406 / 2260 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
12.10.2016, 12:00
Лучший ответ Сообщение было отмечено vavun как решение

Решение

Цитата Сообщение от sov44 Посмотреть сообщение
в настоящий момент нужно решение либо на командной строке (WinXp-Win7(10)) либо на гибриде vbs и командной строки.
на чистом cmd не совсем просто сделать... в ярлыке кодировка 1251, но это полбеды, там нет четкого разделения на строки. В принципе, можно использовать внешнюю утилитку shortcut.exe и с помощью неё уже получить, что требуется...
А гибрид, сделать несложно:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
(
echo Set oShell = CreateObject^("WScript.Shell"^)
echo Set oShortcut = oShell.CreateShortcut^(Wscript.Arguments^(0^)^)
echo WScript.Echo oShortcut.TargetPath
)>$.vbs
 
set dir1=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
set dir2=HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
 
for %%a in ("%dir1%","%dir2%") do (
    for /f "tokens=2 delims=:" %%b IN ('reg query "%%~a"') do (
        for %%c in ("C:%%b\*.lnk") do (
            for /f "delims=" %%d in ('cscript //nologo "$.vbs" "%%~c"') do (
                if not exist "%%~d" echo del /f /q "%%~c"
            )
        )
    )
)
del $.vbs
pause
3
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,326
12.10.2016, 12:26
Друзья, повторюсь, мне не нужны сторонние утилиты. Приведённый мной код это только часть большого кода.
0
 Аватар для volodin661
6806 / 2305 / 349
Регистрация: 10.12.2013
Сообщений: 7,935
12.10.2016, 14:25
Цитата Сообщение от sov44 Посмотреть сообщение
Друзья, повторюсь, мне не нужны сторонние утилиты. Приведённый мной код это только часть большого кода.
не капризничай, сам Microsoft никогда не позиционировал интерпретатор cmd в качестве инструмента
для сложных установок и конфигураций, потому что примитивен и ненадёжен.
0
Любознательный
 Аватар для YuS_2
7406 / 2260 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
12.10.2016, 15:15
Цитата Сообщение от sov44 Посмотреть сообщение
мне не нужны сторонние утилиты
А с каких пор VBScript стал сторонней утилитой?
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,326
12.10.2016, 16:38
YuS_2, сорри, был не внимателен.

Добавлено через 55 минут
Вроде код с vbs корректно отработал. YuS_2, спасибо!
0
Любознательный
 Аватар для YuS_2
7406 / 2260 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
12.10.2016, 21:24
Цитата Сообщение от sov44 Посмотреть сообщение
Вроде код с vbs корректно отработал.
На досуге решил залогировать действие кода и обнаружился недостаток...
Пути в реестре могут быть прописаны с любым диском, а в Ваших циклах присутствует замена только на диск C:, что приводит к некорректной работе в некоторых случаях.
Попытался чуток поправить код:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
if exist "error.txt" del "error.txt"
(
echo Set oShell = CreateObject^("WScript.Shell"^)
echo Set oShortcut = oShell.CreateShortcut^(Wscript.Arguments.Item^(0^)^)
echo WScript.Echo oShortcut.TargetPath
)>$.vbs
 
set dir1=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
set dir2=HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
 
for %%a in ("%dir1%","%dir2%") do (
    for /f "tokens=1* delims=)" %%b in ('reg query "%%~a" /z^|find ":"') do (
        for /f "tokens=*" %%m in ("%%~c") do (
            for %%d in ("%%~m\*.lnk") do (
                for /f "delims=" %%e in ('cscript //nologo "$.vbs" "%%~d"') do (
                    if not exist "%%~e" (>>error.txt echo "%%~d"&>>error.txt echo %%~e&del "%%~d")
                )
            )
        )
    )
)
del $.vbs
pause
2
12.10.2016, 23:09

Не по теме:

Цитата Сообщение от YuS_2 Посмотреть сообщение
в Ваших циклах присутствует замена только на диск C:, что приводит к некорректной работе в некоторых случаях
Предполагалось, что выполнялась стандартная установка винды на раздел "С:" и не были применены твики по изменению дефолтного месторасположения папок. В любом случае Ваше решение действительно универсально. Отдельное спасибо за идею с использованием ключа /z, взял на заметку. :good:

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

Результат выполнения команды SYSTEMINFO записывается в файл в неверной кодировке (Windows XP)
Доброго времени суток. Возникла проблема с программой, которую пишу на Делфи. Под Windows 7 и 8.1 все работает, а на ХР нет. ...

Вывод результата выполнения команды в два файла
Всем привет, подскажите пожалуйста как результат направить в 2 файла В первый запись шла &gt; 1.txt(перезаписывался) Во второй &gt;&gt;...

Запись результата выполнения команды IPCONFIG в текстовый файл
я создаю батник так ipconfig/all&gt; 1.txt Вопрос в следующем как задать кодировку что бы записывались русские символы.

Вывод результата в текстовый файл в нужной кодировке
В общем есть программа для табулирования функции (она будет ниже).Вопросов по самой программе нет, однако когда выводит результат в...

Кодировка при выводе результата выполнения команды в текстовый файл
растолкуйте как вывести данные из cmd в текстовый файл в нормальной кодировке. если делать просто: d:\&gt;ipconfig&gt;info.txt то в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru