Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: KLASS
Дата сообщения: 24.09.2002 03:28
Командная строка, батники\сценарии (bat, cmd)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.


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

Примечание: Большие куски кода заключайте в тэг [no][more][/no]

Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 4

Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей


[more=Старая версия первого сообщения]Я тут бьюсь уже пару дней над одной задачкой... пока дельного ничего не вышло. Давайте сообща подумаем?
И так. При каждой перезагрузке системы (ХР) по сценарию выхода создается REG файл определенной ветки реестра (команда REG) и кладется в определенную папку. При каждой загрузке системы надо чтобы самый последний!! созданный из REG файлов экспортировался обратно в реестр, той же командой.
Чего хочу (задача): так как файлов REG накапливается много, при экспорте надо определить самый свежий из них, т.е какой строкой (командой, способом) оределять этот последний файл. Не плохо бы еще чтобы по истечении, к примеру 10 дней, старые файлы REG удалялись. Можно ли реализовать это все через батники, или я размечтался?

ЗЫ. пробовал создавать список REG файлов, потом к примеру его можно отсортировать, но как выполнить только первую строку из списка файлов... запускаются на выполнение все REG файлы, а надо то один и самый последний... (А у меня... Мандриан. (С) Булгаков. Собачье сердце). Если горбато объяснил, не поленитесь пните, тока не больно ;-)[/more]
Автор: Advanced_Guest
Дата сообщения: 24.09.2002 13:17
KLASS
Имхо - решить такую задачу простым BAT-ником никак.
Легче написать программу например на VB.
Автор: Crash Master
Дата сообщения: 24.09.2002 13:27
Ок, такой вопрос по теме.
Есть директория, в которой есть поддиректории типа 001 и 001.old.
Нужно скопировать только 001, 002, 003 без .old. Как?
Сорри если не совсем по теме.
Директорий таких много, несколько тысяч, так что вручную это не пойдет.
Автор: WebDi
Дата сообщения: 24.09.2002 13:33
Crash Master
А если создать в .ВАТ цикл, а в нём счётчик и "сору ..."?

Если нет, то VBS.
Автор: Crash Master
Дата сообщения: 24.09.2002 13:38
WebDi
Насчет номеров это был пример, на самом деле номера идут в разброс и намного длиннее.
Можно увидеть пример? А в VBS я не шарю, увы.
Автор: snop
Дата сообщения: 24.09.2002 13:45
Crash Master
'************************************************
' File: logout.vbs
' Author: snop
' Last time updated: 28/02/2001
'removes folders with all content
'************************************************
Option Explicit
Const PathTempDir = "c:\temp"
Dim fso,oSubFold,DelFold,oFile,i,DelFile
Set fso = WsCript.CreateObject("Scripting.FileSystemObject")

on error resume next
DelAll PathTempDir

'end of script
Wscript.Quit

''''''''''''''''''''''''''''''''''''''''''''''
'Subrotines
''''''''''''''''''''''''''''''''''''''''''''''
'check whether the folder exist
Sub DelAll(TargPath)
if (fso.FolderExists(TargPath)) Then
SubDelFold TargPath
SubDelFiles TargPath
End If
End Sub

Sub SubDelFold(TargFold)
Set oSubFold = fso.GetFolder(TargFold)
For each oSubFold in oSubFold.SubFolders
DelFold = TargFold & "\" & oSubFold.Name
fso.DeleteFolder(DelFold)
Next
End Sub

Sub SubDelFiles(TargFold)
Set oSubFold = fso.GetFolder(TargFold)
Set oFile = oSubFold.Files
For each i In oFile
DelFile = TargFold & "\" & i.Name
'trying to remove active file
fso.DeleteFile DelFile
Next
End Sub
'*** Endt

Добавлено
Вместо удалять папки,используй fso.CopyFile
и делай проверку,что в имени нету ".old" перед тем как копировать

П.С.
Времени нет,писать полный скрипт,это выдернутый мой скрипт из GPO
Автор: KLASS
Дата сообщения: 24.09.2002 14:10
Advanced_Guest

Цитата:
Легче написать программу например на VB.

Где уж нам... Мы... в университетах не обучались... (С) Булгаков Собачье сердце.
Автор: f_serg
Дата сообщения: 24.09.2002 14:11
KLASS


Цитата:
но как выполнить только первую строку из списка файлов


Если хочешь, то я напишу тебе утилиту, которая это делает. Быстро. Бесплатно.
Автор: KLASS
Дата сообщения: 24.09.2002 14:56
f_serg

(Опустив глазки в пол)
Хотелось бы конечно средствами самой операционки обойтись, но...
если это тебе совсем не трудно, я буду очень признателен. brtr@mail.ru
Автор: Crash Master
Дата сообщения: 24.09.2002 15:28
KLASS
Есть еще идеи по моему вопросу?
Автор: f_serg
Дата сообщения: 24.09.2002 15:38
KLASS
Переходим на приват. Читай почту.
Автор: snop
Дата сообщения: 24.09.2002 15:49
Crash Master

Цитата:
Есть еще идеи по моему вопросу?

а чем тебе мое не устраивает ?
Автор: ymy
Дата сообщения: 24.09.2002 15:51
KLASS А NNCrone не пробывал?
Crash Master
xcopy /?
...

/EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. When any of the
strings match any part of the absolute path of the file to be
copied, that file will be excluded from being copied. For
example, specifying a string like \obj\ or .obj will exclude
all files underneath the directory obj or all files with the
.obj extension respectively.

Тоесть создаёшь файл some.txt со строчкой old выполняешь команду:
Ex: xcopy c: d: /e /EXCLUDE:some.txt


Автор: Crash Master
Дата сообщения: 24.09.2002 15:53
snop
Я уже говорил что с ВБ я не знаком, тяжеловато что-то въехать.
Если можешь, распиши подробнее. Спасибо.
Автор: Voxor
Дата сообщения: 24.09.2002 16:03
Простите, что я вмешиваюсь в Ваш диалог, но можно мне задать вопрос: есть ли возможность в taskbar'е пристроить командную строку или уже такое решение есть. Если не понятно - поясняю: клик по иконке в таскбаре должен вызвать появление командной строки, хоть в самом таскбаре, хоть где (в закрепленном режиме)... не исчезнет, пока Esc не нажмешь...
Автор: snop
Дата сообщения: 24.09.2002 16:07
Crash Master

Цитата:
Я уже говорил что с ВБ я не знаком, тяжеловато что-то въехать.
Если можешь, распиши подробнее. Спасибо.

ОК,если решение ymy тебе не подойдет,то пиши в ПМ,постараюсь построчно обьяснить(и где копать,чтобы знать VBS )
Автор: KLASS
Дата сообщения: 24.09.2002 17:30
ymy

Цитата:
А NNCrone не пробывал?

Да все время хочется как то без лишних прог такие задачки решать, возможностью самой операционки.
Автор: Da_Neil
Дата сообщения: 24.09.2002 17:42
Voxor
Есть прога WinConsole или можно просто Win+R> cmd
Автор: snop
Дата сообщения: 24.09.2002 18:40
Voxor
сделай ярлык на cmd.exe и положи в quick lanch bar
Автор: KLASS
Дата сообщения: 24.09.2002 19:38
Crash Master
у тя способ пошел который ymy предложил?
Автор: ymy
Дата сообщения: 24.09.2002 20:31
KLASS Я не совсем понял, а как у тебя имена .reg файлов генерятся?
Автор: KLASS
Дата сообщения: 24.09.2002 21:17
ymy

Цитата:
как у тебя имена .reg файлов генерятся?


Кусок из батника


Код:
date /t > E:\date.txt
time /t > E:\time.txt
for /f "tokens=1" %%i in (E:\date.txt) do for /f "tokens=1,2 delims=: " %%j in (E:\time.txt) do reg export "HKLM\SOFTWARE\Resplendence Sp\Resplendent Registrar\Bookmarks" E:\!\BAK\REG\DAY\%%i_%%j-%%k.reg
del E:\date.txt
del E:\time.txt
Автор: ymy
Дата сообщения: 25.09.2002 06:35
KLASS
date /t > E:\date.txt можно заменить на %DATE%
time /t > E:\time.txt можно заменить на %TIME%

А основную задачу можно выполнить проще, при экспорте надо в некотором файле(last.bat) например сохранять имя файла, с командой импорта что то вроде

Код: echo reg import E:\!\BAK\REG\DAY\%%i_%%j-%%k.reg>last.bat
Автор: Crash Master
Дата сообщения: 25.09.2002 07:18
KLASS

Цитата:
у тя способ пошел который ymy предложил?

Еще не пробовал, вот только файлов ОЧЕНЬ много, и не будет никакой индикации, типа осталось 25%.. А если оборвется и нужно будет начинать все с начала? Может в каком-то файл менеджере при копировании есть опция exclude?
Автор: ymy
Дата сообщения: 25.09.2002 07:41
Crash Master
Дык например в Fare, если те которые не .old без расширения то выделяешь по маске *.
или с начала выделяешь по *.* а потом снимаешь выделение у *.old
или сразу с такой маской *.*|*.old
и копируешь выделенные куда надо, с прогресс баром и всем таким.
Автор: Crash Master
Дата сообщения: 25.09.2002 07:44
ymy
И как выделять/снимать выделение, вручную? Я же писал, что там миллион директорий. Я буду сидеть неделю.
Автор: ymy
Дата сообщения: 25.09.2002 07:47
Crash Master Я же написал по маске, на правой клавиатуре +,
ну или через меню Files\Select Group и пишешь *.*|*.old

Как ты без этого жил-то раньше, это же основная фича файловых менегеров
Автор: Crash Master
Дата сообщения: 25.09.2002 08:10
ymy

Цитата:
Как ты без этого жил-то раньше

Как-то не приходилось копировать столько файлов
Ок, попробую, спасибо.
Автор: KLASS
Дата сообщения: 25.09.2002 17:52
ymy

Цитата:
date /t > E:\date.txt можно заменить на %DATE%
time /t > E:\time.txt можно заменить на %TIME%

Не въеду никак -куда вставлять в (множество)?

Цитата:
А основную задачу можно выполнить проще

Точно!, однако... А как правильней код записывать в одну строку как то залепить или в две с командой FOR в каждой??
Я вот так забил.

Код:
for /f "tokens=1" %%i in (C:\date.txt) do for /f "tokens=1,2 delims=: " %%j in (E:\time.txt) do reg export "HKLM\SOFTWARE\Resplendence Sp\Resplendent Registrar\Bookmarks" E:\!\BAK\REG\DAY\%%i_%%j-%%k.reg
for /f "tokens=1" %%i in (C:\date.txt) do for /f "tokens=1,2 delims=: " %%j in (E:\time.txt) do echo reg import E:\!\BAK\REG\DAY\%%i_%%j-%%k.reg>last.bat
Автор: ymy
Дата сообщения: 25.09.2002 18:12
KLASS

Код:
for /f "tokens=1" %%i in ("%DATE%") do for /f "tokens=1,2 delims=: " %%j in ("%TIME%") do echo reg import E:\!\BAK\REG\DAY\%%i_%%j-%%k.reg >last.bat

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.