CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл

Ответить
Аватара пользователя
NinjaScript

CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл

Сообщение NinjaScript »

Добрый вечер. Помогите, пожалуйста разобраться с нюансами кодировок в 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

Re: CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл

Сообщение Iska »

Цитата NinjaScript:



через notepad в кириллической кодировке OEM 866.
CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл




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




Цитата NinjaScript:



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

Как это можно исправить?
CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл




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



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




Цитата NinjaScript:



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




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



Код:

Код: Выделить всё

@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
Аватара пользователя
Iska

Re: CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл

Сообщение Iska »

Цитата Foreigner:



в 7-ке тоже вроде была.
CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл




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



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

Re: CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл

Сообщение Foreigner »

Цитата Iska:



А как там с автоопределением кодировки?
CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл




Плохо. Ну как бы и бог с ним, с блокнотом.
Аватара пользователя
Foreigner

Re: CMD/BAT - Проблемы кодировки в теле скрипта и выводе в файл

Сообщение Foreigner »

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

Вернуться в «Скриптовые языки администрирования Windows»