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

ShaddyR
20-11-2008, 20:01
Так с этой командой удаляется сама папка temp а мне надо что бы из неё (из папки Temp) удалялись все папки и файлы. »
а в чем разница между одним и вторым, если после первого пересоздавать эту самую папку? Ты хочешь очищать папку Temp ?

xctr
21-11-2008, 06:37
ShaddyR, да я хочу очищать папку темп.

amel27
21-11-2008, 12:05
да я хочу очищать папку темп »
сколько можно об одном и том же?.. читали 24 (http://forum.oszone.net/showthread.php?p=860543)-ю страницу топика?

ShaddyR
21-11-2008, 13:05
xctr, погляди здесь:
Как удалить темповые файлы при выходе из WinXP Home!!! (http://forum.oszone.net/showthread.php?p=341919&highlight=%25temp%25#post341919) //это если вызывать не из bat-файла, но ту же команду.
Если же непосредственно по твоему вопросу - см. здесь (http://forum.oszone.net/post-471638.html#post471638), с учетом комментария (http://forum.oszone.net/post-471656.html#post471656).
>
amel27, кол-во выводимых сообщений у участника в настройках может отличаться от аналогичных настроек у тебя (напр., у меня в данной теме всего 12 страниц и, соответственно, сложно было бы прочесть 24-ю ;)). Корректнее будет называть номер сообщения и давать ссылку непосредственно на него.

xctr
22-11-2008, 06:27
Всем спасибо разобрасля :) применил:
cmd /c rd /s /q "%userprofile%\local settings\temp\"

D_Master
23-11-2008, 19:15
Как можно определить ВСЕ жесткие и сьемные диски на компьютере и раскидать по ним определённые файлы и папки?

Petya V4sechkin
23-11-2008, 20:37
D_Master, пример Drives.vbs из Flash Drive Disinfector:
On Error Resume Next

Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile("_drives.cf")
Set objLogFile = objFSO.OpenTextFile("_drives.cf", ForAppending, True)

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
For Each objDisk in objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
If objDisk.DriveType = "2" Or objDisk.DriveType = "3" Then
objLogFile.Write( objDisk.DeviceID)
objLogFile.writeline
End If
Next
Создает файл _drives.cf со списком жестких и съемных дисков.

D_Master
23-11-2008, 21:33
Petya V4sechkin, всё супер, всё копируется, правда осталась небольшая проблемка - скрипт определяет ещё и диск A:\ и пытается накопировать файла туда, как бы этого избежать?
Для копирования использую такой код:
@echo off
cscript copy.vbs >null
For /F "Delims=" %%I In (_drives.cf) Do Call :сopy %%~I
:copy
Set J=%~1
copy marker.file %J:~0% >null
del null

inplust
23-11-2008, 22:17
Всем здрасте)
Я сам 0 в командной строке, и даже незнаю с чего начать.. в гугле забил, чёт ничё ненашёл...
надо вообщем чтобы копировал 2 файла из одной папки в другуй с заменой и посли этого запускал приложение..
Спасибо за любую помощ чайнику!
буду очень благодарен!!)

pva
23-11-2008, 22:58
вот так сработало:

D:\Work\cpp\c++test>copy /y test.cpp d:\temp | copy /y main.cpp d:\temp | explorer d:\temp

если надо чтоб при неудачи одноги из копирований (ну сети там нет или ещё чего) запуска не было:

D:\Work\cpp\c++test>copy /y test.cpp d:\temp && copy /y main.cpp d:\temp && explorer d:\temp

если надо чтоб выполнилось первое действие из перечисленных по списку:

D:\Work\cpp\c++test>copy /y test.cpp d:\temp || copy /y main.cpp d:\temp || explorer d:\temp

В общем, при помощи || (=или), && (=и) и скобок можно сформулировать условный запуск нескольких команд в строчке
ещё есть вариант писать батник или скрипт

inplust
24-11-2008, 01:09
Блин ничего не понял... тыкал, тыкал.. (

мне нужно
F:/111/download.dat
F:/111/global.dat
F:/111/opera6.ini
перенести с заменой в
E:\Program Files\Opera\profile
и потом автоматически запустить opera.exe....
если не трудно помогите плз..

Bosika
24-11-2008, 01:19
Уважаемый amel27 подсказал с написанием кода, который прекрасно работает.
@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 * "Сообщение! Программа обновлена, для применения изменений необходим выход из программы."
Можно ли, реализовать в данном скрипте, что бы при выводе этих сообщений, в текстовом окне, отображался соответственный значок: http://www.nncron.ru/help/RU/images/icon16.gif http://www.nncron.ru/help/RU/images/icon15.gif http://www.nncron.ru/help/RU/images/icon13.gif или похожий по смыслу.

D_Master
24-11-2008, 05:53
inplust,
@echo off
set dir="E:\Program Files\Opera\profile"
set out=F:\111
copy /Y %out%\download.dat %dir%\
copy /Y %out%\global.dat %dir%\
copy /Y %out%\opera6.ini %dir%\
cd /D E:\Program Files\Opera
start opera.exe
exit

amel27
24-11-2008, 07:37
что бы при выводе этих сообщений, в текстовом окне, отображался соответственный значок »через CMD никак, можно через VBS:
On Error Resume Next

PrgDir = "MyProgram" ' Путь относительно %ProgramFiles%
PrgExe = "yyy.exe"
PrgNew = "yyy_new.exe"
PrgOld = "yyy_old.exe"

Set objWSS = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

PrgDir = objWSS.ExpandEnvironmentStrings("%ProgramFiles%") &"\"& PrgDir
PrgExe = PrgDir &"\"& PrgExe
PrgNew = PrgDir &"\"& PrgNew
PrgOld = PrgDir &"\"& PrgOld

If (objFSO.FileExists(PrgNew) = vbFalse) Then
Call MsgBox("Обновлений программы не обнаружено!",32,"Сообщение")
Wscript.Quit
End If

If (objFSO.FileExists(PrgOld) = vbTrue ) Then objFSO.DeleteFile PrgOld
If (objFSO.FileExists(PrgOld) = vbFalse) Then objFSO.MoveFile PrgExe, PrgOld
If (objFSO.FileExists(PrgExe) = vbFalse) Then objFSO.MoveFile PrgNew, PrgExe
If (objFSO.FileExists(PrgNew) = vbTrue ) Then
Call MsgBox("Обновление программы не произведено, обратитесь к администратору!",16,"Ошибка")
Wscript.Quit
End If

Call MsgBox("Программа обновлена, для применения изменений необходим выход из программы.",48,"Предупреждение")

Petya V4sechkin
24-11-2008, 10:03
осталась небольшая проблемка - скрипт определяет ещё и диск A:\ и пытается накопировать файла туда, как бы этого избежать?
Можно добавить проверку MediaType:
On Error Resume Next

Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile("_drives.cf")
Set objLogFile = objFSO.OpenTextFile("_drives.cf", ForAppending, True)

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
For Each objDisk In objWMIService.ExecQuery ("Select DeviceID From Win32_LogicalDisk Where ((DriveType = 2 Or DriveType = 3) And (MediaType = 0 Or MediaType = 11 Or MediaType = 12 Or MediaType Is Null))")
objLogFile.Write(objDisk.DeviceID)
objLogFile.WriteLine
Next

D_Master
24-11-2008, 13:03
Petya V4sechkin, благодарю, всё супер! :up

Rostlv
24-11-2008, 13:36
Несколько вопросов по CMD:

1. Нужна команда позволяющая запуск CMD-файла только в указаной директории, если запустить файл в любой другой - отмена выполнения.

2. Как указать в CMD-файле проверку наличия большого количества файлов (примерно 40), при отсутствии хотя-бы одного из указанных - отмена выполнения.

3. Как указать проверку включена ли служба, если нет - запустить службу.

4. Можно ли прописать в CMD-файл проверку наличия определённого процесса, при отсутствии такого - выход из исполняемого CMD.

5. Если по какой либо причине, например после принудительного завершения процесса CMD.exe, мой CMD-файл прекратил работу, какая должна быть команда самоудаления.

6. Как самоудалить скрытый CMD, [Del /F /Q %0] - не работает.

7. Как прописать в файл дистрибутива svcpack.in_ свою строку?

inplust
24-11-2008, 14:26
D_Master, спасиб большое! Выручил! Всё работает! :up

Freezet
24-11-2008, 14:49
Нужен батник.

Имеется папка cstrike, в ней примерно каждый час появляются 2 новых *.dem файла, имена их примерно такие
cl-0811241311-de_train.dem
cl-0811241301-de_dust2.dem
где:
cl - не меняется
081124 - дата (год/месяц/число)
1311 и 1301 - время (чч/мм)
de_dust2 и de_train - часть имени (имена карт в игре CS 1.6)

Нужно чтоб при запуске батника файлы dem с папки cstrike добавлялись в архив (можно winrar или 7zip) и перемещались в папку demos/%date%/ тоесть каждый день новая папка в которой файлы dem только за етот день. Пример:
demos/24.11.08/cl-0811241311-de_train.dem.rar
demos/24.11.08/cl-0811241301-de_dust2.dem.rar
demos/25.11.08/cl-0811251740-de_nuke.dem.rar
demos/25.11.08/cl-0811251805-de_inferno.dem.rar

чтоб ето было только за последние 5 дней, тоесть когда пойдет 6й день то папка с 1м днем стерлась :)

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

Батник будет добавлен в Назначенные задания и будет выполнятся каждый час.

Заранее спасибо

amel27
25-11-2008, 11:42
Rostlv
1. Каталог запуска ROOT
Set ROOT=C:\TEST

If "%~dp0" NEQ "%ROOT%\" Exit

@Echo Текст скрипта

2. Одноименный LST-файл содержит список обязательных файлов
Set ROOT=C:\WINDOWS

DIR /B/A:-D "%ROOT%\*" >"%~dpn0.tmp"
FindStr /IVBEG:"%~dpn0.tmp" "%~dpn0.lst"

If Not ErrorLevel 1 Exit
@Echo Текст скрипта

3. Так проверить или запустить?.. "NET START /?"
4. Например так:
Set PROCESS=notpad.exe

For /F %%i In ('TaskList^|FindStr /BIC:"%PROCESS%"') Do Set PROCNAME=%%i
If "%PROCNAME%"=="" Exit

@Echo Текст скрипта

5,6 Не вижу разницы между вопросами
ATTRIB -R -H -S "%0"
DEL "%0"

7. распаковать -> записать -> запаковать
Set ROOT=C:\TEST

Set $CAB=%ROOT%\svcpack.in_
Set $INF=%TEMP%\svcpack.inf

Expand "%$CAB%" "%$INF%"
Echo Строка 1 >>"%$INF%"
Echo Строка 2 >>"%$INF%"

makecab /D CompressionType=LZX /D CompressionMemory=21 /L "%ROOT%" "%$INF%"
del /f /q "%$INF%"




© OSzone.net 2001-2012