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

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

Автор: anachrom
Дата сообщения: 19.05.2009 09:19
yurkesha

Цитата:
Тока не надо применять точку в качестве разделителя - это неудачный вариант...

А почему?
А вообще здорово получилось. Спасибо большое. Вот только, еще бы лог бэкапа прикрепить. Как раньше, не получается.
Автор: Johny_x3mal
Дата сообщения: 19.05.2009 09:21
Доброго времени суток!
Не кричите сильно, но перебирать 6 частей по сотне страниц убьет слишком много времени, поэтому, прошу помочь.
Нужен батник, который бы проверял на компьютерах в сети в диапазоне 192.168.3.4-192.168.3.254 наличие файла ХХХХ.exe на системном диске и в отсутствии данного файла копировал на системный диск полностью папку YYYYY_XXX с сетевого диска Z:. А так же как-нибудь создать таблицу исключений, т.е. те IP адреса, которые проверять не надо.
Я как бы не очень в этом, но как сделать поиск по одному компу и учесть несколько условий, даже таблицу исключений сделать - я представляю как, а вот как на всех ....

Добавлено:
А вообще, ещё и второй вариант можно сразу
При нахождении нужного файла, скопировать весь каталог с общесетевого диска на системный диск с заменой существующих файлов, так же по всей сети.
Автор: anachrom
Дата сообщения: 19.05.2009 10:23
yurkesha, king_stiven
Еще одна проблема найдена.Некоторые файлы с рускими именами отображаются уж очень коряво. Причем только некоторые. Это может быть из-за кодировки имен файлов?
Автор: yurkesha
Дата сообщения: 19.05.2009 10:31
anachrom
ты случайно не Win1251 пытаешься использовать?
Лучше не стоит - даже "chcp 1251" проблему до конца не решает... Так что лучше не мудрить а использовать в CMD и в инишнике везде cp866(oem/dos).
А в качетве лога лог архивации тебя устроит?

Добавлено:
anachrom
Все - кажись понял в чем затруднение: добавь ключ -scsDOS(-scsWIN) для архиватора - в зависимости от кодировки listbackup.txt и все встанет на свои места...

Добавлено:
Исправил скрипт выше и дописал перенаправление для лога
Автор: Johny_x3mal
Дата сообщения: 19.05.2009 11:05
Я тут нарыв PSTools там есть утилиты, которые могут помочь.
Идея такая:
Поиск компа (по IP или просто поиск по компам в сети по имени)
далее - если файл найден goto метка0
:метка0 завершить работу файла (приложения)
скопировать с заменой с такого-то места
если не найден файл goto метка1
:метка1 если не найден файл перенести файл/каталог на C$

что - то типа того.
Помогите реализовать.
Автор: Maza_Faka
Дата сообщения: 19.05.2009 13:23
Johny_x3mal

Цитата:
Поиск компа

Цитата:
если файл найден

Так, что же искать конкретно? Компьютер или файл?
Автор: Andrey128
Дата сообщения: 19.05.2009 14:52
Как вывести объем диска и сколько свободно (или занято) в мегах (или лучше гигах) не используя сторонних утилей для Windows XP?
Нашел такую команду:

Код: fsutil volume diskfree c:
Всего свободно байт: 5961420800
Всего байт: 32210161664
Всего доступно свободных байт: 5961420800
Автор: KYMichael
Дата сообщения: 19.05.2009 15:35
Возникла вот такая задачка:
выполняемые файлы (name.exe), необходимо переименовать с приписыванием вначале версии данного файла, т.е. получить что-то вида X.XX.XX.XX_name.exe.

Возможно решить данную задачку, используя только возможности командной строки?
Автор: yurkesha
Дата сообщения: 19.05.2009 16:42
All
господа есть полезная и интересная тема: как надо писать bat/cmd файлы чтобы наличие концевых пробелов не влияло на выполнение.
На данный момент лично я знаю такие правила:
- присвоение ВСЕГДА производить так: SET "MY_PARAM=val"
- вывод строк ВСЕГДА заключать в скобки: (ECHO %MY_PARAM%)
- в любой цепочке команд либо в конвеере последний операнд заключать в скобки ( )
- все переменные передавать и обрабатывать с обрамляющими " ", а хранить без них(то есть классическая команда для второй строки скрипта CD /D "%~dp0")
Автор: 01MDM
Дата сообщения: 19.05.2009 18:00
yurkesha
Ошибки возникают при присвоении переменной значения. Потом такая переменная может быть неправильно обработана, особенно если к ней добавляется другое значение или переменная.

Было масса самых печальных случаев. Из своей практики - удалил в линуксе вместо нужного подкаталога весь каталог

Код:
$ rm -rf ~/.fluxbox/styles/ mystyle
Автор: yurkesha
Дата сообщения: 19.05.2009 19:07
01MDM
ну по-моему я как раз описал как исключить ошибки присвоения - проверить легко ... Но ведь это далеко не все возможные ошибки... Я и предлагаю по-возможности найти все варианты и поместить в шапку.

Добавлено:
Ну скажем в качестве проверки рекомендую такой код:
Код: @ECHO OFF
SET "PARAM=12345"6789
ECHO "%PARAM%"
Автор: LetMyPeopleGo
Дата сообщения: 19.05.2009 19:46
ghosty
Скрипт видимо ошибочно конмтатировал ошибку и прерывал дальнейшее выполнение. По сути всю работу делают двае строки:

rem Copy the Windows Installer folder - копирование файлов windows\installer вместе с правами доступа.
xcopy "%windir%\installer" "%target%\installer" /E /I /H /K /O

Сначала видимо удаляется содержимое C:\windows\installer, но моя винда такой команды не нашла, можно очистить папку руками вместо:
rd /s /q "%windir%\Installer"

Тут можно написать все подробно, собственно тут и создается ссылка:
C:\windows\system32\junction.exe "C:\windows\installer" "D:\wininst\installer"

Махинации с правами
echo y| cacls "%windir%\installer" /T /P BUILTIN\Administrators:F "NT Authority\SYSTEM:F" Everyone:R
"%sinacl%\subinacl.exe" /file "%windir%\installer" /setowner=builtin\administrators

Переменные можно не использовать и прописать вручную:
%windir% = C:\windows
%programfiles% - C:\Program files
%sinacls% - C:\Program files\Windows Resource Kits\Tools
%target% - папка назначения, она должна быть создана заранее на диске, куда переезжает Installer, например D:\wininst. В батнике тоже ручками нужно будет прописать D:\wininst!

И наконец папка "созданная" junction может быть корректно удалена только junction, ну или форматированием.
C:\windows\system32\junction.exe -d d:\junctions\installer если попытка была неудачной
Автор: Nagual
Дата сообщения: 19.05.2009 19:59
Snarrrk
можно, для этого сначала очисть ассоциацию
Код:
Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\.cmd]

после чего заново ее поставь
Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.cmd]
@="cmdfile"

[HKEY_CLASSES_ROOT\.cmd\PersistentHandler]
@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"

[HKEY_CLASSES_ROOT\.cmd\ShellNew]
"Nullfile"=""
Автор: 01MDM
Дата сообщения: 19.05.2009 21:13
yurkesha
Можно в качестве рекомендации поместить следующее:

1. присвоение значения переменной:
set "variable=value"

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

И разъяснить почему и зачем.
Автор: yurkesha
Дата сообщения: 19.05.2009 21:47
01MDM
А новые варианты возможных ошибок найти? Все вышенаписанное уже сформулировано как офоррмить и кто именно в шапку помещать будет - дело десятое...
Ну правда если эта тема больше никому не интересна то я не настаиваю
Пользуйтесь на здоровье скриптом из шапки "для удаления концевых пробелов"...
Автор: xp3n
Дата сообщения: 19.05.2009 22:05
подскажите!
мне нужно скачать файлы с http://.
если какой-то определенный, то указываю файл.rar, а как скачать сразу все файлы? указываю *.* и мне пишет - ошибка 404 not found, и при выполнении вместо *.* показывает %2А.%2А
как это исправить?
Автор: 01MDM
Дата сообщения: 19.05.2009 22:45
yurkesha

Цитата:
А новые варианты возможных ошибок найти?

Думаю, что не надо искать их специально. Может действительно стоит завести подраздел в шапке, где отмечать типичные ошибки. Но как показывает практика люди приходят, спрашивают, а то что выделено жирным красным в упор не видят.
Не всегда все бывает очевидно, смотришь и в упор не видишь простые ошибки. А если команда в батнике не прописана явно, а формируется в ходе его выполнения, то вполне может быть и такой результат :

Код:
rd /s /q c:\ temp 2>nul
echo Please, insert Windows install CD and press Reset.
pause 1>nul
Автор: yurkesha
Дата сообщения: 19.05.2009 23:05
01MDM
ну вот как раз именно приведенный пример показывает насколько изолирование операндов бывает полезным:
Код: rd /s /q "c:\ temp" 2>nul
echo Please, insert Windows install CD and press Reset.
pause 1>nul
Автор: Andrey128
Дата сообщения: 20.05.2009 06:27
01MDM

Цитата:
pause 1>nul

А зачем единичка нужна?
Автор: 01MDM
Дата сообщения: 20.05.2009 08:27
Andrey128
Это просто привычка, можно и без нее.
Автор: Johny_x3mal
Дата сообщения: 20.05.2009 08:46
Maza_Faka
надо найти файл по локальной сети и заменить его другим, а там где нет файла этого, скопировать каталог
Автор: khrusTby
Дата сообщения: 20.05.2009 13:00
Есть код
Нужно сделать 10 сек. задержку и если юзер ничего не выбрал за 10 сек, то запустить базу 1, а если нажал, то запустить то что он выбрал. Не могу понять как обработать его нажатие, пока идет отсчет времени. Не сиден я в батниках. Подозреваю, что вопрос глуповат.

@echo off
set nt=
set Vib = "0"
:_loop
SET /A nt=%nt%+1
cls
echo Через %nt% sec. base "ELEKT" start automatic...
ping -n 2 -w 1000 127.0.0.1 > nul
if NOT "%nt%"=="10" goto :_loop

if "%nt%"=="10" set /a Vib = 1
if "%Vib%"=="0" set /p "Vib=Enter you base (1 - is ELEKT; 2 - is ANAIS)"

if "%vib%"=="1" (
rem start D:\1Cv77\Bin\1cv7.exe enterprise /D "D:\ELEKT")
echo elekt
if "%vib%"=="2" (
rem start D:\1Cv77\Bin\1cv7.exe enterprise /D "D:\ANAIS")
echo anais

pause

rem echo @ exit
Автор: pNcty3
Дата сообщения: 20.05.2009 20:52
Люди хелп! как поменять имя компьютера на введеное, сори за тупой вопрос )
Автор: HaK1R
Дата сообщения: 21.05.2009 06:54
pNcty3
Мой кмпьютер>свойства>имя кмпьютера>изменить
Автор: Maza_Faka
Дата сообщения: 21.05.2009 07:49
pNcty3

Цитата:
как поменять имя компьютера на введеное

Пример:

Код:
@Echo Off

Echo Enter a new computer name

Set /P CompName=

Reg Add HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName /V ComputerName /D %CompName% /F
Reg Add HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName /V ComputerName /D %CompName% /F
Автор: khrusTby
Дата сообщения: 21.05.2009 12:35
Ребята, как сделать составное условие типа,
если А не равно 1 И А не равно 2 то что-нить......
Автор: 01MDM
Дата сообщения: 21.05.2009 14:13
khrusTby

Код:
set "a=A"
if %a% neq 1 (
if %a% neq 2 echo doing something
)
Автор: Capitolyst
Дата сообщения: 21.05.2009 15:38
Здравствуйте господа!
Помогите пожалуйста с решением одной "простейшей" задачи;
Нужно создать батник,который формировал бы ежемесячный отчёт об изменениях в
рабочем каталоге(измененные фаилы).
Заранее благодарю.
Автор: tatuchipapa
Дата сообщения: 21.05.2009 15:48
Добрый день!
Ищу решение. Нужно ребутить точку доступа(ECB-3610-S) при отсутствии инета. Через телнет, вручную ребутися, но вдобавок нужно каждый раз набирать логин, пароль.
С батниками не сталкивался, из всего что нарыл, нужен бат файл который бы проверял наличие инета каждые 60 сек. при отсутствии вызывал телнет с ребутом.
Огромное спасибо!
Автор: HaK1R
Дата сообщения: 21.05.2009 16:08
Capitolyst
А какого рода должен быть отчет, приведи пример.
И если файл был создан а потом удален, в отчете должно быть отражено что его создали а потом удалили. Другими словами как часто должно сравниваться список раз в месяц?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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