Показать полную графическую версию : [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов
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
amel27
Большое спасибо за то, что откликнулись. Хочу уточнить.
По вопросу 3, сначала проверить включена ли служба и только при её отключенном состоянии, включить.
По вопросу 5, мой CMD работает, я беру и завершаю процесс CMD.exe, скрипт прекращает работу, но остаётся в директории запуска, отсюда вопрос, как самоудалить мой файл в случае принудительного завершения процесса? Или если возможно запретить принудительное завершение моего процесса CMD.exe, потому что, возникают ошибки, файл лучше отрабатывать до конца.
amel27, прошу прощения... что я должен сделать? если не разбираюсь в етом? ето не раздел помощи? я приложил усилия чтоб правильно и понятно задать вопрос....
Тема называется Нужна помощь в написании BAT.... чем не понравились мои слова?
Помощи не ждать?
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"
)
З.Ы. Кстати, про секунды неясность - в имени файла их нет, а имя архива в условии в точности совпадает именем файла... или старые файлы перезаписываются?.. тогда и в архиве они тоже будут перезаписываться!
Rostlv, сначала проверить включена ли служба и только при её отключенном состоянии, включить »NET START сам это делает :)
мой CMD работает, я беру и завершаю процесс CMD.exe, скрипт прекращает работу, но остаётся в директории запуска, отсюда вопрос, как самоудалить мой файл в случае принудительного завершения процесса? »из батника никак
запретить принудительное завершение моего процесса CMD.exe »
от кого защищать? Администратор может завершить любой процесс (кроме SYSTEM), обычный пользователь только свои
amel27, справку читал и основные команды понимаю.. Кое что могу и сам но все же каждый будет делать по своему, как ему легче. мой вариант будет плохим, так как новичок :)
При запуске батника пишет Системе не удается найти указанный путь
на счет совпадений имен думаю их не будет или очень-очень редко :)
При запуске батника пишет Системе не удается найти указанный путь »
скопируй RAR.EXE в каталог с батником или добавь путь к нему в переменную PATH
на счет совпадений имен думаю их не будет »
тогда в каждом архиве будет по одному файлу, т.е. накопительных архивов не будет
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:
Код работает, но записывает квадратики, как установить правильную кодировку?
Rostlv
чтобы этот код работал »нерабочий код, cmd.exe это тот же батник, т.е. типа: если меня "убили" - убрать свой "труп"
это какой такой "дух скрипта" будет потом удалять? :) если волнует безопасность, варианты:
- запускать батник из TEMP-каталога (рано или поздно удалится);
- компилировать батник в EXE-файл, тогда вскрыть код будет проблематично;
- отслеживать процесс другим скриптом или тем же, но запущенным в другом процессе, но простой проверки "CMD.EXE" будет недостаточно (оба процесса будут CMD.EXE)
записывает квадратики, как установить правильную кодировку? »
хранить текст батника в DOS-кодировке (синонимы: OEM, 866)
Добрый день. Я уже задавал этот вопрос в теме по 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
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
Creat0R, огромное спасибо! Все замечательно работает... Осталось только капитально разобраться в Вашем скрипте
Нужна помощь!!! Нужно скопировать файлы с одного сервера на другой. Проблема заключается в том, что server2 включается каждий день в неизвестное время с 9AM до 12 AM
copy /Y /Z "\\server1\Share$\BACKUP\*.bkp", "\\server2\Share$\BACKUP\*.bkp"
Т.е. если server2 нету должен сработать таймер пока server2 не появится. Команда АТ не катит.
Заранее спасибо за ответы
ето должно быть что-то типа:
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
Спасибо.
1. Нужно написать код для проверки большого количества файлов в разных директориях, и в случае отсутствия хотя-бы одного, вывести окошко с текстом об отсутствии файлов. Главное, чтобы эту команду не перечислять после указания каждого файла, она одинакова для всех отсутствующих файлов, должно быть красиво. :)
Мой вариант:
If Not Exist %Директория%\файл.exe (
msg * "Текст с сообщением"
GoTo :EOF
)
2. Как с помощью CMD создать реально работающий прогрессбар?
3. Чем лучше всего компилировать cmd-файл в .exe
Заранее спасибо.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.