Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Игнорировать русские буквы в строке

Ответить
Настройки темы
CMD/BAT - [решено] Игнорировать русские буквы в строке

Аватара для Sick_013

Новый участник


Сообщения: 9
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Всем привет! есть скрипт, который записывает ключ в .conf файл значение которого берется из переменных окружения и записи вида .test (имитирует доменное имя), этот скрипт записывает имя ПК в нижнем регистре, осталась одна проблема: если имя ПК содержит русские буквы - они записываются как точки или кавычки
Вопрос: как проигнорировать русские буквы в этом скрипте?

Код: Выделить весь код
@echo off
set LowerCaseMacro=for /L %%n in (1 1 2) do if %%n==2 (for %%# in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set "result=!result:%%#=%%#!") else setlocal enableDelayedExpansion ^& set result=
set "string=%COMPUTERNAME%_%RANDOM%"
%LowerCaseMacro%%string%
Find /I "certname=" "%USERPROFILE%\Desktop\file.conf" 1>nul||Echo certname=%result%.test>>"%USERPROFILE%\Desktop\file.conf"

Отправлено: 07:14, 07-09-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Вариант на Powershell, где русские буквы должны вставляться корректно
Код: Выделить весь код
$file = "$env:USERPROFILE\Desktop\file.conf"
$value = ($env:COMPUTERNAME.ToLower().ToCharArray() -notmatch "[а-я]" -join '') + "_" + (get-random -Maximum 99999) + ".test"
(gc "$file") -replace "^certname=.*","certname=$value" |Set-Content "$file"

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 07-09-2020 в 20:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:07, 07-09-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Sick_013

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Наверное я не совсем правильно описал задачу, мне нужно именно проигнорировать русские буквы, powershell тоже подойдет, подойдет вообще все что можно обернуть в .exe

Отправлено: 16:58, 07-09-2020 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Поправил, пробуйте.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 20:30, 07-09-2020 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Sick_013:
Наверное я не совсем правильно описал задачу »
Вы описали не задачу, а способ неверного решения чего-то...
Опишите именно задачу, потому как абсолютно непонятно, зачем игнорировать какие-либо символы, в принципе...
Ничего невозможного, конечно, в этом нет, но хотелось бы понять для чего это требуется...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:14, 07-09-2020 | #5


Аватара для Sick_013

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Опишите именно задачу »
Игнорировать символы необходимо, так как ключ который добавляется этим скриптом это имя сертификата, в нём разрешены только латинские буквы в нижнем регистре, цифры и некоторые знаки: тире, нижнее подчеркивание, точка .. возможно еще какие то. Так как я в любом случае оберну этот скрипт в exe (для того чтобы добавить его в msi пакет как custom action) я решил написать его на python и скомпилировать с pyinstaller.
Вдруг кому пригодится:
Код: Выделить весь код
import re
import socket
import random
import os

pcname = re.sub(r'[^a-zA-Z0-9"-_"]', '', (socket.gethostname()))
rand=str(random.randint(10001,99999))
certname = ("certname="+pcname.lower()+"_"+rand+".test")
pdata=os.getenv('PROGRAMDATA')
with open(pdata+"/path/to/dir/file.conf", "r+") as f:
    line_found = any("certname=" in line for line in f)
    if not line_found:
        f.seek(0, os.SEEK_END)
        f.write(certname)
Вопрос можно считать закрытым

Отправлено: 09:09, 08-09-2020 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Игнорировать русские буквы в строке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Windows 10 English на планшете, русские буквы и русские программы tumanovalex Microsoft Windows 10 3 04-06-2017 12:34
Русские буквы в URL antOOn Хочу все знать 12 24-01-2005 13:50
Русские буквы в Fluxbox karlison Общий по Linux 7 14-03-2004 20:18
русские буквы в Redhat8.0 Ge0rge Общий по Linux 6 30-10-2003 03:09
mc и русские буквы unknown Общий по Linux 6 21-07-2003 08:09




 
Переход