#0
by Cube
Всю голову уже сломал... Простой батник: @echo off set ConnectionString=/F "D:1CBasesv82Моя база" /N "Логин" /P "Пароль" set ArchivePath=D:1CBasesv82Моя базаАрхив "C:Program Files1cv828.2.17.143in1cv8.exe" DESIGNER %ConnectionString% /DumpIB "%ArchivePath%1Cv8.dt" /Out "%ArchivePath%Лог.txt" type "%ArchivePath%Лог.txt" pause Вместо великого могучего выводит крякозяблы! Как вывести текст лог-файла в нормальной кодировке? Весь инет перерыл, не могу победить... Пробовал даже так: но во втором файле, почему то, только одна строка - путь до первого файла... Помогите победить, не прибегая к внешним библиотекам.
#4
by Aleksey
кого перевести? Научить 1С писать логи транслитом? Исходниками не поделишься, чтобы код платформы поправить?
#5
by Cube
Лог-файл выводит полезную инфу об открытых сессиях, я хочу сделать бесконечный цикл в батнике, чтобы он показывал, кто блокирует базу, если нельзя сделать архивную копию.
#7
by Aleksey
Ну так и показывай в блокноте? вместо type напиши notepad (или что там у тебя в винде) Или я несовсем понял кому ты эту инфу выводишь?
#9
by Cube
Понимаешь, это кусок батника, поэтому нужно выводить инфу в этом же окне, а не открывать новые окна. "кому ты эту инфу выводишь?" - тому, кто будет делать архивную копию. Запустил батник, а тебе в лицо: "Не могу сделать архив, Ива Иваныч, волк тряпошный, из базы не вышел")))
#16
by Aleksey
Ну ты же сам просил помощи в написания конвертора? iconv -f windows-1251 -t cp866 input.txt > output.tx
#17
by Cube
Мне не нужно писать конвертор, мне нужно сконвертировать файл средствами батника без внешних компонент. Или вывести инфу из файла в читаемом виде.
#18
by rphosts
а разве куций язык пакетных файлов умеет организовывать циклы и пилить строку? Вроде как нет - значит и решения нет...
#20
by rphosts
а хотя.... имем 866.тхт -> 1251.тхт @echo off chcp 866 >nul for /f "tokens=*" %%i in (866.txt) do call:to1251 "%%i" exit :to1251 chcp 1251 >nul echo %~1 >>1251.txt chcp 866 >nul exit /b
#22
by Cube
Пробовал? А я пробовал: @echo off set ConnectionString=/F "D:1CBasesv82Моя база" /N "Логин" /P "Пароль" set ArchivePath=D:1CBasesv82Моя базаАрхив "C:Program Files1cv828.2.17.143in1cv8.exe" DESIGNER %ConnectionString% /DumpIB "%ArchivePath%1Cv8.dt" /Out "%ArchivePath%Лог.txt" chcp 1251 >nul for /f "tokens=*" %%i in ("%ArchivePath%Лог.txt") do call:to866 "%%i" exit :to866 chcp 866 >nul echo %~1 >>"%ArchivePath%Лог_866.txt" chcp 1251 >nul type "%ArchivePath%Лог_866.txt" pause Во втором файле только одна строка - путь до первого файла.
#27
by Cube
добавил строку "exit /b" куда надо, но результат тот же... В файле Лог_866.txt только путь до первого файла... Думаю, что проблема в том, что я путь до первого файла указываю как строку и он её хавать не хочет...
#29
by Aleksey
1. chcp 1251 >nul 2. for /f "tokens=*" %%i in ("%ArchivePath%Лог.txt") do call:to866 "%%i" 3. exit 4. :to866 5. chcp 866 >nul 6. echo %~1 >>"%ArchivePath%Лог_866.txt" 7. chcp 1251 >nul 8. type "%ArchivePath%Лог_866.txt" 9. pause Почему во второй строке ковычки "%ArchivePath%Лог.txt" - ты же не строку передаешь, а пусть к файлу, вот и пиши просто без ковычек Третью строку заменить на Goto :End. Тебе же дальше надо выполнять, а не закрывать Вместо 8 строки нужно :End chcp 866 >nul more %ArchivePath%Лог_866.txt
#32
by Aleksey
А ну да, после твоих манипуляций у тебя будет кодировка 1251 для вывода, поэтому нужно chcp 866 >nul и после этого уже можно выводить more %ArchivePath%Лог_866.txt more а не type - это чисто из моих эстетических соображений. Разница лишь в том что type выводит всю партянку, а more как только экран будет заполнен, он будет ждать нажатия кнопки и тогда следующую порцию выведет P.S. Это уже учтено в
#34
by Cube
"Почему во второй строке ковычки "%ArchivePath%Лог.txt" - ты же не строку передаешь, а пусть к файлу, вот и пиши просто без ковычек" Потому что путь до лога содержит пробелы. Без кавычек не взлетит.
#35
by Aleksey
chcp 1251 >nul for /f "tokens=*" %%i in ("%ArchivePath%Лог.txt") do call:to866 "%%i" Goto :End :to866 chcp 866 >nul echo %~1 >>"%ArchivePath%Лог_866.txt" chcp 1251 >nul exit/b :End chcp 866 >nul more %ArchivePath%Лог_866.txt pause
#37
by Cube
Не взлетает. Говорит, что не может получить доступ к файлу "D:1CBasesv82Моя"... А с кавчками он мне во второй файл пишет путь до файла 1 несколько раз подряд...
#38
by Aleksey
Не несколько раз, а ты просто дописываешь в конце Вначале пропиши if exist "%ArchivePath%Лог.txt" (del "%ArchivePath%Лог.txt" /f /q)
#39
by Aleksey
И в начале замени set ArchivePath=D:1CBasesv82Моя базаАрхив на set ArchivePath="D:1CBasesv82Моя базаАрхив" И попробуй еще раз
#40
by Cube
Не взлетит, пробовал уже. Скажет, что не нашел файл D:1CBasesv82Моя базаАрхив"Лог.txt (кавычка в пути)
#44
by Cube
Я верю, что код рабочий, только в моем случае, путь до файлов может содержать русские символы и пробелы... Вот в этом-то и проблема...
#45
by rphosts
а если путь скормить как параметр батнику? а вывод в некий фиксированный файл а в конце батника исходный мочим, резльтирующий копируем куда надо
#46
by Cube
А где размещать фиксированный файл? В корень диска не положишь - неизвестно, есть туда у юзера доступ или нет, а в темп - так там в пути тоже русские символы и пробелы могут быть...
#57
by Aleksey
Параметры у For таки без ковычек - путь с ковычками - строка одинарные ковычки - команда
#63
by rphosts
KruchuVerchuKodyZaputatHochu.bat "D:1CBasesv82Моя" а внути него вместо переданного уже как параметр имени юзать %1
#66
by Aleksey
И кстати не уверен, что set ArchivePath=D:1CBasesv82Моя базаАрхив нормально отработает в досе
#77
by Cube
cmd-файл: @echo off set ConnectionString=/F "D:1CBasesv82Моя база" /N "Логин" /P "Пароль" set ArchivePath=D:1CBasesv82Моя базаАрхив "C:Program Files1cv828.2.17.143in1cv8.exe" DESIGNER %ConnectionString% /DumpIB "%ArchivePath%1Cv8.dt" /Out "%ArchivePath%Лог.txt" chcp 1251 >nul for /f "tokens=*" %%i in (%ArchivePath%Лог.txt) do call:to866 "%%i" Goto :End :to866 chcp 866 >nul echo %~1 >>%ArchivePath%Лог_866.txt chcp 1251 >nul exit/b :End chcp 866 >nul more %ArchivePath%Лог_866.txt pause Не удалось получить доступ к файлу "D:1CBasesv82Моя"...
#80
by Cube
Пробую так: cd /d "%ArchivePath%" chcp 1251 >nul for /f "tokens=*" %%i in (Лог.txt) do call:to866 "%%i" Goto :End :to866 chcp 866 >nul echo %~1 >>Лог_866.txt chcp 1251 >nul exit/b :End chcp 866 >nul more Лог_866.txt pause Но если файла Лог_866.txt нет, то ошибка, а если есть, то выводит ошибку в крякозяблах про Лог_.txt...
#82
by Aleksey
В начале почему не добавил if exist "%ArchivePath%Лог_866.txt" (del "%ArchivePath%Лог_866.txt" /f /q) ну и if exist Лог_866.txt more Лог_866.txt
#83
by Cube
Если файла Лог_866.txt нет, то ошибка в крякозяблах про файл Лог.txt и ещё одна ошибка "Не удается получить доступ к файлу D:1CBasesv82Моя базаАрхивЛог_866.txt"
#86
by Cube
Ахахахахах!!!!!! О, дааааааааааааааааа!!!!! Работает!)))) Тынц-тынц)))) Ща, наведу марафет и выложу, что получилось)
#88
by Aleksey
Наводить/ навести марафет. 1. Жарг. угол. Привести в замешательство неожиданным вопросом случайного свидетеля кражи и скрыться с места преступления. Трахтенберг, 37. 2. Жарг. угол. Заверять кого-л. в своей невинности, честности. СРВС 2, 51, 55, 189; СРВС 3, 102. 3. Кубан. Дурачить, обманывать кого-л. СРНГ 17, 369. 4. Прост. Приводить себя или что-л. в полный порядок (по случаю праздника, торжественной встречи кого-л. и т. п.). БМС 1998, 366; НЗС-84, 344; Глухов 1988, 87; Грачев, Мокиенко 2000, 118; Вахитов 2003, 104. (с)
#89
by Cube
Имеется ввиду "4. Прост. Приводить себя или что-л. в полный порядок (по случаю праздника, торжественной встречи кого-л. и т. п.). БМС 1998, 366; НЗС-84, 344; Глухов" Не надо тут мне... :))) Блин, жена в магаз гонит, марафет наведу минут через 20... :)
#91
by Cube
Ладно, вот что успел набросать: @echo off set ConnectionString=/F "D:+1CBasesv82Домашняя бухгалтерия" /N "Администратор" /P "0" cd /d "D:+1CBasesv82Домашняя бухгалтерияАрхив" :StartPoint echo %date% %time:~0,8% - Создание архивной копии... "C:Program Files1cv828.2.17.143in1cv8.exe" DESIGNER %ConnectionString% /DumpIB 1Cv8.dt /Out Log.txt rem Конвертируем лог-файл в DOS кодировку if exist Log_for_cmd.txt (del Log_for_cmd.txt /f /q) chcp 1251 >nul for /f "tokens=*" %%i in (Log.txt) do call:to866 "%%i" Goto :End :to866 chcp 866 >nul echo %~1 >>Log_for_cmd.txt chcp 1251 >nul exit/b :End chcp 866 >nul rem Закончили конвертирование лог-файла в DOS кодировку if 1==1 ( type Log_for_cmd.txt ping 127.0.0.1 -n 5 > nul Cls Goto :StartPoint ) pause Нужно в строке "if 1==1 (" сделать поиск по файлу Log_for_cmd.txt и если в файле есть строка "Выгрузка информационной базы успешно завершена", то в условие не заходить... Поможете?)
#95
by Aleksey
Нужно в строке "if 1==1 (" сделать поиск по файлу Log_for_cmd.txt и если в файле есть строка "Выгрузка информационной базы успешно завершена", то в условие не заходить... @find "Выгрузка информационной базы успешно завершена" Log_for_cmd.txt >nul IF not %errorlevel%==0 ( type Log_for_cmd.txt choice /C Y /T 5 /D Y /M "Continue?" Cls Goto :StartPoint )
#96
by Cube
Вещь! Спасибо) Угу, я уже был близок к этому коду, но спасибо, что подсказал)) Итак, вот он, мой bat-файл, который либо делает архивную копию, либо показывает активные сеансы (продолжая делать попытки создать архивную копию): @echo off set ConnectionString=/F "D:1CBasesv82Моя база" /N "Логин" /P "Пароль" cd /d ArchivePath=D:1CBasesv82Моя базаАрхив :StartPoint echo %date% %time:~0,8% - Создание архивной копии... "C:Program Files1cv828.2.17.143in1cv8.exe" DESIGNER %ConnectionString% /DumpIB 1Cv8.dt /Out Log.txt rem Конвертируем лог-файл в DOS кодировку if exist Log_for_cmd.txt (del Log_for_cmd.txt /f /q) chcp 1251 >nul for /f "tokens=*" %%i in (Log.txt) do call:to866 "%%i" Goto :End :to866 chcp 866 >nul echo %~1 >>Log_for_cmd.txt chcp 1251 >nul exit/b :End chcp 866 >nul rem Закончили конвертирование лог-файла в DOS кодировку @find "Выгрузка информационной базы успешно завершена" Log_for_cmd.txt >nul if not %ErrorLevel%==0 ( type Log_for_cmd.txt choice /C Y /T 5 /D Y /M "Продолжить?" >nul Cls Goto :StartPoint ) echo %date% %time:~0,8% - Архивная копия успешно создана pause
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Массив как реквизит ТЧ.
- Как из подписки на событие вызвать обработку (упр.формы)
- v8: Документооборот: Ограничить права, чтобы пользователь видел только свои документы
- Установка цен номенклатуры в заказе покупателя
- ChipherLab 8300 - формат базы данных
- Новая мобильная платформа 8.3. Лицензирование.
- v7: Выполнение расшифровок при закрытой форме отчета
- УПП:ограничение доступа по подразделениям
- Медленный подбор номенклатуры
- v7: скорость работы 1с 7.7 в терминале с удаленного клиента
- ЗУП: показатели для расчета начисления
- УстановитьСсылкуНового в управляемой форме.
- УПП ввод начальных остатков по 20,26 и 44 счету
- УТ 11 СтоимостьРегл, СтоимостьБезНДС
- v7: Прописать одинаковый список баз 1С
- Внешняя обработка для заполнения объектов в УФ
- Конструктор внешних печатных форм NEW (обычные и управляемые приложения)
- Как открыть шару в Дебиан для сети Windows ?
- Подбираем читалку для отца.
- Ввод начальных остатков НДС в УТ11