Войти

Показать полную графическую версию : [архив] Нужна помощь в написании 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

amel27
25-11-2008, 12:00
Freezet, Нужен батник »
тут не стол заказов, а место обсуждения конкретных проблем, для начала приложите свои усилия

D_Master
пример Drives.vbs из Flash Drive Disinfector »
тот же запрос на CMD:
For /F %%i In ('WMIC LogicalDisk Where "(DriveType=2 Or DriveType=3) And (MediaType=0 Or MediaType=11 Or MediaType=12 Or MediaType Is Null)" GET DeviceID^|Find ":"') Do @Echo %%i

Rostlv
25-11-2008, 14:42
amel27
Большое спасибо за то, что откликнулись. Хочу уточнить.

По вопросу 3, сначала проверить включена ли служба и только при её отключенном состоянии, включить.

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

Freezet
25-11-2008, 16:25
amel27, прошу прощения... что я должен сделать? если не разбираюсь в етом? ето не раздел помощи? я приложил усилия чтоб правильно и понятно задать вопрос....

Тема называется Нужна помощь в написании BAT.... чем не понравились мои слова?

Помощи не ждать?

amel27
26-11-2008, 04:18
Freezet
извиняюсь за назидательный тон, но незнание не освобождает от чтения справки (зачем шапка?),
от готового скрипта мало толку если вы сами не приложили к нему свою руку и голову

что я должен сделать?
разбить задачу на маленькие подзадачи, попытаться самостоятельно решить каждую в отдельности:

1. определить по имени файла имя архива;
2. добавить файл в архив и удалить оригинал;
3. определить по имени архива имя папки назначения;
4. отделить старые архивы от актуальных;
5. переместить старые архивы в свои папки хранения;
6. удалить старые папки хранения в каталоге назначения.

каждая задача может решаться по разному
@Echo Off
SetLocal EnableDelayedExpansion

Set DIR1=C:\CSTRIKE
Set DIR2=C:\DEMOS
Set NMAX=5

For %%i In ("%DIR1%\*.dem") Do Rar m -ep %%i.rar %%i
For %%i In ("%DIR1%\*.rar") Do (
Set $NAME=%%~ni
Set $Y=!$NAME:~3,2!
Set $M=!$NAME:~5,2!
Set $D=!$NAME:~7,2!

If "%DATE%" NEQ "!$D!.!$M!.20!$Y!" (
Set $PATH=%DIR2%\!$D!.!$M!.!$Y!\
If Not Exist "!$PATH!" MD "!$PATH!"
MOVE "%%i" "!$PATH!"
)
)
For /F "Delims=" %%i In ('DIR /O:-D /A:D /B "%DIR2%\*"') Do (
Set /A NMAX -=1
If !NMAX! LSS 0 RD /S /Q "%DIR2%\%%i"
)

З.Ы. Кстати, про секунды неясность - в имени файла их нет, а имя архива в условии в точности совпадает именем файла... или старые файлы перезаписываются?.. тогда и в архиве они тоже будут перезаписываться!

amel27
26-11-2008, 10:16
Rostlv, сначала проверить включена ли служба и только при её отключенном состоянии, включить »NET START сам это делает :)
мой CMD работает, я беру и завершаю процесс CMD.exe, скрипт прекращает работу, но остаётся в директории запуска, отсюда вопрос, как самоудалить мой файл в случае принудительного завершения процесса? »из батника никак
запретить принудительное завершение моего процесса CMD.exe »
от кого защищать? Администратор может завершить любой процесс (кроме SYSTEM), обычный пользователь только свои

Freezet
26-11-2008, 13:20
amel27, справку читал и основные команды понимаю.. Кое что могу и сам но все же каждый будет делать по своему, как ему легче. мой вариант будет плохим, так как новичок :)

При запуске батника пишет Системе не удается найти указанный путь

на счет совпадений имен думаю их не будет или очень-очень редко :)

amel27
26-11-2008, 13:29
При запуске батника пишет Системе не удается найти указанный путь »
скопируй RAR.EXE в каталог с батником или добавь путь к нему в переменную PATH
на счет совпадений имен думаю их не будет »
тогда в каждом архиве будет по одному файлу, т.е. накопительных архивов не будет

Rostlv
26-11-2008, 16:45
amel27, уточнения по вопросу 4:
Нужно, чтобы этот код работал на протяжении всего CMD-скрипта, а не единожды, как это сделать?

Set PROCESS=cmd.exe
For /F %%i In ('TaskList^|FindStr /BIC:"%PROCESS%"') Do Set PROCNAME=%%i
If "%PROCNAME%"=="" (
Del /F /Q %0
GoTo :EOF
)

уточнения по вопросу 7:
Код работает, но записывает квадратики, как установить правильную кодировку?

amel27
27-11-2008, 03:01
Rostlv
чтобы этот код работал »нерабочий код, cmd.exe это тот же батник, т.е. типа: если меня "убили" - убрать свой "труп"
это какой такой "дух скрипта" будет потом удалять? :) если волнует безопасность, варианты:

- запускать батник из TEMP-каталога (рано или поздно удалится);
- компилировать батник в EXE-файл, тогда вскрыть код будет проблематично;
- отслеживать процесс другим скриптом или тем же, но запущенным в другом процессе, но простой проверки "CMD.EXE" будет недостаточно (оба процесса будут CMD.EXE)

записывает квадратики, как установить правильную кодировку? »
хранить текст батника в DOS-кодировке (синонимы: OEM, 866)

DImaN!
27-11-2008, 09:01
Добрый день. Я уже задавал этот вопрос в теме по AutoIT, но меня перенаправили сюда. Не могли бы Вы мне помочь с одной маленькой задачей, а именно:
Как можно в VBScript получить путь к текущей директории и zip-архиву. К примеру, на диске С в папке folder находится какой-то file.zip, нужно его распаковать средствами VBScript.
Но нужно, чтобы сам файл скрипт искал в той же директории, где и он сам находится (+ желательно, чтобы он искал все архивы и их распаковывал).
Вот пример моего кода, который как я написал распаковывает только указанный файл в указанной директории:
strZipFile = "c:\folder\file.zip"
outFolder = "c:\folder"

Set objShell = CreateObject( "Shell.Application" )
Set objSource = objShell.NameSpace(strZipFile).Items()
Set objTarget = objShell.NameSpace(outFolder)
intOptions = 256
objTarget.CopyHere objSource, intOptions

Creat0R
28-11-2008, 01:35
DImaN!, Как можно в VBScript получить путь к текущей директории »
Так:

Wscript.Echo GetScriptDir()

Function GetScriptDir()
GetScriptDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\", -1, 1)-1)
End Function

К примеру, на диске С в папке folder находится какой-то file.zip, нужно его распаковать средствами VBScript.
Но нужно, чтобы сам файл скрипт искал в той же директории, где и он сам находится (+ желательно, чтобы он искал все архивы и их распаковывал). »
Можно попробовать примерно так (не тестировал):

'On Error Resume Next

Dim sScriptDir, sZipsDir, sUnZipDir

Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set oShell = WScript.CreateObject("Shell.Application")

sScriptDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\", -1, 1)-1)

sZipsDir = sScriptDir
sUnZipDir = sScriptDir

Set oRoot = FSO.GetFolder(sZipsDir)
Set oAllFiles = oRoot.Files

For Each oFile in oAllFiles
If Right(oFile.Name, 4) = ".zip" Then UnZipFiles oFile.Path, sUnZipDir
Next

Function UnZipFiles(sZipFile, sDest)
'Get zip file namespace object
Set oFolder = oShell.NameSpace(sZipFile)

'Get list of items in zip file
Set oItems = oFolder.Items

'If not exists, create destination folder
If FSO.FolderExists(sDest) = 0 Then FSO.CreateFolder(sDest)

'Get destination folder namespace object
Set oDest = oShell.NameSpace(sDest & "\")

'Extract the files
oDest.CopyHere oItems, 64
End Function

DImaN!
28-11-2008, 10:06
Creat0R, огромное спасибо! Все замечательно работает... Осталось только капитально разобраться в Вашем скрипте

NBA
28-11-2008, 12:38
Нужна помощь!!! Нужно скопировать файлы с одного сервера на другой. Проблема заключается в том, что server2 включается каждий день в неизвестное время с 9AM до 12 AM
copy /Y /Z "\\server1\Share$\BACKUP\*.bkp", "\\server2\Share$\BACKUP\*.bkp"
Т.е. если server2 нету должен сработать таймер пока server2 не появится. Команда АТ не катит.
Заранее спасибо за ответы

NBA
28-11-2008, 14:25
ето должно быть что-то типа:
if exist \\server2\backup\nul goto process copy /Y /Z "\\server1\Share$\BACKUP\*.bkp", "\\server2\Share$\BACKUP\*.bkp",
но у меня почему-то не получается, скрипт отрабатывает но нет никаких сообщений и файл не копируется
к тому же нужно в указаное время - с 9AM до 12 AM а то он будет бесконечно так лобудеть
P.S.: Я новенький и зелененький

censored
28-11-2008, 15:06
Как в батнике сделать чтобы был выбор. Например: Выбирите номер дейсвия (1,2,3,4). Допустим если выбирают 1 то выполняется одна команда, если 2 то другая...и т.д.

Petya V4sechkin
28-11-2008, 15:50
censored, как-то так:
@Echo Off
Set /P Ch=Выберите номер действия (1,2,3,4)
If "%Ch%"=="1" Echo 1-я команда
If "%Ch%"=="2" Echo 2-я команда
If "%Ch%"=="3" Echo 3-я команда
If "%Ch%"=="4" Echo 4-я команда

censored
28-11-2008, 15:57
Спасибо.

Rostlv
29-11-2008, 18:50
1. Нужно написать код для проверки большого количества файлов в разных директориях, и в случае отсутствия хотя-бы одного, вывести окошко с текстом об отсутствии файлов. Главное, чтобы эту команду не перечислять после указания каждого файла, она одинакова для всех отсутствующих файлов, должно быть красиво. :)

Мой вариант:
If Not Exist %Директория%\файл.exe (
msg * "Текст с сообщением"
GoTo :EOF
)

2. Как с помощью CMD создать реально работающий прогрессбар?

3. Чем лучше всего компилировать cmd-файл в .exe

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

yurfed
29-11-2008, 21:23
GoTo :EOF
не совсем понятен переход в конец содержимого файла (EOF) и не совсем понятен смысл-
и в случае отсутствия хотя-бы одного, вывести окошко с текстом об отсутствии файлов. » Я в этом написании не силён, но при отсутствии файлов больше чем один, вы просто не заметите какой отсутствует. Это будет происходить очень быстро

D_Master
29-11-2008, 21:40
Rostlv, Нужно написать код для проверки большого количества файлов в разных директориях, и в случае отсутствия хотя-бы одного, вывести окошко с текстом об отсутствии файлов. »
@echo off
if exist file1.ext (
call :yes1 ) else (
call :no1
)
:yes1
if exist file2.ext (
call :yes2 ) else (
call :no2
)
rem и т.д.

:no1
cls
echo Файл file1.ext не существует!
pause
exit

:no2
cls
echo Файл file2.ext не существует!
pause
exit

Но это слишком долго, если нужен код для проверки большого количества файлов в разных директориях »
Как с помощью CMD создать реально работающий прогрессбар? »
Насколько мне известно, никак. Копайте в сторону VBS и/или AutoIt (http://forum.oszone.net/thread-98914.html)'a
Чем лучше всего компилировать cmd-файл в .exe »
Quick Batch File Compiler (http://abyssmedia.com/quickbfc/)




© OSzone.net 2001-2012