1

Тема: Вивід даних з командного рядка в файл .txt

Доброго дня,
Чи може мені хтось допомогти, мені потрібно створити файл .bat після запуску якого виконуються команди і результат записується в файл .txt. Я використовую скрипт:

echo Komputer S/N : &wmic bios get serialnumber>>%USERPROFILE%\Desktop\test.txt
echo Komputer name: %computername% >> %USERPROFILE%\Desktop\test.txt
echo.>>%USERPROFILE%\Desktop\test.txt
echo User name: %username%>>%USERPROFILE%\Desktop\test.txt
echo Komputer model: &wmic csproduct get name>>%USERPROFILE%\Desktop\test.txt
echo.>>%USERPROFILE%\Desktop\test.txt

На виході получаю

SerialNumber  
C5F7DC2       
潋灭瑵牥渠浡㩥匠乙剅䥇ㅏ‴਍਍獕牥渠浡㩥愠䌮牨慺潮獷楫਍Name            
Latitude E7470  
਍

Що я роблю не так?

2 Востаннє редагувалося koala (02.03.2021 22:28:34)

Re: Вивід даних з командного рядка в файл .txt

Використовуєте не те кодування. В консолі, схоже, cp866 (чи cp1251, але навряд), а програма, якою ви це відкриваєте, використовує юнікод (UTF-16).
Отак-то, пане Хржановський.

3

Re: Вивід даних з командного рядка в файл .txt

А як зробити щоб записувалось в файл з іншим кодуванням?

4

Re: Вивід даних з командного рядка в файл .txt

Тут у вас команди echo роблять незовсім те, що, скоріш за все, ви від них очікуєте: перенаправлення на них не діє, бо воно йде після наступної команди, відокремленої амперсандом. Щоб вивід echo йшов у файл, треба або безпосередньо після echo робити перенаправлення, або брати всю серію команд перед перенаправленням у дужки:

echo Komputer S/N : >>%USERPROFILE%\Desktop\test.txt &wmic bios get serialnumber>>%USERPROFILE%\Desktop\test.txt

або

(echo Komputer S/N : &wmic bios get serialnumber)>>%USERPROFILE%\Desktop\test.txt

Схоже, джерелом проблеми є wmic, що генерує свій вивід в utf-16, тоді як echo виводить свої дані в ascii-сумісній формі.
В принципі, можна спробувати робити вивід в utf-16, змінюючи кодову сторінку. Складність у тому, що utf-16 несумісне з ascii, тому перемикання кодових сторінок доведеться робити в кожному рядку:

chcp 1200 & echo some text>>file.txt & chcp 866

chcp 1200 перемикає кодування на utf-16 (див. список кодових сторінок), chcp 866 перемикає на кодову сторінку ДОСівської кирилиці. Якщо друге перемикання кодових сторінок не зробити, батник не зможе прочитати наступні свої рядки, оскільки поточна кодова сторінка вказує, в якому кодуванні обробляти сам батник, а тому воно має лишатись ascii-сумісним. Не впевнений, чи цей фокус спрацює — можливо, там якийсь більш начаклований бубон потрібен.

Або ж можна встановити iconv чи іншу подібну утиліту й перекодовувати вивід wmic з utf-16 у щось більш людське:

wmic bios get serialnumber|iconv -f utf-16 -t cp866>>%USERPROFILE%\Desktop\test.txt

:

Подякували: 0xDADA11C7, andriesko2

5

Re: Вивід даних з командного рядка в файл .txt

Якщо взяти вивід echo в дужки то текст виводиться з пропусками:

S e r i a l N u m b e r     
 
 P F 2 F D P 7 3   

Існує якесь лікарсвто на це?