Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проблемы кодировки в теле скрипта и выводе в файл (http://forum.oszone.net/showthread.php?t=297511)

NinjaScript 26-03-2015 17:59 2488009

Проблемы кодировки в теле скрипта и выводе в файл
 
Добрый вечер. Помогите, пожалуйста разобраться с нюансами кодировок в cmd/bat и , по возможности, доработать скрипт.
Суть такова:
Код:

dir d: |find "свободно" >> "c:\Program Files\backups\Logs\log 2015-03-23.txt"
pause

Собственно, скрипт, который нужен, чтобы в конец текстового файла-лога дописывалась информация о свободном месте на указанном диске (в данном случае диске "d").
По началу проблемы возникали с частью кода
Код:

"find "свободно"
который в консоли выводился как
Код:

"find "ётюсюфэю"
и, соответственно не находил нужную строку.
После серфинга интернетов по проблемам кодировки в cmd, шаманинга с chcp разными кодировками и сохранением в notepad, стало ясно, что лечится это как раз таки сохранением через notepad в кириллической кодировке OEM 866.
Но теперь возникла проблема с выводом результата в текстовый файл. На выходе видны только кракозябры.
Как это можно исправить?
Также хотелось бы узнать как задать маску поиска текстового файла, чтобы скрипт дописывал информацию о свободном месте в последний по дате лог-файл. Если в коде указать вместо
Код:

"c:\Program Files\backups\Logs\log 2015-03-23.txt"
Код:

"c:\Program Files\backups\Logs\log*.txt"
Скрипт не работает.
Заранее спасибо.

Iska 26-03-2015 20:02 2488081

Цитата:

Цитата NinjaScript
через notepad в кириллической кодировке OEM 866. »

У Блокнота нет такой кодировки. Требуется иной редактор, в котором есть поддержка OEM/866.

Цитата:

Цитата NinjaScript
Но теперь возникла проблема с выводом результата в текстовый файл. На выходе видны только кракозябры.
Как это можно исправить? »

Вывод тоже идёт в OEM/866. Что делать — пользовать иной редактор. Я пользую редактор от Far Manager'а, там кодировки и вовсе могут меняться «на лету».

Не надо ничего исправлять или делать вывод в ANSI/1251. Просто привыкните к тому, что консоль интерпретатора команд «cmd.exe» — это OEM.

Цитата:

Цитата NinjaScript
Также хотелось бы узнать как задать маску поиска текстового файла, чтобы скрипт дописывал информацию о свободном месте в последний по дате лог-файл. »

Сначала его нужно найти. Кстати, «последний по дате» — по дате создания файла, по дате модификации или по дате в самом имени файла? Вот, например, определение по дате в имени файла:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /a:-d /o:n "%ProgramFiles%\backups\Logs\log *.txt"`
) do set sName=%ProgramFiles%\backups\Logs\%%~i

if defined sName (
        echo [%sName%]
)

endlocal
exit /b 0


Foreigner 26-03-2015 20:41 2488112

Цитата:

Цитата Iska
У Блокнота нет такой кодировки. »

в 8-ке есть, в 7-ке тоже вроде была.

Iska 26-03-2015 20:48 2488118

Цитата:

Цитата Foreigner
в 7-ке тоже вроде была. »

Неа. Я сейчас временно сижу как раз под ней.

Хорошо, что насилу в новых версиях сделали. А как там с автоопределением кодировки?

Foreigner 26-03-2015 21:05 2488127

Цитата:

Цитата Iska
А как там с автоопределением кодировки? »

Плохо. Ну как бы и бог с ним, с блокнотом.

Iska 26-03-2015 22:22 2488156

Ну, и ладно. Хотя бы в принципе работать можно — и то уже хорошо.


Время: 23:48.

Время: 23:48.
© OSzone.net 2001-