Войти

Показать полную графическую версию : Проблемы кодировки в теле скрипта и выводе в файл


NinjaScript
26-03-2015, 17:59
Добрый вечер. Помогите, пожалуйста разобраться с нюансами кодировок в 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
через notepad в кириллической кодировке OEM 866. »
У Блокнота нет такой кодировки. Требуется иной редактор, в котором есть поддержка OEM/866.

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

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

Также хотелось бы узнать как задать маску поиска текстового файла, чтобы скрипт дописывал информацию о свободном месте в последний по дате лог-файл. »
Сначала его нужно найти. Кстати, «последний по дате» — по дате создания файла, по дате модификации или по дате в самом имени файла? Вот, например, определение по дате в имени файла:
@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
У Блокнота нет такой кодировки. »
в 8-ке есть, в 7-ке тоже вроде была.

Iska
26-03-2015, 20:48
в 7-ке тоже вроде была. »
Неа. Я сейчас временно сижу как раз под ней.

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

Foreigner
26-03-2015, 21:05
А как там с автоопределением кодировки? »
Плохо. Ну как бы и бог с ним, с блокнотом.

Iska
26-03-2015, 22:22
Ну, и ладно. Хотя бы в принципе работать можно — и то уже хорошо.




© OSzone.net 2001-2012