Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
cartmenezz, сформулируй коротко, что сделать-то надо? Я теряюсь на просторах твоих "эссе"
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Ander_73, ну... нужно прописать в ярлык такую строку для выполнения:C:\Windows\System32\cmd.exe /c @echo off& echo|set /p"=ANY_TEXT"| Clip где ANY_TEXT это текст, полученный после раскрытия переменной var команда для создания ярлыка:Shortcut.exe /F:"%link_dir%\test.lnk" /A:C /T:"%ComSpec%" /P:"/c @echo off& echo|set /p=%var%| Clip" /R:7 /H:1585) проблем бы не было, если бы ее удалось изменить так:Shortcut.exe /F:"%link_dir%\test.lnk" /A:C /T:"%ComSpec%" /P:"/c @echo off& echo|set /p"=%var%"| Clip" /R:7 /H:1585) тогда бы получилось добиться той строки, что я написал в начале сообщения, с кавычками вокруг "=ANY_TEXT", тогда бы можно было использовать спецсимволы при вводе значения переменной var. Но, программа Shortcut.exe воспринимает кавычки как обрамление своих параметров ... пока что-то кое-как получилось только с добавлением записи в доп.файл, чего хотелось бы избежать
|
Отправлено: 05-Дек-2021 11:31
(спустя 1 час 15 минут)
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Ander_73, попробовал@echo off cls cd /d "%~dp0" set "link_dir=%AppData%\Microsoft\Windows\Start Menu\Programs\Accessories" :1 set var=& set /p "var=Enter: "|| GoTo :1 set var=%var:"="""""""% Shortcut.exe /F:"%link_dir%\test.lnk" /A:C /T:"%ComSpec%" /P:"/c @echo off& echo|set /p""=%var%""& Clip" /R:7 /H:1585 echo. pause exit /b Но так и при вводе текста надо использовать кавычки, а это немного не то - нужно вводить только тот текст, который должен копироваться:если вводить с кавычками, то спору нет - все норм Но, если использовать спецсимволы, то проблема никуда не девается:
в ярлык попало только: C:\Windows\System32\cmd.exe /c @echo off& echo|set /p"=""1 Добавлено через 5 минут 31 секунда: пока самый простой рабочий вариант получился такой:@echo off cls cd /d "%~dp0" set "link_dir=%AppData%\Microsoft\Windows\Start Menu\Programs\Accessories" :1 set var=& set /p "var=Enter: "|| GoTo :1 for /f "delims=" %%G in ('echo "%var%"') do >"%link_dir%\test_1.txt" (echo|set /p=%%G) Shortcut.exe /F:"%link_dir%\test_1.lnk" /A:C /T:"%ComSpec%" /P:"/c @echo off& <test_1.txt Clip" /R:7 /H:1585) echo. pause exit /b Картинка но блин... этот доп.файл test_1.txt .... и ярлык будет не один, соответственно и текстовик не один...
|
dimo70
- Стаж: 7 лет
- Сообщений: 3787
- Репутация:27[+] [-]
- Откуда: BG
|
Сделал батник для рестарта сетевого адаптера. Только не знаю как определить и задать через переменную имя сетевого адаптера, чтоб батник срабатывал автоматом.netsh interface show interface rem определения имя сетевого адаптера pause netsh interface set interface "Ethernet 2" admin=disable timeout /t 4 netsh interface set interface "Ethernet 2" admin=enable
_________________ Подпись отключена за нарушение правил форума
|
Gvint64
- Стаж: 4 года 7 месяцев
- Сообщений: 626
- Репутация:72[+] [-]
|
dimo70, Переименуй нужные адаптеры например в Lan1, Lan2, Lan3,..... Lan255
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
dimo70, Попробуйте:@echo off cls echo. set /a num=0 for /f "skip=3 tokens=1-3,* delims= " %%G in ('netsh interface show interface') do ( set /a num+=1 call echo [%%num%%] %%J ) echo. :1 set var=& set /p "var=> "|| GoTo :1 set /a num=2+%var% for /f "skip=%num% tokens=1-3,* delims= " %%G in ('netsh interface show interface') do ( echo. echo netsh interface set interface "%%J" admin=disable netsh interface set interface "%%J" admin=disable echo. timeout /t 4 >nul echo netsh interface set interface "%%J" admin=enable netsh interface set interface "%%J" admin=enable echo. pause exit ) на Win10 1809 Ru отрабатывает нормально-все будет зависить от того, какой выхлоп дает в вашей системе команда:netsh interface show interface у меня это выглядит так:
т.е. нужно пропустить 3 строки (пустая+заголовок+---), потом взять названия из 4го столбца.-Если у вас это команда выдает результат в немного другом формате - придется подправить
|
dimo70
- Стаж: 7 лет
- Сообщений: 3787
- Репутация:27[+] [-]
- Откуда: BG
|
cartmenezz, работает нормально, большое спасибо! А хотел еще спросить нужно ли ставить какой то таймаут после выключении сетевого адаптера, или ето лишнее? Проблема связана с рутером наверное, потому что несмотря что задал статический IP на сервер другие компютеры теряют иногда связь с сервером и приходиться перезагружать сервер.
_________________ Подпись отключена за нарушение правил форума
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
90476нужно ли ставить какой то таймаут после выключении сетевого адаптера, или ето лишнее? вот тут, честно говоря, понятия не имею... в принце и без него должно работать.. зависит от адаптера, нужен ли ему отдых между сменами состояний
|
dimo70
- Стаж: 7 лет
- Сообщений: 3787
- Репутация:27[+] [-]
- Откуда: BG
|
cartmenezz, спасибо еще раз. Время покажет.
_________________ Подпись отключена за нарушение правил форума
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Я тут потихоньку просвещаюсь, возникла парочка вопросов,.. не к спеху, просто оставлю это здесь)) Может будет у кого лишняя минутка... 1) Читал касаемо использования CALL SET, занесло меня на cyberforum, заметил одну интересную вещь:Картинка EnableDelayedExpansion пытаюсь всячески избегать, поэтому и разбираюсь с CALL SET, но вот что привлекло внимание, так это вормулировка: "например, командой Call" - то есть можно использовать не CALL а что-то другое? (конечно, можно было бы там и спросить, но тут как-то роднее ) 2) После того как тут упоминали сайт ss64.com как довольно авторитетный, стал все чаще туда поглядывать. К сожалению языковой барьер дает о себе знать, поэтому "поглядываю" не так часто как хотелось бы, да и не все понимаю (гугл переводчик не во всех моментах спасает). Собственно, некоторое время читал там справку по команде FOR - ss64_for, есть там такая "рекомендация":%%G is a good choice because it does not conflict with any of the pathname format letters (a, d, f, n, p, s, t, x) and provides the longest run of non-conflicting letters for use as implicit parameters. G > H > I > J > K > L > M Format letters are case sensitive, so using a capital letter is also a good way to avoid conflicts %%A rather than %%a. Особо не вникал, просто взял на вооружение, теперь стараюсь использовать %%G в циклах. Но сейчас возникла необходимость в задействовании множества токенов, поэтому решил перечитать, что же там за конфликты возможны. Я правильно понял, что без каких либо проблем могу использовать в цикле все буквы от A до Z, а под конфликтом с "pathname format letters" имеется ввиду лишь возможная путаница, которая может возникнуть (типа взяли %%n, потом придется использовать %%~nn - не комильфо). Но даже если бы я использовал %%~nn (или типо того), это бы без проблем всегда нормально работало без всяких "конфликтов", главное не запутаться, правильно? А если мне все эти модификации имени точно в данном цикле не понадобятся, то тем более могу брать весь диапазон A-Z и не париться?
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
90510могу брать весь диапазон A-Z и не париться? Ты можешь брать даже всякое непотребное, навроде # или @ или ' -Насчёт "например" я тоже не понял. Можно использовать call не только с set, но и всякое:call echo %%var%% call del %%file%% call reg add %%key%% ... И вот тут важно не пересечься с переменными цикла %%v, %%f, %%k
|
Отправлено: 10-Дек-2021 16:05
(спустя 1 час 28 минут)
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
90513И вот тут важно не пересечься с переменными цикла %%v, %%f, %%k Благодарю, на конкретно примере гораздо понятнее)) Этот момент учту.90513Ты можешь брать даже всякое непотребное, навроде # или @ или ' Это уже лишнее)) Вообще по началу решил обойтись 15ю буквами, мне надо анализировать путь до текущей директории, и получить из него путь на один уровень вверх. Так как это путь не в винде, а на подключённом устройстве то нет возможности использова pushd/popd или ещё что-нибудь... Все что я могу, это выполнив команду ls на родительский каталог "mnt/sdcard" получить список с вложенными файлами и папками. Я сделал запись всего этого дела в файл, с нумерацией, При вводе номера снова выполняется та же команда, только уже к пути одного из этих каталог.. Т.е. допустим я перешёл в каталог "/mnt/sdcard/Download", теперь он текущий, и т.д... Хочется иметь возможность возвращаться выше, например по цифре "0".. Так что я сделал разбор в цикле пути текущего каталога, взял за разделитель "/", и сделал поочередную проверку: если существует 3й токен, то верхний каталог равен первым 2ум, если существует 4й токен, то верхний каталог равен первым 3ем, и т.д... Но выглядит это конечно так себе, плюс есть ограничение по глубине (так как дальше заглавных букв я идти не хотел, то получается уйдя вглубь ниже чем на 24 каталога, верхний уже будет некорректным) ... но вроде как пришла мысль как это дело переиграть иначе)) Добавлено через 5 минут 8 секунд: Было так (это я еще не весь алфавит брал):1:2 for /f "tokens=1-15 delims=/" %%G in ('echo %Dir%') do ( if not [%%I]==[] set "old_Dir=/%%G/%%H" if not [%%J]==[] set "old_Dir=/%%G/%%H/%%I" if not [%%K]==[] set "old_Dir=/%%G/%%H/%%I/%%J" if not [%%L]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K" if not [%%M]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L" if not [%%N]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L/%%M" if not [%%O]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L/%%M/%%N" if not [%%P]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L/%%M/%%N/%%O" if not [%%Q]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L/%%M/%%N/%%O/%%P" if not [%%R]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L/%%M/%%N/%%O/%%P/%%Q" if not [%%S]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L/%%M/%%N/%%O/%%P/%%Q/%%R" if not [%%T]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L/%%M/%%N/%%O/%%P/%%Q/%%R/%%S" if not [%%U]==[] set "old_Dir=/%%G/%%H/%%I/%%J/%%K/%%L/%%M/%%N/%%O/%%P/%%Q/%%R/%%S/%%T" ) exit /b Стало так:2for /f "delims=" %%G in ('echo %Dir%') do set "old_Dir=%%~pG" set "old_Dir=%old_Dir:\=/%" set "old_Dir=%old_Dir:~0,-1%" exit /b ... пока тестирую, но вроде работает)) - Вроде норм, ляпота!))... пока, правда, ничего кроме хождения по папкам он не делает... но это дело наживное))
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Ander_73, Узнал сегодня кое-что новое. у меня разбирается в цикле вывод команды для получения списка папок/файлов:for /f "useback delims=" %%G in (`2^>nul adb shell ls '%Dir%'`) do ... и я думал что это дело нормально работает, вроде как во все каталоги получалось зайти.. НО, это было до тех пор пока в переменную %Dir% не попал путь со скобками в названии каталога - сразу вылет. ... Долго думал что можно предпринять, на удивление сработало:for /f "useback delims=" %%G in (`"2>nul adb shell ls '%Dir%'"`) do ... Не знал что можно команду в кавычки брать... Отсюда вопрос: Это обычное дело, или возможно какой-то баг моей версии 10ки? Будет ли это работать всегда, в том числе на 8ке/7ке? Или для этого должны звезды сойтись определенным образом?))
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
Да. Без экранирования кавычками, скобка после подстановки переменной станет закрывающей для команды for. После чего вся конструкция посыпется.
|
Страница 66 из 94
Текущее время: 24-Дек 16:06
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|