Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
VBS

Проверка файла и запись в случае отсутствия

09.06.2018, 10:13. Показов 4330. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, приветствую.
Помогите, пожалуйста, решить задачку
Есть системная переменная пользователя %username%, возвращающая пользователя системы, например, пользователь test (пользователей несколько десятков)
Для каждого пользователя в шаре лежит некая конфигурация:
\\share\folder\%username%\config.v8i
Для подключения этого конфига, необходимо обратиться к локальному профилю пользователя и внести изменение в конфигурационный файлик, но предварительно проверить, нет ли этой записи. Конфигурация располагается здесь:
%appdata%\1C\1CEStart\1CEStart.cfg

Содержимое, подлежащее добавлению:
CommonInfoBases=\\share\folder\test(по переменной пользователя)\config.v8i
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.06.2018, 10:13
Ответы с готовыми решениями:

COM Port и WriteFile - Запись успешна в случае отсутствия 0
И снова здравствуйте! Изучаю работу с COM портом, пример взял отсюда. Все вроде замечательно, открытие, чтение и запись, но! Запись...

Замена файла в случае отсутствия пинга
Друзья помогите. Создать bat чтобы он пинговал определенный host и если пинга нет то заменял файл в нужной папке копированием. буду...

Как отменить загрузку текста в TextBox из файла в случае его отсутствия
При изменении Texbox'ов программа записывает в фаил "1.txt" изменения. А при запуске программы изменяет значения Texbox'ов на указанные в...

49
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
14.06.2018, 19:21  [ТС]
Студворк — интернет-сервис помощи студентам
Приходится вымудрять.
Сейчас попытаюсь всё расписать, но боюсь, что могу ещё больше запустить и так не очень понятный от меня запрос.
По ходу тестирования, получается следующее:
ibases.v8i копировать в профиль оказывается не очень правильно. Втечение дня он может изменяться, а копировать каждые N-минут не очень правильно. Потому, правильнее прописать путь до этого конфига в 1CEStart.cfg. Т.е. любое изменение в списке баз при перезапуске клиента сразу же будет видно.
Но, дело в том, что локальный ibases.v8i , что хранится в %appdata% - является неким кэшем что ли, поскольку в него прописываются те же базы, что в подключаемом \\share\i.ivanov\ibases.v8i
Т.е. файл можно создать хоть пустой, хоть скопировать из шары (это выяснилось не давно) - всё равно, лишь бы он был.
Что необходимо сделать - так это прописать в 1CEStart.cfg следующие строки:

AppAutoInstallLastVersion=1
UseHWLicenses=1
CommonInfoBases=\\share\user\ibases.v8i


Потому по ходу из-за сложности вашего кода (для меня) , пришлось воротить то, что я привёл выше
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
14.06.2018, 20:20
Цитата Сообщение от vanillasoup Посмотреть сообщение
а копировать каждые N-минут не очень правильно.
Вы просили, чтобы он был скопирован в случае отсутствия, что и сделано в моём коде. Ни про какие N-минут тут речь не идёт.
Ключи в вашем коде не проверяются, а постоянно переписывают файл. А ряд строк и переменных просто висят в воздухе и не соответствуют своим задачам.
Ничего особо сложного в моём коде нет. Два ключа я добавляю:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Option Explicit
Dim Share, OutDir, UserName, Config, c,_
ibases, KeyStr, RegExp, Text, Str, oFile
 
Share = "\\share\"
 
With CreateObject("Shell.Application")
  OutDir = .NameSpace(26).Self.Path & "\1C\1CEStart\"
  .NameSpace(26).NewFolder "1C\1CEStart"
  UserName = .NameSpace(40).Title
End With
Config = OutDir & "1CEStart.cfg"
ibases = OutDir & "ibases.v8i"
KeyStr = "CommonInfoBases=" & Share & UserName & "\ibases.v8i"
 
Set RegExp = New RegExp : RegExp.Global = 1
RegExp.IgnoreCase = 1 : RegExp.Pattern = "[.\\]"
 
With CreateObject("Scripting.FileSystemObject")
  If Not .FileExists(ibases) Then .CopyFile Mid(KeyStr, 17), ibases
  If .FileExists(Config) Then
    Text = .OpenTextFile(Config).ReadAll
    For Each Str in Array(RegExp.Replace(KeyStr, "\$1"),_
      "AppAutoInstallLastVersion=1", "UseHWLicenses=1")
      RegExp.Pattern = "(^|\r?\n)" & Str & "(\r?\n|$)"
      If Not c Then c = 1 : Set oFile = .OpenTextFile(Config, 8)
      If Not RegExp.Test(Text) Then oFile.WriteLine Str
    Next
  Else .CopyFile Share & .GetFileName(Config), Config
  End If
End With
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
14.06.2018, 21:05  [ТС]
Спасибо, завтра попробую затестить. Отпишусь о результате
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
14.06.2018, 23:13
ОК. Слегка поспешил, 26-27 строки надо заменить на:
Visual Basic
1
2
3
4
      If Not RegExp.Test(Text) Then
        If Not c Then c = 1 : Set oFile = .OpenTextFile(Config, 8)
        oFile.WriteLine Str
      End If
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
15.06.2018, 07:13  [ТС]
Получаю ошибку.
При проверке на существование ibases (20 строка):
Visual Basic
1
  If Not .FileExists(ibases) Then .CopyFile Mid(KeyStr, 17), ibases
Недопустимое имя или номер файла
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
15.06.2018, 13:13
Вы же выше писали:
Цитата Сообщение от vanillasoup Посмотреть сообщение
Вроде бы всё отрабатывает
Строка же не изменилась. Проверьте существование файла \\share\USERNAME\ibases.v8i.
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
15.06.2018, 15:20  [ТС]
Все верно. Отрабатывала. И файл само собой на месте, первым делом проверил
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
15.06.2018, 19:36
А проверялось в аналогичных условиях?
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
16.06.2018, 10:59  [ТС]
Да и условия вроде как аналогичные, тот же стенд
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
16.06.2018, 19:02
Тогда и на первый вариант должна быть ругань. Проверялось?
Можно, конечно, так обойти — вместо этой строки написать:
Visual Basic
1
2
  If Not .FileExists(ibases) Then If .FileExists(Mid(KeyStr, 17)) Then _
  .CopyFile Mid(KeyStr, 17), ibases Else .CreateTextFile ibases
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
19.06.2018, 06:51  [ТС]
Поправил, на данный момент с учётом всех исправлений код выглядит так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Option Explicit
Dim Share, OutDir, UserName, Config, c,_
ibases, KeyStr, RegExp, Text, Str, oFile
 
Share = "\\10.64.3.61\ss"
 
With CreateObject("Shell.Application")
  OutDir = .NameSpace(26).Self.Path & "\1C\1CEStart\"
  .NameSpace(26).NewFolder "1C\1CEStart"
  UserName = .NameSpace(40).Title
End With
Config = OutDir & "1CEStart.cfg"
ibases = OutDir & "ibases.v8i"
KeyStr = "CommonInfoBases=" & Share & UserName & "\ibases.v8i"
 
Set RegExp = New RegExp : RegExp.Global = 1
RegExp.IgnoreCase = 1 : RegExp.Pattern = "[.\\]"
 
With CreateObject("Scripting.FileSystemObject")
   If Not .FileExists(ibases) Then If .FileExists(Mid(KeyStr, 17)) Then _
  .CopyFile Mid(KeyStr, 17), ibases Else .CreateTextFile ibases
  If .FileExists(Config) Then
    Text = .OpenTextFile(Config).ReadAll
    For Each Str in Array(RegExp.Replace(KeyStr, "\$1"),_
      "AppAutoInstallLastVersion=1", "UseHWLicenses=1")
      RegExp.Pattern = "(^|\r?\n)" & Str & "(\r?\n|$)"
If Not RegExp.Test(Text) Then
        If Not c Then c = 1 : Set oFile = .OpenTextFile(Config, 8)
        oFile.WriteLine Str
      End If
    Next
  Else .CopyFile Share & .GetFileName(Config), Config
  End If
End With
Однако, опять ошибка.
Недопустимый вызов или аргумент процедуры. Строка 32, символ 8
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
19.06.2018, 07:00
Цитата Сообщение от FlasherX Посмотреть сообщение
Проверялось?
Мне думается, всё же не проверялось. Я прав?

А теперь барабанная дробь.. Разницу видите?
Цитата Сообщение от FlasherX Посмотреть сообщение
Visual Basic
1
Share = "\\share\"
Цитата Сообщение от vanillasoup Посмотреть сообщение
Visual Basic
1
Share = "\\10.64.3.61\ss"
Это касается и предыдущей ошибки.
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
19.06.2018, 07:13  [ТС]
Проверялос.
О, нет, с разницей вы не правы
Везде для форума менял свои адреса, на \\share (это просто псевдоним, который не используется в скрипте)
И в итоге высветил адрес тестовой среды
В моём случае \\share - это и есть вышеприведенный IP с каталогом)
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
19.06.2018, 07:16
Я то как раз прав. Дело не в другом расшаренном каталоге. Внимательно присмотритесь к окончаниям.
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
19.06.2018, 07:31  [ТС]
А что не так с каталогом?
То ли это шара верхнего уровня, то ли 2го, 3го ... есть ли разница?
\\ip или \ip\ss
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
19.06.2018, 07:35
При чём тут каталог? Я вам про окончание пишу. В моём случае бэкслэш есть, в вашем — нет. Ну, неужели не очевидно?
Если его нет, то завершающая папка в пути не отделяется от имени файла, склеиваясь в одно имя. Отсюда и обе ошибки.
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
19.06.2018, 08:29  [ТС]
Спасибо большое, да, дело было в невнимательности.
Всё корректно отработало. Спасибо большое, за всё это время я знатно Вам мозг прополоскал, уж простите
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
19.06.2018, 08:45
Пожалуйста. Главное разобрались. И как стало понятно, последняя правка оказалась лишней.
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
19.06.2018, 08:57  [ТС]
Да, я уже проверил и предыдущий релиз. Всё корректно. Ещё раз спасибо
0
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 35
05.09.2018, 10:12  [ТС]
Я что-то совсем застрял, с тестов ушли к внедрению и снова наступаю на какие-то грабли((

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit
Dim Share, OutDir, UserName, Config, c,_
ibases, KeyStr, RegExp, Text, Str, oFile
 
Share = "\\srv1\distr\v8i\"
 
With CreateObject("Shell.Application")
  OutDir = .NameSpace(26).Self.Path & "\1C\1CEStart\"
  .NameSpace(26).NewFolder "1C\1CEStart"
  UserName = .NameSpace(40).Title
End With
Config = OutDir & "1CEStart.cfg"
ibases = OutDir & "ibases.v8i"
KeyStr = "CommonInfoBases=" & Share & UserName & "\ibases.v8i"
 
Set RegExp = New RegExp : RegExp.Global = 1
RegExp.IgnoreCase = 1 : RegExp.Pattern = "[.\\]"
 
With CreateObject("Scripting.FileSystemObject")
  If Not .FileExists(ibases) Then .CopyFile Mid(KeyStr, 17), ibases
  If .FileExists(Config) Then
    Text = .OpenTextFile(Config).ReadAll
    For Each Str in Array(RegExp.Replace(KeyStr, "\$1"),_
      "AppAutoInstallLastVersion=1", "UseHWLicenses=1")
      RegExp.Pattern = "(^|\r?\n)" & Str & "(\r?\n|$)"
If Not RegExp.Test(Text) Then
        If Not c Then c = 1 : Set oFile = .OpenTextFile(Config, 8)
        oFile.WriteLine Str
      End If
    Next
  Else .CopyFile Share & .GetFileName(Config), Config
  End If
End With
Файлик конфигурации копируется (1CEStart.cfg), однако, не прописывается "CommonInfoBases=" & Share & UserName & "\ibases.v8i"
При повторном запуске скрипт, он ругается на строку 27, символ 31 с ошибкой "Разрешение отклонено" и в этом случае пытается добавить содержимое в файл, но в очень странном виде:
CommonInfoBases=\$1\$1srv1\$1distr\$1v8i \$1dimtest\$1d\$1g\$1ibases\$1v8i
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.09.2018, 10:12

Добавление строк, взятых из одного файла, в другие файлы в случае отсутствия этих строк в этих файлах
Есть древо папок с файлами 2.apk\res\values\strings.xml 2.apk\res\values-ru\strings.xml 2.apk\res\values-en\strings.xml Папок вида ...

Запустить процесс в случае его отсутствия
Мне нужно, чтобы программа взяла процессы, и если нету explorer.exe то включить его, потом подождать 20 сек и опять проверить и тд. Не могу...

Переподнятие сетевого интерфейса в случае отсутствия интернета
Есть скрипт: #!/bin/sh count6=0 count6=$(ping -c 1 8.8.8.8 | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }') ...

Условие для запроса в случае отсутствия записи в БД
Всем привет! Помогите пожалуйста с такой проблемой. Пользователь заполнет форму, в одном из полей формы он вводит код клиента. По...

Не выдается сообщение в случае отсутствия положительных элементов массива
Помогите пожалуйста, считает и заменяет все правильно, а вот если положительных элемент нет, сообщение не выдает. Все отрицательные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru