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

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

Автор: Nagual
Дата сообщения: 24.04.2009 13:47
Collapse_Troll
воспроизвожу ситуацию:
создаю несколько архивов для удаления
создаю архив с паролем, пытаюсь его распаковать, пароль не указываю
начинаю удаление, все файлы удаляются без запинок, кроме занятого (по причине "занятости" — не введённого пароля)
ситуация не воспроизводится

попробуй ключ /q
del/q %temp%\*
а лучше так:
Код:
cd/d "%temp%"&rd/s/q .
Автор: ZeroCrash
Дата сообщения: 24.04.2009 14:16
01MDM

Спасибо. Всё ок, кроме команды из четвёртого батника (про процессоры)
Автор: Boxa_win
Дата сообщения: 24.04.2009 14:17
Может кто нибудь помоч:
как в Bat или CMD файле получить IP клиента, открывающего терминальную сессию на сервере
Автор: Elroir
Дата сообщения: 24.04.2009 16:00
vitaliy91

Цитата:
Когда в тексте попадаются значки
">" "<" и "&" выполнение прерывается... Можно както обойти это припятствие ?

Попробуй так:

Код:
@echo off
setlocal
for /f "tokens=*" %%a in (input.txt) do (set "line=%%a" & call :presplit)
goto :EOF
:presplit
set "line=%line:<=%"
set "line=%line:>=%"
set "line=%line:&=%"
:split
echo %line:~0,255%>>output.txt
if not "%line:~255%"=="" (set "line=%line:~255%" & goto split)
Автор: Collapse_Troll
Дата сообщения: 24.04.2009 16:05
Nagual
Спасибо! Сделал так:

Цитата:
rd "%temp%" /s /q
Автор: 01MDM
Дата сообщения: 24.04.2009 16:35
ZeroCrash

Цитата:
Всё ок, кроме команды из четвёртого батника (про процессоры)


Попробуй так:


Код:

....

:4
for /f "tokens=*" %%i in (processors.txt) do call:set "%%i"
for /f "tokens=3* delims=_=" %%i in ('set value_') do set "randomValue=%%i %%j"

reg add "%regpath_2%" /v "ProcessorNameString" /t reg_sz /d "%randomValue%" /f

call:unset
goto:eof

....

Автор: Bad_BoY
Дата сообщения: 24.04.2009 18:17
Вот нашел решение своей проблемы вот таким скриптом:

Код:
Set objShell = WScript.CreateObject("WScript.Shell")
Set objNet = CreateObject("WScript.Network")
strCompName = objNet.ComputerName

IF left(strCompName,2) = "AA" THEN
objShell.Run "net use g: /delete"
objShell.Run "net use g: \\servername_1\t"
END IF

IF left(strCompName,2) = "BB" THEN
objShell.Run "net use g: /delete"
objShell.Run "net use g: \\servername_2\t"
END IF

IF left(strCompName,2) = "CC" THEN
objShell.Run "net use g: /delete"
objShell.Run "net use g: \\servername_3\t"
END IF
Автор: ZeroCrash
Дата сообщения: 24.04.2009 19:10
01MDM
Всё равно проц тот же остался(

Но я понял в чём дело. Просто после перезагрузки значение восстанавливается.
Спасибо за всё!

Добавлено:
Всё же есть проблемка, которую я тоже не могу решить)

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

Может ты придумаешь вариант получше, но у меня есть такие идеи:
Нужно чтобы батник либо записал куда-то отдельно значение, а потом уже от туда вписывал его в реестр

Либо чтобы он из текстового файла затирал остальные варианты

Либо чтобы он сохранил значение отдельно и добавлял в автозапуск другой батник, который в свою очередь и будет вписывать значение в реестр из того файла, в который сохранил значение тот батник


Вот ветка реестра для автозагрузки:
HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v proc /d C:\proc.bat
Автор: WSQRT
Дата сообщения: 24.04.2009 20:50
Ламерский вопрос.
Я не помню, но точно видел где-то, что из BAT файла можно вызвать сообщение в окне с помощью какого-то скрипта.
Тоесть оконное сообщение с кнопкой "ОК"

Я раньше так делал, но к сожалению забыл как
Подскажите пожалуйста?

Автор: NvvLazyTiger
Дата сообщения: 25.04.2009 07:47
Hiveno
Цитата:
На сервере по шедулеру периодически раз в сутки запускается батник, вызывает несколько внешних задач. Юзерам позволено запускать этот батник в произвольный момент времени.
Одновременный запуск двух копий задачи допускать нельзя.
Можно решить протсым файлом, кторый создает батник при старте и удаляет при выходе - работает / не работает.
Может зашедулить и разрешить юзерам запускать задачу, а шедулер пусть не допускает повторного запуска - задача и так работает?
Указанными способами поставленная задача корректно не решается. А решается она следующим образом: В определённое место заранее укладывается файл-флаг "можно" (например: DoJob.Ok).
Стартующий батник генерирует случайный литерал ("TmpXXX") и пытается переименовать файл-флаг в этот литерал ("захватить флаг").
Удалось (есть желанный TmpXXX.Run) - работаем, нет - не судьба.
Отработавший батник переименовывает захваченный файл-флаг взад.
;)
Автор: smirnvlad
Дата сообщения: 25.04.2009 08:03
Bad_BoY


Код:
@echo off

@echo Running on %COMPUTERNAME%

if "%COMPUTERNAME:~0,2%"=="AA" (
@echo Name starts with AA
net use g: /delete
net use g: \\servername_1\t
)

if "%COMPUTERNAME:~0,2%"=="BB" (
@echo Name starts with BB
net use g: /delete
net use g: \\servername_2\t
)

if "%COMPUTERNAME:~0,2%"=="CC" (
@echo Name starts with CC
net use g: /delete
net use g: \\servername_3\t

)
Автор: 01MDM
Дата сообщения: 25.04.2009 09:15
ZeroCrash

Цитата:
Нужно чтобы батник, который меняет проц. запускался после выполнения общего батника (перезагрузку ставить вообще не надо). При его выполнении нужно чтобы он добавил себя в автозагрузку и выставлял при каждом следующем запуске одно и то же значение, которое он выбрал случайным образом в первый раз.


Читаю, но суть ускользает. Объясни по пунктам.

Автор: ZeroCrash
Дата сообщения: 25.04.2009 11:41
01MDM

1)Нужно из батника full удалить 4 пункт.
2)Удалить из батника full команду перезагрузки.
3)Создать батник, который бы выполнял вот этот код:


Код: @echo off
setlocal


set regpath=HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0

for /f "tokens=*" %%i in (processors.txt) do call:set "%%i"
for /f "tokens=3* delims=_=" %%i in ('set value_') do set "randomValue=%%i %%j"


reg add "%regpath%" /v "ProcessorNameString" /t reg_sz /d "%randomValue%" /f

goto:eof

:set
set "value_%random%=%~1"
shutdown /r /t o
Автор: NvvLazyTiger
Дата сообщения: 25.04.2009 13:02
Гм-м-м,.. smirnvlad, верну "комплимент":
Цитата:
task.bat > task.lck
А что будет, если батник зависнет? Вот то-то и оно... ;)

Т.е. те или иные "простые" абстрактные решения в правильно построенной технологической среде (автоматической отработки поставленных задач) превращаются в "сложные" конкретные-с. Например, у меня файлы удаляет ChkAndDel.Cmd (72 строки, 2369b) и там много чего есть для удобного использования [в других батниках].

Но, как говорится, "на вкус и цвет..."
Автор: 01MDM
Дата сообщения: 25.04.2009 13:30
ZeroCrash
Запись для автозагрузки добавляется из proc.cmd, который вызывается из full.cmd. Эти батники должны быть в одной папке.
full&proc.zip
Автор: smirnvlad
Дата сообщения: 25.04.2009 17:04
NvvLazyTiger
В случае если батник зависнет, то и в этом

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

и в этом

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

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

Но вот если во время работы или зависания батника компьютер перезагрузить, в одном случае батник опять будет запускаться по шедулеру, а в другом надо ещё создать файл разрешения работы.
Автор: ZeroCrash
Дата сообщения: 25.04.2009 22:52
01MDM
Спасибо!
Но извини меня за глупость) Так не покатит(

Нужно во всю эту лабуду добавить такое:

Нужно чтобы proc.cmd ещё и сохранял в текстовый файл значение, которое он добавил в реестр, и запускал другой батник (новый) - он собственно и должен добавляться в автозагрузку, который будет при запуске вбивать в тот же ключ реестра что и proc.cmd значение из нового текстового файла.

И в full.cmd добавить обратно запуск proc.cmd

В proc.cmd добавить перезагрузку системы

И ещё, нужно чтобы новый батник после запуска, выполнялся не сразу, а скажем через секунд 20

Заранее благодарен!

Добавлено:
И ещё, пожалуйста приведи пример кода, который копирует файл из одного каталога в другой.
Автор: vitaliy91
Дата сообщения: 26.04.2009 13:41
Подскажите пожалуйста как из переменной скажем %URL% удалить обрамляющие кавычки ?
Никак немогу разобраться с FOR...
Автор: Elroir
Дата сообщения: 26.04.2009 14:08
vitaliy91

Цитата:
как из переменной скажем %URL% удалить обрамляющие кавычки ?


Код:
set "URL=%URL:~1,-1%"
Автор: vitaliy91
Дата сообщения: 26.04.2009 16:53
Спасибо Elroir !
Автор: smirnvlad
Дата сообщения: 26.04.2009 17:21
vitaliy91

а еспи переданную переменную или в цикле


Код:
@echo off

echo %1
echo %~1

for /f "delims= " %%a in (""bla"") do (
echo %%a
echo %%~a
)
Автор: Raf_SE
Дата сообщения: 26.04.2009 17:23
А можно с помощью батника, корректно завершить процесс infium.exe? Мне нужно не "убить", а именно завершить?
Или мож для этого есть какиенить другие проги?..
Автор: smirnvlad
Дата сообщения: 26.04.2009 18:34
ZeroCrash


Цитата:
И в full.cmd добавить обратно запуск proc.cmd

В proc.cmd добавить перезагрузку системы

Насколько я вижу, это уже есть


Цитата:

Нужно чтобы proc.cmd ещё и сохранял в текстовый файл значение, которое он добавил в реестр, и запускал другой батник (новый) - он собственно и должен добавляться в автозагрузку, который будет при запуске вбивать в тот же ключ реестра что и proc.cmd значение из нового текстового файла.


Цитата:

И ещё, нужно чтобы новый батник после запуска, выполнялся не сразу, а скажем через секунд 20

Если текстовый файл неважен, то proc.cmd создаёт proc.cmd.static.cmd и добавляет его в автозапуск, в proc.cmd.static.cmd задержка 20 секунд и добавление в реестр выбранного процессора.

full&proc&static.zip


Цитата:
И ещё, пожалуйста приведи пример кода, который копирует файл из одного каталога в другой.



Код:
copy "c:\1.txt" "c:\1\1.txt" /y
Автор: vitaliy91
Дата сообщения: 26.04.2009 19:47
В чем ошибка покажите пожалуйста
Почемуто изза метки goto :back цикл выполняется только один раз:
Мне нужно чтобы пока на диске есть файла 1.txt все время происходила пауза, а когда он исчезнет, увеличить переменную на еденицу, и повторить все вновь. Но если появится файл 2.txt, завершить цикл и пойти далее
Вот примерно как я делаю:

Цитата:

set url=http
for /L %%n in (1,1,255) do (
copy D:\1.txt C:\1.txt /q /f
echo %url%%%n
:back
if exist C:\1.txt (
ping localhost -n 5
goto :back)
if exist C:\2.txt goto :next
)
:next
echo END
Автор: king_stiven
Дата сообщения: 26.04.2009 21:01
vitaliy91

Код: set url=http
for /L %%n in (1,1,255) do (
copy D:\1.txt C:\1.txt /q /f
echo %url%%%n
call :back
)
:next
echo END
goto :eof
:back
if exist C:\1.txt (
ping localhost -n 5
goto back
)
if exist C:\2.txt goto :next
Автор: ju ja
Дата сообщения: 26.04.2009 22:07
помогите пожалуйста отладить батник
for /r "L:\" %%a in (*.*) do for /f "tokens=1,2,3,4,5 delims=,. " %%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_time:~4,1!
set /a t3= %time:~0,1% * 600 + %time:~1,1% * 60 + %time:~3,1% * 10 + %time:~4,1%
if %t6% LSS %t3% echo del %%a
)

не видит он !f_time:~x,x!
Автор: wolf0425
Дата сообщения: 26.04.2009 23:16
ju ja
setlocal enabledelayedexpansion
в начале батника не потерял?
Автор: vitaliy91
Дата сообщения: 26.04.2009 23:25
Большое спасибо king_stiven

Добавлено:
а как можно получть имя файла если известно его расширение, например txt и известно что в папке всего один файл txt ?
Автор: wolf0425
Дата сообщения: 27.04.2009 00:12
vitaliy91
for %%a in (t:\2\*.txt) do set "name=%%~na"
Автор: vitaliy91
Дата сообщения: 27.04.2009 00:50

Цитата:

for %%a in (t:\2\*.txt) do set "name=%%~na"

Что-то не выходит, ошибки нет но переменная %name% пуста(

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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