Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
спасибо за красивый способ, возьму его на заметку,
а то иногда условия по именам сложнее и циклом
их решать не оптимально
но, если возможно, то все предпочитаю в переменные загонять,
даже списки в предыдущем примере я бы так сделал:

Код:
@echo off
setlocal enabledelayedexpansion
set /a filecount=0
set CHEKFILE=not_exist
FOR /L %%a IN (0,1,9) DO (
    for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
        FOR /L %%c IN (0,1,9) DO (
            FOR /L %%d IN (0,1,9) DO (
                FOR /L %%e IN (0,1,9) DO (
                    FOR /L %%f IN (0,1,9) DO (
                        if exist "<путь>\nnn%%a%%b%%c%%d%%e%%f" (
                            set /a filecount=!filecount!+1
                            set CHEKFILE=!CHEKFILE!,nnn%%a%%b%%c%%d%%e%%f
                            if !filecount!==1 (
                                set CHEKFILE=nnn%%a%%b%%c%%d%%e%%f
                            )
                        )
                    )
                )
            )
        )
    )
)
for %%i in (!CHEKFILE!) do (
    echo %%i
)
pause

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 14:36 18-05-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
basstard
А можно ли показывать в окне обрабатываемое значение, а то тупо чернуй экран и все...
Ну если конечно @echo off не прописывать в начале, то видно, но примитивно...
 
 
и

Цитата:
FOR /L %%a IN (0,1,9) DO (  
    for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z ) do (  
        FOR /L %%c IN (0,1,9) DO (  
            FOR /L %%d IN (0,1,9) DO (  
                FOR /L %%e IN (0,1,9) DO (  
                    FOR /L %%f IN (0,1,9) DO (  
                        if exist nnn%%a%%b%%c%%d%%e%%f команда  
                    )  
                )  
            )  
        )  
    )  
)  

 
и

Цитата:
@echo off  
setlocal enabledelayedexpansion  
FOR /L %%a IN (0,1,9) DO (  
    for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (  
        FOR /L %%c IN (0,1,9) DO (  
            FOR /L %%d IN (0,1,9) DO (  
                FOR /L %%e IN (0,1,9) DO (  
                    FOR /L %%f IN (0,1,9) DO (  
                        if exist "<путь>\nnn%%a%%b%%c%%d%%e%%f" (  
                            set CHEKFILE=nnn%%a%%b%%c%%d%%e%%f  
                        )  
                    )  
                )  
            )  
        )  
    )  
)  
echo !CHEKFILE!  
pause  

 
...перебор работает... но 01MDM выразился верно:

Цитата:
при следующем запуске батника пропустить уже обработанные файлы:

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

Цитата:
ВОТ УСЛОВИЕ    
некая перменная CHEKFILE=nnnXmYYYY    
где:    
"n" - это латинские буквы (значение постоянное)    
"X" - это цыфра от 1 до 9    
"m" - это латинские буквы от "a" до "z"    
"Y" - это число от 0000 до 9999    

 
nnn - может принимать любые значения, т е у меня файлы типа:
akl4b8950
kmd8c9583
kvu2l9573
и т д
 
перебор нужен везде кроме первых 3х латинских букв...
 
и еще
 
моя ошибочка, забыл указать что YYYY имеет свое начало с двухзначного числа - от 01 до 9999... вот...
 
king_stiven

Цитата:
да, findstr ом лучше.Просто человек просил счётчик, он его и получил

 
ОГРОМНОЕ СПАСИБО за счетчик! он мне пригодиться...
а вот FINDSTR может и подходящее решение, но у меня дерево каталогов, но решение о пропуске (создание лог-файла) это очень даже хорошо...
 
Добавлено:
У меня еще есть вопрсик маленький...
 
как батником отключить имеющиеся Dial-Up соединение не зная его имени?
 
 

Код:
rasdial >dial.log
 
::а как теперь при помощи for'а вытащить первую строку из dial.log и засунуть в set dial=
 
rasdial %dial% /disconnect

 
но это лишь на одно подключение, а если их несколько? как все имеющиеся подключения воткнуть в set?

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 14:43 18-05-2009 | Исправлено: ScreamWolf, 14:58 18-05-2009
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf
Ну вот, с этого и надо было начинать что нужно пройтись по каталогу и всем его подкаталогам в которых... а если ты далее подробно распишешь что и где лежит и какого вида файлы то помочь тебе будет гораздо проще и быстрее.

Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 14:59 18-05-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
ну то что внутри смысла не имеет... в глобальном каталоге (где собственно и есть начало) имеються каталоги с именами дат (формата DD.MM.YYYY) в каждом каталоге имеются каталоги с именами тайм (формата HH.MM) и уже по ним раскинуты файлики с именами типа: akl4b8950 kmd8c9583 kvu2l9573 (без расширения!)
 
и вот еще что...

Цитата:
FOR /L %%a IN (0,1,9) DO (  
    for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z ) do (  
        FOR /L %%c IN (0,1,9) DO (  
            FOR /L %%d IN (0,1,9) DO (  
                FOR /L %%e IN (0,1,9) DO (  
                    FOR /L %%f IN (0,1,9) DO (  
                        if exist nnn%%a%%b%%c%%d%%e%%f команда  
                    )  
                )  
            )  
        )  
    )  
)  

при удовлетворении условия перебора мне необходимо выполнить ряд команд (создание батника и последующий вызов через CALL - не предлагать), вот думаю тупо перейти по goto но тогда опять встает вопрос! как мне снова вернуться на то место, на чем остановился?  
Есть ли возможность после удовлетворения поиска результат (найденое значение) сунуть в SET?

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 15:12 18-05-2009
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хорошо, такой вопрос могут встретиться файлики другого вида? В каждой подпапочке какого вида файлы могут попасться(пример)? Ну сделали мы с ними эти действия. что ты говоришь. это нетрудно, составили мы список D:\temp\akl4b8950 D:\temp\1kmd8c9583 D:\temp\1\kvu2l9573. Могут быть одновременно файлы вида akl4b8950 и akl2c5550? Считай день ты потерял.

Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 15:26 18-05-2009
KPOBABAK

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
HaK1R

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

Всего записей: 70 | Зарегистр. 16-11-2005 | Отправлено: 15:28 18-05-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
кроме указаных файлов по маске nnnXmYYYY, может встретиться если только desktop.ini (attrib -h) думаю он не помеха!...
 
Добавлено:
и, кстати, по поводу соединений dial-up

Цитата:
У меня еще есть вопрсик маленький...  
 
как батником отключить имеющиеся Dial-Up соединение не зная его имени?  
 
 
 
Код:rasdial >dial.log  
 
::а как теперь при помощи for'а вытащить первую строку из dial.log и засунуть в set dial=  
 
rasdial %dial% /disconnect  
 
 
но это лишь на одно подключение, а если их несколько? как все имеющиеся подключения воткнуть в set?

 
 
Добавлено:
king_stiven
 
структура примерно следующая:

Код:
 
E:.
|   nnn.log
|   Перебор.bat
|
+---01.05.2009
|   +---10.00
|   |       gnn1a9998
|   |       nga1a1090
|   |       uuj1b6532
|   |
|   +---11.00
|   |       cvc6b6362
|   |       nwr1a9098
|   |       sdf1a1000
|   |
|   \---12.00
|           icl5f9541
|           mnj4z8465
|           ocl4k5485
|
+---02.05.2009
|   +---10.00
|   |       jfy8s9400
|   |       kfj6d8409
|   |       mav5c6788
|   |
|   +---11.00
|   |       mau1l5598
|   |       mck9z7777
|   |       pow3k6689
|   |
|   \---12.00
|           mmk8d8229
|           ofl4j7529
|           prk5j5630
|
\---03.05.2009
    +---10.00
    |       dpp3o5900
    |       sts2i8922
    |       wex4i6678
    |
    +---11.00
    |       mcd3o5959
    |       vmu5c0843
    |       xii4u1198
    |
    \---12.00
            aqq3d5000
            tls4z5036
            vii9f8765
 

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 15:34 18-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf
по поводу соединений dial-up
 
если лог нужен только чтобы узнать имена подключений,
то лог не нужен:

Код:
@echo off
setlocal enabledelayedexpansion
set /a entrycount=0
for /f "skip=1 delims=" %%i in ('rasdial') do (
    set /a entrycount=!entrycount!+1
    if !entrycount!==1 (
        set entryname=%%~i
    )
)
echo !entryname!
pause

а если их несколько
заскриншоть или напиши что именно возвращает rasdial

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 15:59 18-05-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
basstard
 

Цитата:
а если их несколько  
заскриншоть или напиши что именно возвращает rasdial

 
Как только дорвусь до того ПК на котором имеется несколько подключений - так сразу же пришлю...
 
А так! СПАСИБО большое за помощь...

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 16:09 18-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf
с такой структурой разумнее сначала определить
список всех файлов, а потом, если это необходимо,
проверить соответствие названия.
поэтому вопрос: 1. на диске e:\ есть лишние файлы/папки,
2. в нужных папках есть лишние файлы?

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 16:18 18-05-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
basstard
1
на диске есть еще куча разных каталогов и файлов
2
в нужных каталогах нет лишних файлов и каталогов...
 
могут присутствоватть пустые каталоги
 
а папки типа DD.MM.YYYY - все они находяться в одном каталоге!

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 16:29 18-05-2009 | Исправлено: ScreamWolf, 16:31 18-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf
на диске есть еще куча разных каталогов и файлов
попробуй тогда вот так:

Код:
@echo off
setlocal enabledelayedexpansion
set /a filecount=0
set filelist=not_exist
for /l %%a in (0,1,3) do (
    for /l %%b in (0,1,9) do (
        for %%c in (0,1) do (
            for /l %%d in (0,1,9) do (
                if exist e:\%%a%%b.%%c%%d.2009 (
                    for /r e:\%%a%%b.%%c%%d.2009 %%i in (*) do (
                        set /a filecount=!filecount!+1
                        set filelist=!filelist!,%%i
                        if !filecount!==1 (
                            set filelist=%%i
                        )
                    )
                )
            )
        )
    )
)
for %%j in (!filelist!) do (
    echo %%j
)
pause

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

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 16:52 18-05-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
KPOBABAK
не совсем уверен что я тебя понял, но может это

Код:
shutdown -s -m \\Comp -t 0
 

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 19:01 18-05-2009
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
basstard
ScreamWolf
Если я скажу, ерундой не занимайтесь, это будет не слишком?

Код:
@echo off  
for /f "tokens=*" %%c in ('dir /b /s /a:-d ^| findstr [a-z][a-z][a-z][0-9][a-z][0-9][0-9]*') do (
    а здесь с каждым из найденных файлов можно сделать всё, что угодно: сравнить со списком из nnn.log, узнать имя папки, где лежит файл, скопировать, создать папки с именем файла  и т д и т п
)
del /q nnn.log
dir /b /s /a:-d | findstr [a-z][a-z][a-z][0-9][a-z][0-9][0-9]*>> nnn.log

Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 19:39 18-05-2009 | Исправлено: king_stiven, 21:24 18-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
Ох.. смотрю на эту красоту (правда красиво) и думаю: ну почему же я так
боюсь и избегаю findstr и перенаправления вывода..
и понял почему — из-за непредсказуемости результата:
в твоем примере, если где-нибудь на диске окажется безобидная папка myd0c25,
например c:\documents\myd0c25, то все ее содержимое и всех ее подкаталогов
будет успешно обработано например, удалено ..или отправлено начальству

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 20:18 18-05-2009
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
basstard

Цитата:
кроме указаных файлов по маске nnnXmYYYY, может встретиться если только desktop.ini (attrib -h) думаю он не помеха!...  


Цитата:
в глобальном каталоге (где собственно и есть начало) имеються каталоги с именами дат (формата DD.MM.YYYY) в каждом каталоге имеются каталоги с именами тайм (формата HH.MM) и уже по ним раскинуты файлики с именами типа: akl4b8950 kmd8c9583 kvu2l9573 (без расширения!)  

Можно ещё провести проверку этих файлов на имя папки где они лежат (формата HH.MM) , а также на имя родительской папки папки где они лежат (формата DD.MM.YYYY), или же проверку на количество родительских папок до корня диска и при превышении двух как в данном случае. файл не учитывать, много вариантов. С другой стороны мы не знаем его комп. а он уверен. что ненужных файлов не наберём. тогда зачем усложнять?

Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 20:41 18-05-2009 | Исправлено: king_stiven, 20:45 18-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
я бы findstr'у все-равно не доверил: представь, если придется запустить с системного диска:
из логов как-раз и узнаешь, сколько интересных названий скрывалось в папке c:\windows
зато вывод dir'а в переменную очень понравился, еще и по аттрибутам можно,
а то всегда, когда нужно папку от файла отличить, приходится вот так делать:
cd <путь> && (echo это Папка!)
cd <путь> || (echo а это не папка!)
вот теперь буду сразу в цикл их вбрасывать

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 21:21 18-05-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
что то флуда много, перестал понимать ваш разговор
basstard
А что сделать то тебе надо?

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 21:55 18-05-2009 | Исправлено: HaK1R, 23:19 18-05-2009
guru431

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как стандартными средствами Windows сделать так, чтобы в батнике не выводилось никаких сообщений (команды, результаты выполнения, ошибки)?
 
Вот мой вариант:
@echo off
echo wait
del /f /s /q "%Temp%\*" > nul
 
Команды и результаты выполнения не выводятся, но ошибки всё равно появляются:
"Процесс не может получить доступ к файлу..."
"Не удается найти указанный файл."
 
PS: cmdow по ряду причин не подойдет

Всего записей: 64 | Зарегистр. 28-02-2007 | Отправлено: 11:13 19-05-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
del /f /s /q "%Temp%\*" 1>nul  2>&1
 

 
Ввод-вывод:
0 - STDIN
1 - STDOUT
2 - STDERR
3 - 9 - резерв для разработчиков
>& и &< - перенаправление дескрипторов
 
Почитайте справку %WinDir%\help\ntcmds.chm

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:33 19-05-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru