Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Игнорировать русские буквы в строке (http://forum.oszone.net/showthread.php?t=346368)

Sick_013 07-09-2020 07:14 2933164

Игнорировать русские буквы в строке
 
Всем привет! есть скрипт, который записывает ключ в .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"


DJ Mogarych 07-09-2020 13:07 2933199

Вариант на 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"


Sick_013 07-09-2020 16:58 2933237

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

DJ Mogarych 07-09-2020 20:30 2933271

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

YuS_2 07-09-2020 21:14 2933277

Цитата:

Цитата Sick_013
Наверное я не совсем правильно описал задачу »

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

Sick_013 08-09-2020 09:09 2933308

Цитата:

Цитата 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)

Вопрос можно считать закрытым :up


Время: 15:24.

Время: 15:24.
© OSzone.net 2001-