PDA

Показать полную графическую версию : [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25 26 27 28 29 30 31

vserd
24-10-2008, 16:28
русские названия не переделывались в OEM кодировку а оставались в ANSI ? »
chcp 1251 >nul

Bosika
31-10-2008, 14:48
Просьба в написании скрипта.
Следующие вводные условия:
1. В директории C:\Program Files\XXX - расположена программа с командным файлом - yyy.exe.
2. Программа временами получает обновления, самого командного файла, которые попадают в директорию самой программы C:\Program Files\XXX и имеет вид файла - yyy_new.exe.
3. Обновления командного файла поступают в процессе работы самой программы.
4. Сам скрипт расположить в другой директории - C:\Program Files\ZZZ
-----------------------------------
Необходимо:
1. Переименовать файл yyy_new.exe в yyy.exe и заменить им существующий.
2. При включении скрипта, вышло сообщение, что будет произведена замена (обновление) командного файла, и что необходимо отключить программу.
3. Необходимо проверить, есть ли, по крайней мере, хотя бы файл для обновления - yyy_new.exe. (В противном случае, лучше ничего не предпринимать, чем переименовывать несуществующий файл!!) - Если нет файла для обновления, то выдать соответствующее сообщение и выйти из программы скрипта.
4. При работе скрипта, (если пользователь не отключил программу), если программа работает - запущен сам командный файл yyy.exe, выходило предупреждение о необходимости отключить программу.
4. По окончании работы скрипта выводило сообщение с рапортом, что файл заменён или нет.

amel27
01-11-2008, 02:29
Bosika, ИМХО для одного EXE выгонять из программы необязательно:@Echo Off

Set PRGDIR=%ProgramFiles%\XXX
Set PRGEXE=yyy.exe
Set PRGNEW=yyy_new.exe
Set PRGOLD=yyy_old.exe

If Not Exist "%PRGDIR%\%PRGNEW%" MSG * "Предупреждение! Обновлений программы не обнаружено!"& Exit
If Exist "%PRGDIR%\%PRGOLD%" DEL /Q /F "%PRGDIR%\%PRGOLD%"
If Not Exist "%PRGDIR%\%PRGOLD%" REN "%PRGDIR%\%PRGEXE%" "%PRGOLD%"
If Not Exist "%PRGDIR%\%PRGEXE%" REN "%PRGDIR%\%PRGNEW%" "%PRGEXE%"

If Exist "%PRGDIR%\%PRGNEW%" MSG * "Ошибка! Обновление программы не произведено, обратитесь к администратору!"& Exit
MSG * "Сообщение! Программа обновлена, для применения изменений необходим выход из программы."

Veter_79
05-11-2008, 15:52
Здравствуйте, такая проблема на удаленной машине находящейся за модемом(модем имеет свой внешний ip адрес) у машины свой внутренний адрес. Как сделать чтоб шла проверка по определенным директориям на наличие потерянных файлов при обмене и выдавалось уведомление об этих потерянных файлах (например по почте).

amel27
06-11-2008, 05:51
Veter_79, Формулируйте задачу конкретней, а среду описывайте подробней. Как организован обмен файлами?.. по какому протоколу?.. какая периодичность?.. что конкретно нужно сверять - два каталога или содержимое каталога со списком файлов?.. компьютеры по сетке друг друга видят?.. по IP или по имени?

illznn
10-11-2008, 10:24
Идея такова есть несколько батников лежащих в определенной папке корня %SystemRoot%
Нужно сделать так чтобы они запускались каждую неделю скажем в пятницу 16:00 Можно ли это реализовать на VBS ? Если да то не могли бы помоч.... Если нет то как это можно реализовать ?
Спасибо.

D_Master
10-11-2008, 11:04
illznn, наверное лучше сделать задание в планировщике.

amel27
10-11-2008, 12:49
illznn
есть несколько батников лежащих в определенной папке корня %SystemRoot%
Нужно сделать так чтобы они запускались каждую неделю скажем в пятницу 16:00 Можно ли это реализовать на VBS ? »зачем без нужды мешать батники с VBS?... если можно - объединить запуск в один батник типа:

CALL "%SystemRoot%\BAT\Batnik1.CMD"
CALL "%SystemRoot%\BAT\Batnik2.CMD"
CALL "%SystemRoot%\BAT\Batnik3.CMD"

потом спланировать задание, пример:
SchTasks /Create /tn "Батник" /tr "C:\WINDOWS\BAT\main.cmd" /sc weekly /d FRI /st 18:00:00 /ru System

З.Ы. Подробно - "SchTasks /?" или в "Справка и поддержка"

Liveofan
12-11-2008, 04:25
Написал небольшой скриптик по отключению автозапуска с любых носителей


Код:'**************************
'*** AutorunDisabled ******
'**************************
Dim WSHShell
Set WSHShell = wscript.CreateObject("wscript.Shell")
'******************************************
'**** Добавляем записи в реестр ***********
'******************************************
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom\AutoRun", "0", "REG_DWORD"

WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\NoDriveTypeAutoRun", "255", "REG_DWORD"

WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf\", "@SYS:DoesNotExist"

WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutopla y\Files\*.*", ""

'*************************************************
'**** Удаление MountPoints2 из реестра ***********
'*************************************************
WSHShell.RegDelete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"

WSHShell.RegDelete "HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"

WSHShell.RegDelete "HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"

WSHShell.RegDelete "HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"

WSHShell.RegDelete "HKEY_USERS\S-1-5-21-2170445449-3629066266-18666223-4272\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"


Все замечательно работает, все необходимые записи добавляются в реестр, но вот при попытке удаления MountPoints2 из реестра, пишет, что данный раздел удалить невозможно, хотя я спокойно его могу удалить ручками. Подскажите, в чем может быть проблема? Как мне все-таки с помощью скрипта удалить MountPoints2 из реестра.

amel27
12-11-2008, 05:50
при попытке удаления MountPoints2 из реестра, пишет, что данный раздел удалить невозможно »
WSH не удаляет ветку, если она содержит ключи, проще батником:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Cdrom" /v AutoRun /t REG_DWORD /d 0 /f
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf" /ve /d "@SYS:DoesNotExist" /f
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutoplay\Files" /v "*.*" /d "" /f

REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2" /f
REG DELETE "HKU\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2" /f
REG DELETE "HKU\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2" /f
REG DELETE "HKU\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2" /f
REG DELETE "HKU\S-1-5-21-2170445449-3629066266-18666223-4272\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2" /f

З.Ы. Код нужно брать в теги [CODE]

Liveofan
12-11-2008, 07:44
Вообще не удаляет? и нет никакой возможности ((
плин обидно...
А можно из WSH запустить батник на удаление просто, т.е. в теле WSH написать исполняемый код батника и чтобы он работал.

amel27
12-11-2008, 13:15
Вообще не удаляет? »
удаляет если пройтись по всем вложенным ключам и удалять по списку "снизу", нужна рекурсивная функция... но нужна ли?

А можно из WSH запустить батник на удаление просто, т.е. в теле WSH написать исполняемый код батника и чтобы он работал »можно через метод RUN (http://msdn.microsoft.com/en-us/library/d5fk67ky(VS.85,printer).aspx) - либо весь батник, либо код построчно (обрати внимание на кавычки):
Set WshShell = WScript.CreateObject("WScript.Shell")
Command = "REG ADD ""HKLM\SYSTEM\CurrentControlSet\Services\Cdrom"" /v AutoRun /t REG_DWORD /d 0 /f"
Return = WshShell.Run(Command, 1, true)

Gennie
12-11-2008, 15:37
Всем доброго дня суток.
Преамбула.K:\PROCEDURES\Internal>dir /b|findstr /i feed
Feedback procedure.doc
Амбула.K:\PROCEDURES\Internal>dir /b|findstr /i feed|start /b/max

K:\PROCEDURES\Internal>Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

K:\PROCEDURES\Internal>Feedback procedure.doc
'Feedback' is not recognized as an internal or external command,
operable program or batch file.
Вопрос: Почему оно не берёт из потока длинное имя файла целиком, а только до первого пробела, и как сделать, чтобы всё-таки start смог заглотить полное имя файла и открыть его? Я ж не передам ему в поток кавычки специально для start... :) К тому же, открывать может понадобиться файлы с именами, в которых даже очень много слов.
При этом проверено: если в потоке передаётся однородное имя файла без пробелов, то start нормально его открывает.

Petya V4sechkin
12-11-2008, 15:51
Gennie, примерно так:
for /f "delims=" %i in ('dir /b *feed*') do start "" /b /max "%i"
Если сохранять в батник, %i заменить на %%i

Gennie
12-11-2008, 16:11
Спасибо. Я тоже думал сначала реализовать таким путём, правда потом подумал, почему бы не попробовать взять имя файла напрямую из потока, и вот те на... Хочется понять всё же до конца: это действительно проблема именно самой команды start, что она берёт из канальной передачи не всё, а только самое первое слово до пробела? Ведь судя по выводу, поток нормально передаёт полное имя файла.

Petya V4sechkin
12-11-2008, 16:29
Gennie, если вы запустите:
start /b /max Feedback procedure.doc
оно ведь не выполнится, понимаете?

Gennie
12-11-2008, 16:41
О, и правда, не подумал. :) Действительно не выполнится. И запихать кавычки туда тоже не получится. Значит, видимо, остаётся только через for. Благодарю!

Liveofan
13-11-2008, 04:49
amel27,
спасибо большое, все помогло )

amel27
13-11-2008, 08:59
Liveofan, тогда на всякий случай функция удаления с подключами на VBS ;)
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003

' Внимание! Скрипт удаляет всё "Избранное" Internet Explorer
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
sPath = "Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Favorites"

Call DeleteRegEntry(objReg, HKEY_CURRENT_USER, sPath)

Function DeleteRegEntry(objReg, sHive, strEnumPath)
Dim subkey, arrSubKeys

objReg.EnumKey sHive, strEnumPath, arrSubKeys
If IsArray(arrSubKeys) Then
For Each subkey In arrSubKeys
Call DeleteRegEntry(objReg, sHive, strEnumPath &"\"& subkey)
Next
End If

Call objReg.DeleteKey(sHive, strEnumPath)
End Function

Rostlv
13-11-2008, 10:12
Есть exe-файл, запускающий cmd. Если кликнуть по нему 1 раз - запускается cmd-файл, если кликнуть 2 раза, то запускается тот же cmd, только дважды, тем самым один мешает работе другому и соответственно происходят ошибки.
Нужна cmd-команда, не позволяющая запустить одновременно 2 и более cmd-файлов, причём её нужно указать не в exe-файле, а в самом cmd, если это возможно.




© OSzone.net 2001-2012