Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 6

Автор: alexander6161
Дата сообщения: 27.04.2009 02:39
Кто пользуется утилитой NirCmd, подскажите как передать значение переменной (например, ~$folder.nircmd$) из NirCmd в батник? Надо, чтобы переменная %A% (батник) приняла значение переменной ~$folder.nircmd$ (NirCmd). Вызов NirCmd.exe находится в середине батника:

Начало батника...
NirCmd.exe ... ~$folder.nircmd$
Продолжение батника...

Прочитал справку на английском для NirCmd.exe, но сам не смог разобраться.
Автор: smirnvlad
Дата сообщения: 27.04.2009 06:22
vitaliy91

поиск файла в папке c:\, если надо в текущей папке, то "C:\*.txt" заменить на "*.txt"

Код:
for %%a in ("C:\*.txt") do set "name=%%~na"
Автор: 01MDM
Дата сообщения: 27.04.2009 07:33
alexander6161

Код:
@echo off

set exec=nircmdc execmd echo ~$folder.desktop$

for /f "tokens=*" %%i in ('%exec%') do set "desk=%%i"
echo %desk%
Автор: Maza_Faka
Дата сообщения: 27.04.2009 07:53
Raf_SE

Цитата:

корректно завершить процесс infium.exe

C помощью утилиты nircmd.exe:

Код:
nircmd.exe closeprocess infium.exe
Автор: Hiveno
Дата сообщения: 27.04.2009 09:59

Цитата:
В случае если батник зависнет, то и в этом


Цитата: task.bat > task.lck



и в этом


Цитата:
# В определённое место заранее укладывается файл-флаг "можно" (например: DoJob.Ok).
# Стартующий батник генерирует случайный литерал ("TmpXXX") и пытается переименовать файл-флаг в этот литерал ("захватить флаг").
# Удалось (есть желанный TmpXXX.Run) - работаем, нет - не судьба.
# Отработавший батник переименовывает захваченный файл-флаг взад.


случаях он будет висеть и следующий не запустится, то есть одинаково

Но вот если во время работы или зависания батника компьютер перезагрузить, в одном случае батник опять будет запускаться по шедулеру, а в другом надо ещё создать файл разрешения работы.
Автор: alexander6161
Дата сообщения: 27.04.2009 11:04
01MDM спасибо.

Просто я использую nircmd.exe (можно выводить сообщения infobox с нужной иконкой на кнопке и в заголовке, если его разжать и вставить в него иконку), поэтому нет желания городить огород и таскать обе утилиты (+nircmdc.exe). Может есть способ получить через nircmd.exe?

Пока перекидываю значение через реестр:
Код: nircmd.exe regsetval sz "HKEY_CURRENT_USER\NirCmd" "Value" "~$folder.nircmd$"
for /f "tokens=3 usebackq delims=    " %%I in (`reg query "HKEY_CURRENT_USER\NirCmd" /v Value`) do set A=%%I
echo %A%

После delims= стоит Tab, но форум подставляет вместо него четыре пробела - исправьте после копирования.
Автор: 01MDM
Дата сообщения: 27.04.2009 11:30
alexander6161

Что не может сделать nircmdc?
Автор: smirnvlad
Дата сообщения: 27.04.2009 16:47
Maza_Faka

Цитата:
Вот так будет найден:

Код:

For /F %%A In ('Dir C:\*.txt /B /A:-D') Do Echo %%A



и еще добавить "tokens=*", на случай пробела в названии файла

Код:
For /F "tokens=*" %%A In ('Dir C:\*.txt /B /A:-D') Do Echo %%A
Автор: ju ja
Дата сообщения: 27.04.2009 17:17
wolf0425

C:\Users\Desktop>for /R "I:\" %a in (*.*) do for /F "tokens=1,2,3,4,5 deli
ms=,. " %c in ("%~ta") do (
set f_time=%f
set /a t6= !f_time:~0,1! * 600 + !f_time:~1,1! * 60 + !f_time:~3,1! * 10 + !f_t
ime:~4,1!
set /a t3= 1 * 600 + 8 * 60 + 1 * 10 + 5
if %t6% LSS %t3% echo del %a
)

C:\Users\Desktop>for /F "tokens=1,2,3,4,5 delims=,. " %c in ("27.04.2009 1
8:13") do (
set f_time=%f
set /a t6= !f_time:~0,1! * 600 + !f_time:~1,1! * 60 + !f_time:~3,1! * 10 + !f_t
ime:~4,1!
set /a t3= 1 * 600 + 8 * 60 + 1 * 10 + 5
if %t6% LSS %t3% echo del I:\123.txt
)

C:\Users\Desktop>(
set f_time=18:13
set /a t6= !f_time:~0,1! * 600 + !f_time:~1,1! * 60 + !f_time:~3,1! * 10 + !f_t
ime:~4,1!
set /a t3= 1 * 600 + 8 * 60 + 1 * 10 + 5
if %t6% LSS %t3% echo del I:\123.txt
)
не забыла
вот что получается
Автор: wolf0425
Дата сообщения: 27.04.2009 17:50

Цитата:
вот что получается

пока проблем с !f_time:~0,1! и аналогичными не вижу - они подставляются сразу в команду, а не в эховывод на экран.
вижу глюк в if - там тоже надо в !var!, т.е if !t6! LSS !t3!
прилепи для отладки echo !t6! - !t3! - %%a %%~ta перед строкой с if, посмотри значения...


ладно, раз проблемы с !! - переписываем на подпрограмму, можeт так понятнее

Код: @echo off
for /r "t:\a1" %%a in (*.*) do call :test %%~ta "%%a"
goto :eof

:test
set f_time=%2
set /a t6 = %f_time:~0,2% * 60 + %f_time:~3,1% * 10 + %f_time:~4,1%
set /a t3 = %time:~0,2% * 60 + %time:~3,1% * 10 + %time:~4,1%
if %t6% LSS %t3% echo del %2
echo if %t6% LSS %t3% echo del %3
goto :eof
Автор: ju ja
Дата сообщения: 27.04.2009 18:38
wolf0425
спасибо огромное
Автор: lorents
Дата сообщения: 27.04.2009 19:06
у меня vpn-соединение, не подскажите если я использую следующий код

Код: rasdial "провайдер" "логин" "пароль"
Автор: Nagual
Дата сообщения: 27.04.2009 21:41
lorents
при всем уважении, устал повторять, не юзайте rasdial
есть же для этого rasphone/?
Один раз настраиваем соединение (персональные и общие данные), после чего делаем такую
[more=настройку] [/more]
Интервал между повторениями по вкусу
Автор: lorents
Дата сообщения: 27.04.2009 21:45
Nagual
настройки я сделал как на картинке, а как сделать автозагрузка vpn-соединение?
Автор: Nagual
Дата сообщения: 27.04.2009 22:11
lorents
1. команда для планировщика (ярлык соединения не нужен)
rasphone -d vpn
vpn -- имя соединения
2. если по-простому, перетянуть ярлык соединения в папку Пуск -- Все программы -- Автозагрузка
3. реестр (описание опущено)
Автор: lorents
Дата сообщения: 27.04.2009 22:27

Цитата:
1. команда для планировщика (ярлык соединения не нужен)
rasphone -d vpn
vpn -- имя соединения

ща попробуем

Цитата:
2. если по-простому, перетянуть ярлык соединения в папку Пуск -- Все программы -- Автозагрузка

как это не странно звучит, у меня это не работает, почему сам удивляюсь
спасибо!
Автор: alexander6161
Дата сообщения: 27.04.2009 22:55
01MDM

Цитата:
Что не может сделать nircmdc?

nircmdc работает нормально в Вашем ответе, а вот если вместо него подставить nircmd, то не получаю значение переменной в батник - пустая строка. Хотел бы обойтись одной nircmd, чтобы две утилиты не таскать.

А вообще результат работы утилит отличается, я несколько отличий находил, вот одно из них для примера. Оба файла разжаты и в них вставлена иконка, отсюда и размер больше, пусть не смущает:
http://rapidshare.com/files/226478588/NirCmd.rar.html
Пароль: ru-board
MD5: B0FD41601ED9E8FB4920A966CE6461E5

Батники запускаю в скрытом режиме, пользователь в жизни не догадается, что это батник работает, как будто обычный exe-шник, а с nircmdc такой фокус не проходит. В этом архиве всё наглядно показано. А чтобы при ошибках окно NirCmd случайно не вылезло - его надо просто удалить из ресурсов.
Автор: ZeroCrash
Дата сообщения: 28.04.2009 01:07
smirnvlad

Большое спасибо!
Автор: Nikitskii
Дата сообщения: 28.04.2009 08:49
Помогите. Как скопировать один файл в несколько папок. А конкретно мне нужно скопировать ярлык в автозагрузку всех профилей компьютера, т.е. сюда:
Documents and Settings\User\Главное меню\Программы\Автозагрузка\
Вручную нереально. На некоторых компьютерах бывает по 40 учёток. Вариант скопировать этот ярлык в папку AllUsers не катит.
Автор: NonameAlexNoname
Дата сообщения: 28.04.2009 09:27
HELP
Есть невыполнимая задача, но очень нужно выполнить
Вопрос такой: Возможно ли как-то в батнике отсечь значение переменной до определенного символа.
Пример:
есть переменная Х она может принимать в цикле значения 70_, 80_, 11001_, 70_09, 70_100 и т.д. Нужно как-то отсеть значение до символа "_", это вобще реализуемо в батнике?
Автор: Maza_Faka
Дата сообщения: 28.04.2009 09:30
Nikitskii
Попробуйте так:

Код:
@Echo Off
ChCp 1251>Nul

Set LNK=C:\test.lnk

For /D %%A In ("%SYSTEMDRIVE%\Documents and Settings\*") Do If /I Not "%%~nA"=="All Users" Copy /Y %LNK% "%%A\Главное меню\Программы\Автозагрузка"
Автор: mike345S
Дата сообщения: 28.04.2009 09:45
Nikitskii, я задавал похожий вопрос в этой теме. Посмотри на 13 странице этого топика...
Автор: Maza_Faka
Дата сообщения: 28.04.2009 09:54
NonameAlexNoname
Можно с помощью SED

Цитата:

@Echo Off
Set VAR=70_100

For /F %%A In ('Echo %VAR% ^| Sed "s/.*_/_/g"') Do Set VAR=%%A

Echo %VAR%
Автор: wolf0425
Дата сообщения: 28.04.2009 09:55
NonameAlexNoname
например так

Код: set ttt=1111_222
for /f "tokens=1,2 delims=_" %%a in ("%ttt%") do set "ttt=%%a"
set ttt
Автор: NonameAlexNoname
Дата сообщения: 28.04.2009 10:01
Всем спасибо, реально выручили, буду пробовать!
Автор: Yarylo
Дата сообщения: 28.04.2009 10:30
Подскажите, пожалуйста, возможно ли реализировать через бат-файл следующую задачу:

Есть некий текстовый файл, file1.txt со следующим содержанием:

Код:

xx yyy = nn-nn-nn-nn-nn-nn

Автор: Collapse_Troll
Дата сообщения: 28.04.2009 10:55
Кстати почему-то на разных машинах результат
Цитата:
cd %temp%
дает разные результаты:


Цитата:
"C:\Documents and Settings\имя_учетки\Local Settings\Temp\"


Цитата:
"C:\Documents and Settings\имя_учетки\Local Settings\Temp\2"


Цитата:
C:\Documents and Settings\имя_учетки\Local Settings\Temp\1


Почему они так различаются? Безопасно ли удалять сразу всё содержимое папки "C:\Documents and Settings\имя_учетки\Local Settings\Temp", чтоб наверняка?
Автор: wolf0425
Дата сообщения: 28.04.2009 10:59
Yarylo
не очень понятно - как найти строки mm-mm-mm-mm-mm-mm в file2.txt
по признаку пяти знаков "-" через пару неизвестных символов?
без всяких защит от дурака наверно так:

Код: for /f "tokens=1,2 delims==" %%a in (file1.txt) do for /f %%c in ("%%b") do sed -i -r "s/..-..-..-..-..-../%%c/g" file2.txt
Автор: Maza_Faka
Дата сообщения: 28.04.2009 11:00

Цитата:
Безопасно ли удалять сразу всё содержимое папки

Да, так, как эта папка используется для временных файлов.
Автор: Nikitskii
Дата сообщения: 28.04.2009 11:01
Maza_Faka

Все работает! Спасибо большое!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: как сохранить сетевые настройки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.