Показать полную графическую версию : [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов
русские названия не переделывались в OEM кодировку а оставались в ANSI ? »
chcp 1251 >nul
Просьба в написании скрипта.
Следующие вводные условия:
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. По окончании работы скрипта выводило сообщение с рапортом, что файл заменён или нет.
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 адрес) у машины свой внутренний адрес. Как сделать чтоб шла проверка по определенным директориям на наличие потерянных файлов при обмене и выдавалось уведомление об этих потерянных файлах (например по почте).
Veter_79, Формулируйте задачу конкретней, а среду описывайте подробней. Как организован обмен файлами?.. по какому протоколу?.. какая периодичность?.. что конкретно нужно сверять - два каталога или содержимое каталога со списком файлов?.. компьютеры по сетке друг друга видят?.. по IP или по имени?
Идея такова есть несколько батников лежащих в определенной папке корня %SystemRoot%
Нужно сделать так чтобы они запускались каждую неделю скажем в пятницу 16:00 Можно ли это реализовать на VBS ? Если да то не могли бы помоч.... Если нет то как это можно реализовать ?
Спасибо.
D_Master
10-11-2008, 11:04
illznn, наверное лучше сделать задание в планировщике.
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 из реестра.
при попытке удаления 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 написать исполняемый код батника и чтобы он работал.
Вообще не удаляет? »
удаляет если пройтись по всем вложенным ключам и удалять по списку "снизу", нужна рекурсивная функция... но нужна ли?
А можно из 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)
Всем доброго дня суток.
Преамбула.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
Спасибо. Я тоже думал сначала реализовать таким путём, правда потом подумал, почему бы не попробовать взять имя файла напрямую из потока, и вот те на... Хочется понять всё же до конца: это действительно проблема именно самой команды start, что она берёт из канальной передачи не всё, а только самое первое слово до пробела? Ведь судя по выводу, поток нормально передаёт полное имя файла.
Petya V4sechkin
12-11-2008, 16:29
Gennie, если вы запустите:
start /b /max Feedback procedure.doc
оно ведь не выполнится, понимаете?
О, и правда, не подумал. :) Действительно не выполнится. И запихать кавычки туда тоже не получится. Значит, видимо, остаётся только через for. Благодарю!
Liveofan
13-11-2008, 04:49
amel27,
спасибо большое, все помогло )
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
Есть exe-файл, запускающий cmd. Если кликнуть по нему 1 раз - запускается cmd-файл, если кликнуть 2 раза, то запускается тот же cmd, только дважды, тем самым один мешает работе другому и соответственно происходят ошибки.
Нужна cmd-команда, не позволяющая запустить одновременно 2 и более cmd-файлов, причём её нужно указать не в exe-файле, а в самом cmd, если это возможно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.