[Цитировать]

    JuraAD
  • 28398
  • Стаж: 2 года 9 месяцев
  • Сообщений: 72
  • Репутация:26

    [+] [-]
cartmenezz, Ну, можно через busybox bash сделать у него круче возможности по обрезке строк

Пример

Каталог
.\00.get_pic.cmd
.\bin\00.get_pic.sh
.\bin\busybox.man
.\bin\busybox32.exe
.\bin\busybox64.exe
.\00.get_pic.cmd
@echo off&setlocal enableextensions enabledelayedexpansion
set a=%~dp0
set a=%a:\=/%
%~dp0bin\busybox64.exe bash -c "%a%bin/00.get_pic.sh";
endlocal&exit /b 0
.\bin\00.get_pic.sh
#!bash
dir_w=$(pwd)/html_1;
echo -e "\n###\t$(dirname ${0})";
echo -e "\n###\t${0}";
echo -e "###\t${dir_w}\n";
#function html_w {
# echo ${1};
#};
html_w () {
echo -e "###\t${1}";
};
for file_w in $(find "${dir_w}" -name "*.html" -type f -print;); do html_w ${file_w}; done;
Это заготовка для разбора загруженных файлов html

Работа со строками

# Удаление с начала строки, до первого совпадения
f="path1/path2/file.ext"
extension="${f#*.}" # = "ext"
# Удаление с начала строки, до последнего совпадения
f="path1/path2/file.ext"
filename="${f##*/}" # = "file.ext"
# Удаление с конца строки, до первого совпадения
f="path1/path2/file.ext"
dirname="${f%/*}" # = "path1/path2"
# Удаление с конца строки, до последнего совпадения
f="path1/path2/file.ext"
root="${f%%/*}" # = "path1"
### sed монстр обработки строк в файлах по регулярным выражениям - винде и не снилось... -)))
и т.д...
busybox bash Как удачно написал -)))

sed

.test3_v2.cmd
@echo off&setlocal enableextensions enabledelayedexpansion
set a=%~dp0
set a=%a:\=/%
B:\sys\util\linux\x64_\busybox.exe sed "s@\(.*/\)\([^=]*\)=*.*@\1\t\2@" "%a%.test3.txt" >"%a%.test3_.txt"
endlocal&exit /b 0
получаешь файл с твоими строками разделенными табуляцией .test3_.txt -) Так годится?
Чтоб перевод строки был годным для выни и dos лучше так сделать
...
B:\sys\util\linux\x64_\busybox.exe sed "s@\(.*/\)\([^=]*\)=*.*@\1\t\2\r@" "%a%.test3.txt" >"%a%.test3_.txt"
...

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
JuraAD, aa
100572Так годится?
Более чем) Я и сам в итоге пришел к sed, так как с ним нужный результат с минимумом движений.
Мне, собственно, нужно обрабатывать строки полученные с Android устройств, и там тоже есть sed (как выяснилось), решил сделать предварительную обработку сразу на устройстве.
Правда, я совершенно не разбираюсь в командах Линукса (bash?) и sed в частности. Но благодаря гуглу немного разобрался в синтаксисе sed, и вроде как нужный мне результат можно получить коротенькой командой:
sed -e 's/.apk=/.apk /g'"
и ".apk=" превращается в ".apk " и уже можно нормально обработать в цикле.
Не знал что есть sed под винду. Подскажите, мне будет достаточно одного "busybox.exe" для использования sed? какой минимальный набор файлов для стабильной работы? мне нужен портативный варинт... Есть какие-то требования к системе? установка C++/.Net не требуется?
и еще, может быть знаете, sed есть в любом Линуксе? если да, хочется верить что и в Android так же... так и не смог найти инфы, подозреваю что это неотъемлимая часть системы (вернее хочу в это верить), но подтвердить не удалось

[Цитировать]

    vovan1982
  • 214
  • Стаж: 9 лет 3 месяца
  • Сообщений: 1100
  • Репутация:76

    [+] [-]
  • Откуда: Ростов-на-Дону
cartmenezz, андроид же на основе Линукса собран. У него busybox есть. Ну а если нет, то его можно установить. Из себя он представляет подобие cmd.exe с комплектом встроенных программ bush. Но набор неполный.

[Цитировать]

    JuraAD
  • 28398
  • Стаж: 2 года 9 месяцев
  • Сообщений: 72
  • Репутация:26

    [+] [-]
...
Не знал что есть sed под винду. Подскажите, мне будет достаточно одного "busybox.exe" для использования sed? какой минимальный набор файлов для стабильной работы? мне нужен портативный варинт... Есть какие-то требования к системе? установка C++/.Net не требуется?
...
busybox.exe --help в помощь... вполне автономная утилитке, под вынь-pe не запускал, мож и руганется на runtime какой-нибудь...
Можно вручную собрать из пакетов, но я задолбался и когда-то написал скрипты для сборки утилит из выкачанных cygwin и msys, выполнить можно из busybox bash, список необходимого идет после "##### pkglist", устанавливается все с зависимостями, получается структура порядка 50-100МБ (тока проверить нужно - давно не обновлял -))) )

cygwin

.inst_c.sh
#!bash
#${1}  srcini  e:\.download\.prog\.cygwin.6\x86_64\setup.ini
#${2}  srcdir  e:\.download\.prog\.cygwin.6
#${3}  dstdir  o:\sys\util\linux\c64.6
##set
##echo ${#} ${*}
_error() {
echo -en 'srcini='${1//\\/\\\\}'\nsrcdir='${2//\\/\\\\}'\ndstdir='${3//\\/\\\\}'\n';
};
#####  default set
echo -en '###\tdefault set\n';
##_error ${*};
if [ -z "${1}" -o -z "${2}" -o -z "${3}" ]; then echo 'error'; _error ${*}; exit 1; fi;
rm -rf "${3}"; mkdir -p "${3}";
#####  get pkglist (end of list - '#' or 'eof')
echo -en '###\tget pkglist\n';
dstlst="${3}/pklist"; dstini="${dstlst}.ini";
exec 5>"${dstlst}" 6<"${dstlst}" 7>"${dstini}" 8<"${dstini}";
>&5 sed -n '/^#####\tpkglist/I,/^#/{s@^[ \t]\+@@;s@[ \t#]\+.*$@@;ta;:a;s@^$@@;tz;p;:z}' "${0}";
while read str; do
echo -en '# get:'${str}'\n';
echo -e $(sed -n '/^\x40 '${str}'$/I,/^[\x40\x5b]/I{s@^[ \t\x40\x5b].*$@@;ta;s@^\([rvi]\)\(equires\|ersion\|nstall\)\x3a *@\1=@;Ta;s@^\(i=[^ ]*\).*$@\1@;p;:a;}' "${1}")
done <&6;
exec 5>&- 6>&- 7>&- 8>&-;
exit;
#####  pkglist
bash
bzip2
coreutils
diffutils
gawk
grep
gzip
mc
ncurses
readline
sed
tar
tzdata
util-linux
xz

msys

.inst_m.sh
#!bash
#${1}  srcini  /mnt/e/.download/.prog/.msys.6/x86_64/msys.db.tar.gz
#${2}  srcdir  /mnt/e/.download/.prog/.msys.6/x86_64
#${3}  dstdir  /mnt/O/sys/util/linux/m64.6
#echo ${#} ${*}
_error() {
echo -en 'srcini='\t${1//\\/\\\\}'\n\tsrcdir='${2//\\/\\\\}'\n\tdstdir='${3//\\/\\\\}'\n';
};
#####  default set
echo -en '###\tdefault set\n';
if [[ -z "${1}" || -z "${2}" || -z "${3}" ]]; then echo -en 'err:\n'; _error ${*}; exit 1; fi;
#####  set pkglist
echo -en '###\tset pkglist\n';
dstdir="${3}"; dstarch="${3}/_"; dstlst="${3}/pklist"; dstini="${dstlst}.ini"; dsterr="${dstlst}.err"; dstcfg="${dstlst}.cfg";
rm -rf "${dstdir}" "${dstarch}"; mkdir -p "${dstdir}" "${dstarch}";
if ! ([[ -r "${1}" ]] && $(2>/dev/null tar -C "${dstarch}" -xf "${1}");); then echo -en 'err:\t'${1}'\n'; exit 1; fi;
for a0 in $(ls -1A "${dstarch}";); do
echo -en '\t'${a0}'\n';
[[ -f "${dstarch}/${a0}/desc" ]] || (>>"${dsterr}" echo -en 'err:\t'${a0}'/desc\n'; continue;);
>>"${dstini}" echo -en $(sed -n '/^%NAME%/I{n;p}' "${dstarch}/${a0}/desc")'\t'$(sed -n '/^%FILENAME%/I{n;p}' "${dstarch}/${a0}/desc")'\t'$(sed -n '/^%VERSION%/I{n;p}' "${dstarch}/${a0}/desc")'\t'$(sed -n '/^%DEPENDS%/I{n;:a;s@\n$@@;tz;N;Ta;:z;s@\n@ @g;s@[=\<\>][^ ]*@@g;p}' "${dstarch}/${a0}/desc")'\n';
done; rm -rf "${dstarch}";
#####  get pkglist
echo -en '###\tget pkglist\n';
>"${dstlst}" sed -n '/^#####\tpkglist/I,/^#/{s@^[ \t]\+@@;s@[ \t#]\+.*$@@;ta;:a;s@^$@@;tz;p;:z}' "${0}";
while read a0; do
echo -en '\t'${a0}'\n';
a1=$(sed -n '/^'${a0}'\t/I{s@^[^\t]*\t@@;s@\t[^\t]*\t@\t@;p}' "${dstini}";);
for a9 in ${a1#*  }; do [[ -z $(sed -n '/^'${a9//./\\.}'$/Ip' "${dstlst}";) ]] && >>"${dstlst}" echo -en ${a9}'\n'; done;
[[ -z ${a1} ]] && >>"${dsterr}" echo -en 'err:\t'${a0}'\n' || (>>"${dstcfg}" echo -en ${a1%  *}'\n'; 2>/dev/null tar -C "${dstdir}" -xf "${2}/${a1%  *}";)
done <"${dstlst}";
exit;
#####  pkglist
msys2-runtime
bash
bzip2
coreutils
diffutils
gawk
grep
gzip
mc
sed
tar
util-linux
xz
#tzcode
#ncurses
#readline

ссылки

Можно взять нужный пакет и по зависимостям добавить нужные, в скрипте видно как -) Я тупо брал syncovery и выкачивал репозитории (осторожно - много ГБ -))) ), когда нужно - обновлял
ftp://mirror.yandex.ru/mirrors/msys2/mingw
http://repo.msys2.org/mingw/i686/
http://repo.msys2.org/mingw/x86_64/
http://repo.msys2.org/mingw/sources/
ftp://mirror.yandex.ru/mirrors/msys2/msys
http://repo.msys2.org/msys/i686/
http://repo.msys2.org/msys/x86_64/
http://repo.msys2.org/msys/sources/
ftp://sourceware.org/pub/cygwin/
Готовые выложить некуда, а общие ресурсы лень использовать - регистрироваться... -)
А в общем, есть отдельными файлами утилитки, например:
https://gnuwin32.sourceforge.net/packages/sed.htm
https://sourceforge.net/projects/gnuwin32/files/sed/
https://sourceforge.net/projects/unxutils/files/unxutils/current/
- если смущает год выпуска, вполне рабочие варианты - это базовые утилитки для linux, там уже давно ничего не меняется (почти) -)))

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
100581андроид же на основе Линукса собран. У него busybox есть. Ну а если нет, то его можно установить.
Вроде бы, как раз надо устанавливать. Все изобилие команд bash и не нужно, я их все равно не знаю)) А вот grep и sed похоже на всех Android устройствах есть, ну или почти на всех. Grep я уже давно немножко задействовал и пока проблем не встречал, и за последние несколько дней успел немного попроверять наличие sed, и пока не наткнулся на отсутствие. Правда попался один старенький планшет Prestigio, где sed был, но команда не отрабатывала как надо... а так, везде все было нормально, и на смартфонах и на Android TV / Google TV.
Пришел к такому варианту:
- Обрабатывать строки сразу на устройстве через sed
- Добавить резервный вариант, с обработкой на ПК (медленнее, но без сюрпризов типа "sed не обнаружен")
Но теперь, наверное, в виде второго резервного варианта оставлюсь на обработке на ПК, но так же через sed, раз уж такая возможность есть.
Опробую, премного благодарен. Ту версию busybox вчера опробовал, забрав один только файл busybox.exe, sed работал, ругани на отсутствие чего-либо не было. И на VirusTotal практически чисто, одна реакция.

[Цитировать]

    pitronic
  • 28626
  • Стаж: 2 года 8 месяцев
  • Сообщений: 24
  • Репутация:0

    [+] [-]
Доброго времени суток. Мне нужен батник запуск программмы на флешке с параметром. Есть у меня брайзер Cent browser portable, он у меня на флешке. Как вы понимаете в дугом компьютере буква флешки меняется. В этом браузере у меня 4 профиля. Мне как то давали здесь, запуск батника с поиском на всех дисках. Попробовал заменить на exe без параметров запускается норм, а спараметром профиля не как.
Так выглядит рабочий батник с обсолютным путём: start "" "E:\Cent Browser\chrome.exe" --profile-directory="Profile 1" в настоящий момент.
У меня возникла идея прописать эту команду на все диски. Но нужна доработка напишу только на два и условия которое хочу. Когда ответите тоже достаточно только два. ну вобщем идея такая.
C:\Cent Browser\chrome.exe" --profile-directory="Profile 1"
дальше нужно если путь правильный, запуск программы и закрытие батника.
Еслин нет сообщения об ошибке игнорируютя и не выводятся, а выполняется следующая команда.
D:\Cent Browser\chrome.exe" --profile-directory="Profile 1"
Сообщений вообще не каких не надо, работа в тихом режиме.
На все диски писать не надо, сам допишу, достаточно на два.
Вобщем надо решить эту задачу скидываю скриншот
https://habrastorage.org/webt/_s/jf/nm/_sjfnmxt3odz...s3n8kbl8zjg.jpeg

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 2 месяца
  • Сообщений: 3612
  • Репутация:127

    [+] [-]
pitronic, если нужно просто найти хром на флешке, то примерно так
set file=Cent Browser\chrome.exe
for %%i in (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 >nul 2>&1 dir "%%i:\%file%"&& (
start "" "%%i:\%file%" --profile-directory="Profile 1"
goto next
)
echo Браузер не найден!
goto :eof
:next

[Цитировать]

    pitronic
  • 28626
  • Стаж: 2 года 8 месяцев
  • Сообщений: 24
  • Репутация:0

    [+] [-]
100590pitronic, если нужно просто найти хром на флешке, то примерно так
set file=Cent Browser\chrome.exe
for %%i in (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 >nul 2>&1 dir "%%i:\%file%"&& (
start "" "%%i:\%file%" --profile-directory="Profile 1"
goto next
)
echo Браузер не найден!
goto :eof
:next
Не скинешь код мне в личку чтоб я сохранил у себя? А то тут ещё вопросы будут, ищи его потом. Пожалуйста.

[Цитировать]

    pitronic
  • 28626
  • Стаж: 2 года 8 месяцев
  • Сообщений: 24
  • Репутация:0

    [+] [-]
Доброго времени суток форумчане. Необходим батник тихой установки программ но так чтоб с уневирсальным ключом, если это возможно, чтоб не искать ключ для конкретного инсталятора. На примере прогаммы Cheat Engine. Вобщем такие команды надо, сначало запуск инстолятора CheatEngine75.exe с унивирсальным ключом, дождатся установки, Найти папку Cheat Engine 7.5 в папках Program Files (x86) или Program Files (программы разных разрядностей выбирают разные папки из этих двух) Если папка не найдена не выводить ообщений об ошибки, искать следующюю папку, если найдена выкинуть на рабочий стол ярлык файла Cheat Engine.exe с именем Cheat Engine в дириктории программы и если необходимо скопировать файлы или папки, на пример папку languages. этот момент прокоментировать какие строки затереть если необходимости копирования нет. Ну и разумеется всё это в тихом режиме без запуска инсталятора, в конце вывести сообщение что установка выполнена успешно.

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 3 года 11 месяцев
  • Сообщений: 572
  • Репутация:65

    [+] [-]
del


Последний раз редактировалось: Gvint64 (2023-11-14 23:04), всего редактировалось 6 раз(а)

[Цитировать]

    grafmontekristo
  • 33957
  • Стаж: 7 месяцев 3 дня
  • Сообщений: 18
  • Репутация:0

    [+] [-]
Здравствуйте. Напишите пожалуйста батник, если его закинуть в папку и запустить, чтобы содержимое этой папки, а еще лучше сама папка вносилась исключения защитника Windows.
Как сделал Ратиборус, если его запустить в папке, она добавится в исключения Защитника. Используйте его для папки, в которую собираетесь поместить KMS Tools. Для других фалов батник не подходит, только для KMS Tools.
echo "%~dp0"
pause
wmic /NAMESPACE:\\root\Microsoft\Windows\Defender PATH MSFT_MpPreference call Add ExclusionPath="%~dp0"
pause

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 2 месяца
  • Сообщений: 3612
  • Репутация:127

    [+] [-]
grafmontekristo,
Комбинация \" неоднозначна. Попробуй \\"

[Цитировать]

    grafmontekristo
  • 33957
  • Стаж: 7 месяцев 3 дня
  • Сообщений: 18
  • Репутация:0

    [+] [-]
101486Попробуй \\"
Спасибо, вроде сработала:

Не срабатывает, если в названии папки есть пробел.

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 2 месяца
  • Сообщений: 3612
  • Репутация:127

    [+] [-]
Ты чего-то с кавычками перемудрил. Имелось ввиду только тут:
ExclusionPath="C:\Path\to\folder with spaces\\"

[Цитировать]

    grafmontekristo
  • 33957
  • Стаж: 7 месяцев 3 дня
  • Сообщений: 18
  • Репутация:0

    [+] [-]
101488ExclusionPath="C:\Path\to\folder with spaces\\"
В оригинале прописанно ExclusionPath="%~dp0", это не значит, что Системный диск? Если ошибаюсь, подправьте.
echo "%~dp0"
pause
wmic /NAMESPACE:\\root\Microsoft\Windows\Defender PATH MSFT_MpPreference call Add ExclusionPath="%~dp0"
pause
Я сделал так и вроде добавляет любую папку в исключения, если меду названиями папки не пробелов:
echo "%~dp0"
pause
wmic /NAMESPACE:\\"root\Microsoft\Windows\Defender PATH MSFT_MpPreference call Add ExclusionPath="%~dp0"
pause


Последний раз редактировалось: grafmontekristo (2023-10-27 18:23), всего редактировалось 1 раз

Страница 85 из 89


Показать сообщения:    

Текущее время: 27-Апр 19:18

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы