1

Тема: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Добрый день!
Помогите с решением проблемы:
Есть файл с настройками программы prefs.js (файл настроек почтовой программы Thunderbird)

+ открыть спойлер

# Mozilla User Preferences

/* Do not edit this file.
*
* If you make changes to this file while the application is running,
* the changes will be overwritten when the application exits.
*
* To make a manual change to preferences, you can visit the URL about:config
*/

user_pref("app.update.backgroundErrors", 1);
user_pref("app.update.lastUpdateTime.addon-background-update-timer", 1363589114);
user_pref("app.update.lastUpdateTime.background-update-timer", 1363589354);
user_pref("app.update.lastUpdateTime.blocklist-background-update-timer", 1363589234);
user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1363588994);
user_pref("browser.cache.disk.capacity", 358400);
user_pref("browser.cache.disk.smart_size.first_run", false);
user_pref("browser.cache.disk.smart_size.use_old_max", false);
user_pref("browser.cache.disk.smart_size_cached_value", 358400);
user_pref("browser.display.use_document_fonts", 0);
user_pref("extensions.blocklist.pingCountTotal", 2);
user_pref("extensions.blocklist.pingCountVersion", 2);
user_pref("extensions.bootstrappedAddons", "{}");
user_pref("extensions.databaseSchema", 14);
user_pref("extensions.enabledAddons", "%7B972ce4c6-7e08-4474-a285-3208198ce6fd%7D:17.0.3");
user_pref("extensions.installCache", "[{\"name\":\"app-global\",\"addons\":{\"{972ce4c6-7e08-4474-a285-3208198ce6fd}\":{\"descriptor\":\"C:\\\\Program Files\\\\Mozilla Thunderbird\\\\extensions\\\\{972ce4c6-7e08-4474-a285-3208198ce6fd}\",\"mtime\":1363588060645}}}]");
user_pref("extensions.installedDistroAddon.tbtestpilot@labs. mozilla.com", true);
user_pref("extensions.lastAppVersion", "17.0.3");
user_pref("extensions.lastPlatformVersion", "17.0.3");
user_pref("extensions.pendingOperations", false);
user_pref("extensions.shownSelectionUI", true);
user_pref("extensions.ui.dictionary.hidden", true);
user_pref("extensions.ui.lastCategory", "addons://list/theme");
user_pref("extensions.ui.locale.hidden", true);
user_pref("font.minimum-size.x-cyrillic", 14);
user_pref("font.size.fixed.x-cyrillic", 14);
user_pref("mail.account.account1.identities", "id1");
user_pref("mail.account.account1.server", "server1");
user_pref("mail.account.account2.server", "server2");
user_pref("mail.account.lastKey", 2);
user_pref("mail.accountmanager.accounts", "account1,account2");
user_pref("mail.accountmanager.defaultaccount", "account1");
user_pref("mail.accountmanager.localfoldersserver", "server2");
user_pref("mail.append_preconfig_smtpservers.version", 2);
user_pref("mail.attachment.store.version", 1);
user_pref("mail.close_message_window.on_delete", true);
user_pref("mail.folder.views.version", 1);
user_pref("mail.identity.id1.archive_folder", "mailbox://nobody@Local%20Folders/%D0%90%D1%80%D1%85%D0%B8%D0%B2");
user_pref("mail.identity.id1.archive_granularity", 1);
user_pref("mail.identity.id1.archive_keep_folder_structure", false);
user_pref("mail.identity.id1.archives_folder_picker_mode", "1");
user_pref("mail.identity.id1.doBcc", false);
user_pref("mail.identity.id1.draft_folder", "imap://ivanov_ii@10.11.208.1/Drafts");
user_pref("mail.identity.id1.drafts_folder_picker_mode", "0");
user_pref("mail.identity.id1.encryptionpolicy", 0);
user_pref("mail.identity.id1.fcc_folder", "imap://ivanov_ii@10.11.208.1/Sent");
user_pref("mail.identity.id1.fcc_folder_picker_mode", "0");
user_pref("mail.identity.id1.fullName", "Иванов Иван Иванович");
user_pref("mail.identity.id1.htmlSigText", "С уважением,\nИванов Иван Иванович\nГлавный Работник ООО \"Рога и Копыта\"\nтел. (012) 345-67-89");
user_pref("mail.identity.id1.organization", "ООО \"Рога и Копыта\"");
user_pref("mail.identity.id1.reply_on_top", 1);
user_pref("mail.identity.id1.reply_to", "ivanov_ii@organization.ru");
user_pref("mail.identity.id1.sig_bottom", false);
user_pref("mail.identity.id1.sig_on_fwd", true);
user_pref("mail.identity.id1.sign_mail", false);
user_pref("mail.identity.id1.smtpServer", "smtp1");
user_pref("mail.identity.id1.stationery_folder", "imap://ivanov_ii@10.11.208.1/Templates");
user_pref("mail.identity.id1.tmpl_folder_picker_mode", "0");
user_pref("mail.identity.id1.useremail", "ivanov_ii@organization.ru");
user_pref("mail.identity.id1.valid", true);
user_pref("mail.openMessageBehavior.version", 1);
user_pref("mail.preferences.advanced.selectedTabIndex", 4);
user_pref("mail.preferences.applications.selectedTabIndex", 0);
user_pref("mail.preferences.compose.selectedTabIndex", 1);
user_pref("mail.preferences.display.selectedTabIndex", 0);
user_pref("mail.preferences.security.selectedTabIndex", 4);
user_pref("mail.rights.version", 1);
user_pref("mail.root.imap", "C:\\Documents and Settings\\n0b0dy\\Application Data\\Thunderbird\\Profiles\\6dk9oveq.default\\ImapMail");
user_pref("mail.root.imap-rel", "[ProfD]ImapMail");
user_pref("mail.root.none", "C:\\Documents and Settings\\n0b0dy\\Application Data\\Thunderbird\\Profiles\\6dk9oveq.default\\Mail");
user_pref("mail.root.none-rel", "[ProfD]Mail");
user_pref("mail.server.server1.ageLimit", 1);
user_pref("mail.server.server1.applyToFlaggedMessages", false);
user_pref("mail.server.server1.autosync_max_age_days", 30);
user_pref("mail.server.server1.cacheCapa.acl", false);
user_pref("mail.server.server1.cacheCapa.quota", false);
user_pref("mail.server.server1.check_new_mail", true);
user_pref("mail.server.server1.cleanupBodies", false);
user_pref("mail.server.server1.daysToKeepBodies", 1);
user_pref("mail.server.server1.daysToKeepHdrs", 1);
user_pref("mail.server.server1.directory", "C:\\Documents and Settings\\n0b0dy\\Application Data\\Thunderbird\\Profiles\\6dk9oveq.default\\ImapMail\\10. 11.208.1");
user_pref("mail.server.server1.directory-rel", "[ProfD]ImapMail/10.11.208.1");
user_pref("mail.server.server1.downloadByDate", false);
user_pref("mail.server.server1.downloadUnreadOnly", false);
user_pref("mail.server.server1.hostname", "10.11.208.1");
user_pref("mail.server.server1.keepUnreadOnly", false);
user_pref("mail.server.server1.login_at_startup", true);
user_pref("mail.server.server1.max_cached_connections", 5);
user_pref("mail.server.server1.name", "Organization");
user_pref("mail.server.server1.numHdrsToKeep", 2000);
user_pref("mail.server.server1.socketType", 0);
user_pref("mail.server.server1.spamActionTargetAccount", "imap://ivanov_ii@10.11.208.1");
user_pref("mail.server.server1.spamActionTargetFolder", "imap://ivanov_ii@10.11.208.1/Junk");
user_pref("mail.server.server1.storeContractID", "@mozilla.org/msgstore/berkeleystore;1");
user_pref("mail.server.server1.timeout", 29);
user_pref("mail.server.server1.type", "imap");
user_pref("mail.server.server1.userName", "ivanov_ii");
user_pref("mail.server.server2.ageLimit", 1);
user_pref("mail.server.server2.applyToFlaggedMessages", false);
user_pref("mail.server.server2.cleanupBodies", false);
user_pref("mail.server.server2.daysToKeepBodies", 1);
user_pref("mail.server.server2.daysToKeepHdrs", 1);
user_pref("mail.server.server2.directory", "C:\\Documents and Settings\\n0b0dy\\Application Data\\Thunderbird\\Profiles\\6dk9oveq.default\\Mail\\Local Folders");
user_pref("mail.server.server2.directory-rel", "[ProfD]Mail/Local Folders");
user_pref("mail.server.server2.downloadByDate", false);
user_pref("mail.server.server2.downloadUnreadOnly", false);
user_pref("mail.server.server2.hostname", "Local Folders");
user_pref("mail.server.server2.keepUnreadOnly", false);
user_pref("mail.server.server2.name", "Локальные папки");
user_pref("mail.server.server2.numHdrsToKeep", 2000);
user_pref("mail.server.server2.spamActionTargetAccount", "mailbox://nobody@Local%20Folders");
user_pref("mail.server.server2.spamActionTargetFolder", "mailbox://nobody@Local%20Folders/Junk");
user_pref("mail.server.server2.storeContractID", "@mozilla.org/msgstore/berkeleystore;1");
user_pref("mail.server.server2.type", "none");
user_pref("mail.server.server2.userName", "nobody");
user_pref("mail.smtpserver.smtp1.authMethod", 3);
user_pref("mail.smtpserver.smtp1.hostname", "10.11.208.1");
user_pref("mail.smtpserver.smtp1.port", 25);
user_pref("mail.smtpserver.smtp1.try_ssl", 0);
user_pref("mail.smtpserver.smtp1.username", "ivanov_ii");
user_pref("mail.smtpservers", "smtp1");
user_pref("mail.spam.manualMark", true);
user_pref("mail.spam.version", 1);
user_pref("mail.startup.enabledMailCheckOnce", true);
user_pref("mail.ui-rdf.version", 5);
user_pref("mailnews.database.global.datastore.id", "f56971bc-83c1-4e63-94f8-38fe9e9ca3c");
user_pref("mailnews.quotingPrefs.version", 1);
user_pref("mailnews.start_page.enabled", false);
user_pref("mailnews.start_page_override.mstone", "17.0.3");
user_pref("mailnews.tags.$label1.color", "#FF0000");
user_pref("mailnews.tags.$label1.tag", "Важное");
user_pref("mailnews.tags.$label2.color", "#FF9900");
user_pref("mailnews.tags.$label2.tag", "Рабочее");
user_pref("mailnews.tags.$label3.color", "#009900");
user_pref("mailnews.tags.$label3.tag", "Личное");
user_pref("mailnews.tags.$label4.color", "#3333FF");
user_pref("mailnews.tags.$label4.tag", "К исполнению");
user_pref("mailnews.tags.$label5.color", "#993399");
user_pref("mailnews.tags.$label5.tag", "Отложено");
user_pref("mailnews.tags.version", 2);
user_pref("messenger.startup.action", 0);
user_pref("network.cookie.prefsMigrated", true);
user_pref("toolkit.telemetry.prompted", true);
user_pref("xpinstall.whitelist.add", "");
user_pref("xpinstall.whitelist.add.36", "");

Строго в определенное место нужно подставлять значения (имя пользователя, полное имя, комментарий... ) из file2.txt полученного путем вывода команды

net user %username% /domain >> file2.txt 

Пример:

+ открыть спойлер

Этот запрос будет обрабатываться контроллером домена corp.organization.ru.

Имя пользователя ivanov_ii
Полное имя Иванов Иван Иванович
Комментарий Главный работник
Комментарий пользователя
Код страны 000 (Стандартный системный)
Учетная запись активна Yes
Учетная запись просрочена Никогда

Последний пароль задан 17.11.2012 13:04:40
Действие пароля завершается Никогда
Пароль допускает изменение 18.11.2012 13:04:40
Требуется пароль No
Пользователь может изменить пароль Yes

Разрешенные рабочие станции Все
Сценарий входа
Конфигурация пользователя
Основной каталог
Последний вход 18.03.2013 13:49:26

Разрешенные часы входа Все

Членство в локальных группах
Членство в глобальных группах *FTP
*Пользователи домена
Команда выполнена успешно.

В первый файл из второго необходимо подставлять:
1. Полное имя
user_pref("mail.identity.id1.fullName", "Иванов Иван Иванович");
вместо выделенного, подставить значение "Полное имя" из второго файла
2. Имя пользователя
user_pref("mail.identity.id1.useremail", "ivanov_ii@organization.ru");
вместо выделенного, подставить значение "Имя пользователя" из второго файла

2

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Никак, ибо файл «prefs.js» должен быть в UTF-8. Используйте другую технологию, нежели CMD/BAT.

3

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Можете посоветовать, что проще\лучше использовать для этого?
Java? VBS?

4

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

WSH

( 2 * b ) || ! ( 2 * b )

5

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Уважаемый Rumata, спасибо за указание направления. Пытаюсь осваивать WSH. Но т.к. я только приступил к основам, а нужный мне функционал нужен еще "вчера", прошу у Вас помощи, в реализации нужного куска кода. Хотя бы на примере одной замены, с подробными комментариями.

6

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Вежливость и честность украшают. )))

Файл hack_user_pref.wsf


<?xml version="1.0" encoding="utf-8" ?>
<package>
<job id="prefs">
<script language="javascript">

function user_pref(name, value)
{
    if ( name == 'mail.identity.id1.fullName' ) {
        WScript.Echo(value);
    }
};

</script>
<script language="javascript" src="путь/до/файла/prefs.js"></script>
</job>
</package>

Функция user_pref объявлена в используемом Вами приложении и настоящий ее код выполняет другие операции, но в нашем случае Вам требуется получить определенные данные, поэтому описываем свою функцию user_pref, которая проверяет входные аргументы и выводит только требуемые в данной ситуации.

Далее подключается файл настроек prefs.js, который полностью состоит из вызовов функции user_pref. Так как мы сами описали эту функцию в нашем скрипте, то и выполнять она будет действия, определенные нами. В данном случае - вывод значения (второй аргумент) только если первым аргументом была строка mail.identity.id1.fullName.

Запуск скрипта осуществляется из командной строки

cscript hack_user_pref.wsf
( 2 * b ) || ! ( 2 * b )

7

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Спасибо за оперативный ответ, но при попытке запуска получаю ошибку

8 (изменено: Rumata, 2013-03-25 15:12:16)

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

В файле prefs.js обязательно должна присутствовать следующая строка?

# Mozilla User Preferences
( 2 * b ) || ! ( 2 * b )

9

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Данная строчка присутствует.


# Mozilla User Preferences

/* Do not edit this file.
 *
 * If you make changes to this file while the application is running,
 * the changes will be overwritten when the application exits.
 *
 * To make a manual change to preferences, you can visit the URL about:config
 */

user_pref("app.update.lastUpdateTime.addon-background-update-timer", 1364186682);
user_pref("app.update.lastUpdateTime.background-update-timer", 1364186922);
user_pref("app.update.lastUpdateTime.blocklist-background-update-timer", 1364186802);
user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1364186562);
user_pref("browser.cache.disk.capacity", 358400);
user_pref("browser.cache.disk.smart_size.first_run", false);
user_pref("browser.cache.disk.smart_size.use_old_max", false);
user_pref("browser.cache.disk.smart_size_cached_value", 358400);
user_pref("browser.display.use_document_fonts", 0);
...

10

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Данная строчка присутствует.

проблема в ней

( 2 * b ) || ! ( 2 * b )

11

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

alexii пишет:

Никак, ибо файл «prefs.js» должен быть в UTF-8. Используйте другую технологию, нежели CMD/BAT.

alexii, препятствие именно в этом? А если бы файл был в Windows-1251 или даже CP866, что бы изменилось?

12

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

wisgest, тогда можно было бы пытаться извращаться .

13 (изменено: wisgest, 2014-02-10 12:52:36)

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

alexii, насчёт «извращаться» согласен — задача  не очень удобная для решения на языке командных файлов не взирая на кодировки.
Но меня интересуют возможности использования командных файлов для работы с Unicode. И насколько я могу судить, данный случай не сложнее того, если бы файл был в Windows-1251 (почти один к одному, только вместо 1251, должно было бы быть 65001).
Тут, скорее всего, не надо было бы даже перекодировать сам обрабатываемый файл ни целиком, ни построчно: разделители строк в UTF-8 те же самые, что и в однобайтных кодировках, а из каких байтов состоят строки — уже не важно, их всё равно можно получать через SET /P или FOR /F, пропускать через MORE и FIND и выводить с помощью ECHO без потерь в файл, который в итоге будет получаться тоже в UTF-8. Единственное, что надо перекодировать в UTF-8 — строки, которые надо подставить в итоговый файл, но это уже не сложно, например:

chcp 65001>nul  &  cmd /c echo %username%>tmp.txt  &  chcp 866>nul
set /p username=<tmp.txt
del tmp.txt

(10.02.2014: кое-какое воплощение можно найти здесь: http://forum.script-coding.com/viewtopi … 898#p79898, только для преобразуемые строки  предварительно сохраняются в файл в UTF-16 с BOM и уже он преобразуется в UTF-8, чтобы не вызывать CHCP.COM дважды для каждой строки.)
Но может, я в чём-то ошибаюсь, поэтому вопрос и возник.

14

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

wisgest, вот потому и не хочется даже затеваться с UTF-8 на пакетных файлах .

15

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

alexii пишет:

вот потому

Намёк не понял.
alexii, извиняюсь за занудство и тугодоумие: дело в описанной в теме задаче (и тогда я умолкаю: меня она не интересует, n0b0dy, думаю уже тоже) или, действительно, только в кодировке (в этом случае, впрочем, я тоже, скорее всего, хотя бы на время умолкну для раздумий)?

16

Re: CMD/BAT: Как вставить определенные данные из одного файла в другой?

Возможно, я не так или излишне эмоционально выразился.

На мой взгляд для работы с заменами и кодировками, отличными от OEM/866 и ANSI/1251 лучше использовать WSH или PoSH. Теоретически можно всё сделать на пакетных файлах, но полученный код зачастую выглядит просто устрашающе.