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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
farseer777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
Спасибо, именно так. И можно узнать, как первое число записать в какую-нибудь переменную, чтобы оперировать кол-вом файлов?

Всего записей: 169 | Зарегистр. 07-06-2006 | Отправлено: 12:14 22-01-2010
PARKANAF

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
теперь создает 2 папки цту и 802, при  повторном запуске так же ругается , что 802 уже существует

Всего записей: 9 | Зарегистр. 25-11-2009 | Отправлено: 12:18 22-01-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не понил. а понил. щас
 
Добавлено:
PARKANAF
как у тебя конкретно папки называются напиши, какая длина имен и как будут числа меняться

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:19 22-01-2010 | Исправлено: bomzzz, 12:22 22-01-2010
PARKANAF

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
цту 802 , цту 803 , цту 804 и т.д

Всего записей: 9 | Зарегистр. 25-11-2009 | Отправлено: 12:28 22-01-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farseer777
@ECHO OFF
COLOR 9F
DIR /A:D | FIND "Ї Ї®Є"
DIR /A:D | FIND "Ї Ї®Є">MYFILE.TXT
FOR /F %%I IN (MYFILE.TXT) do echo %%I
DEL MYFILE.TXT /Q
PAUSE  
 
тут надо конструкцию FOR чтоб прямо поток разбирала - но я это еще не делал ни разу - обычно просто сохраняю в файл и из него вычитываю. если тебе так пойдет вот. а тут мастера есть на сложные конструкции подожди может появятся
 
FOR /F %%I IN ('DIR /A:D | FIND "Ї Ї®Є"') do echo %%I  то есть как то вот так надо делать в одну строку, но я не делал ни разу не знаю в чем ошибка
 
Добавлено:
PARKANAF
проблема в пробелах в именах сейчас поправлю
 
@ECHO OFF
COLOR 9F
FOR /R "D:\File_Input" %%I IN (.) DO SET LASTPAPKA=%%I
SET LASTPAPKA=%LASTPAPKA:~0,-2%
SET /A COUNT=%LASTPAPKA:~-3%
SET /A COUNT=%COUNT%+1
MKDIR "%LASTPAPKA:~0,-3%%COUNT%"
PAUSE
 
проверяй

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:32 22-01-2010 | Исправлено: bomzzz, 12:39 22-01-2010
PARKANAF

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо добрый человек! Теперь все работает))

Всего записей: 9 | Зарегистр. 25-11-2009 | Отправлено: 12:41 22-01-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
оно работает для папок с номерами от 100 до 999 - не самый супер батник получился
 
Добавлено:
гыгы - сделал. знак надо екранировать посередки
 
@ECHO OFF
COLOR 9F
DIR /A:D | FIND "Ї Ї®Є"
FOR /F %%I IN ('DIR /A:D ^| FIND "Ї Ї®Є"') DO ECHO %%I
PAUSE  
 
то есть число папок в директории теперь в переменной I. только как я погляжу - считаются две лишние папки - корневая и еще какая то
 
понятно считается корневая папка и диск. чтоб не считались скрытые вот так DIR /A:D-H, а то они не распечатываются но считаются

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:42 22-01-2010 | Исправлено: bomzzz, 14:08 22-01-2010
rutamsystem

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите,
 
удаляет все подряд:
...
...
elete  
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
 
Надо чтобы все подряд, но за исключением файлов с расширением doc, xls, txt
Что нужно изменить? чтобы эти 3 вида файлов не удалялись?
Пожалуйста.

Всего записей: 4 | Зарегистр. 16-10-2009 | Отправлено: 20:03 24-01-2010
vitrzn



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

Цитата:
Надо чтобы все подряд, но за исключением файлов с расширением doc, xls, txt  
Что нужно изменить? чтобы эти 3 вида файлов не удалялись?  
Пожалуйста.

 
for /f "tokens=*" %%i in ('dir /b /s *.*') do move "%%i"
for /f "tokens=*" %%i in ('dir /b /a-d ^| findstr /v " список файлов которые не нужно удалять "') do del "%%i"
 
 
p.s. удаление идёт из всех вложенных папок

Всего записей: 1358 | Зарегистр. 28-10-2007 | Отправлено: 21:25 24-01-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
все таки лучше if использовать - в теории могут быть файлы с именами mytxt.dll

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 01:22 25-01-2010
rutamsystem

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vitrzn
Спасибо! проверю
но вопрос каков синтаксис перечисления файлов,
мне нужно указать только расширение файлов а имена могут быть любыми
я даже и не знакую какие ..
 
for /f "tokens=*" %%i in ('dir /b /s *.*') do move "%%i"  
for /f "tokens=*" %%i in ('dir /b /a-d ^| findstr /v "*.doc, *.xls ,*.txt") do del "%%i"  
 
правильно? или нет ? перечислил
"*.doc, *.xls ,*.txt"
Помогите пожалуйста
 
 
 
 

Всего записей: 4 | Зарегистр. 16-10-2009 | Отправлено: 04:56 25-01-2010 | Исправлено: rutamsystem, 05:14 25-01-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в этом красивом решении - ^| findstr /v выполняет поиск в выходном потоке команды DIR строк не содержащих перечисленные выражения, то есть подстановочных знаков в том смысле в котором ты их используешь не надо.

Цитата:
 
Поиск строк в файлах.
 
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл]
        [/C:строка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]]
        строки [[диск:][путь]имя_файла[ ...]]
  /V         Печатает строки, не содержащие совпадений с искомыми.
Краткая сводка по синтаксису регулярных выражений:
  .         Любой символ.
  *         Повтор: ноль или более вхождений предыдущего символа или класса
  ^         Позиция в строке: начало строки
  $         Позиция в строке: конец строки
  [класс]   Класс символов: любой единичный символ из множества
  [^класс]  Обратный класс символов: любой единичный символ из дополнения
  [x-y]     Диапазон: любые символы из указанного диапазона
  \x       Служебный символ: символьное обозначение служебного символа x
  \<xyz    Позиция в слове: в начале слова
  xyz\>    Позиция в слове: в конце слова
 

список выражений просто через пробел надо походу - вот так у меня работает
for /f "tokens=*" %%i in ('dir ^| findstr "bat txt"') do echo %%i
 
поэтому могут быть удалены не только файлы с расширениями txt, но и просто содержащие в пути это сочетание буков,  
вот так попробуй for /f "tokens=*" %%i in ('dir ^| findstr "bat$ dll$"') do echo %%i
файлы help.bat и bat.txt различаются и файл bat ggg.txt тоже, то есть именно когда bat в конце строки
 
"doc$ xls$ txt$"

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 08:19 25-01-2010 | Исправлено: bomzzz, 09:47 25-01-2010
personag



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С помощью такого кода можно распечатать на принтер не по-молчанию (здесь, Printer HP2727D) файлы test_*.txt из wordpad (установлен по-умолчанию в windows):
 

Цитата:
for %%P in (B:\test_*.txt) do "C:\Program Files\Windows NT\Accessories\wordpad.exe" /pt "B:\%%~nxP" "Printer HP2727D"

Всего записей: 73 | Зарегистр. 22-11-2006 | Отправлено: 11:22 25-01-2010
rutamsystem

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vitrzn
bomzzz
Спасибо,
Перечитал много страниц форума и вот что собрал (спасибо автору)
 
===============================
@echo off
setlocal
set "ds=Documents and Settings"
set "tf=Local Settings\Temp"
set "ca=Local Settings\Application Data\1C\1Cv81"
set "cb=Application Data\1C\1Cv81"
for %%i in (c) do (
        if not %~d0==%%i: call:clean %%i
)
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
)
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\%ca%" (
        pushd "%1:\%ds%\%%i\%ca%"
        call:delete
        popd
    )
     if exist "%1:\%ds%\%%i\%cb%" (
        pushd "%1:\%ds%\%%i\%cb%"
        call:delete
        popd
    )
)
goto:eof
elete
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
===========================
 
НУЖНО
чтобы в каталоге  set "cb=Application Data\1C\1Cv81"
1. Были удалены все любые создаваемые папки.
2. Удалены любые файлы, но! за исключением файлов с расширением *.xls , *.doc , *.txt - они должны остаться (пока они не будут находиться в удаляемых папках).
 
Пробовал поменять строку в батнике:
for /f "tokens=*" %%i in ('dir /b /ad') do rd /s /q "%%i" 1>nul 2>&1  
на предложенную
for /f "tokens=*" %%i in ('dir ^| findstr "doc$ xls$ txt$"') do echo %%i  
чего то не работает, может что не так делаю?
 
Помогите пожалуйста. Что конкретно и куда и чем заменить?
Спасибо всем кто помогает!

Всего записей: 4 | Зарегистр. 16-10-2009 | Отправлено: 11:54 25-01-2010 | Исправлено: rutamsystem, 11:57 25-01-2010
TNR



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как с командной строки найти определённые запускной файл и занести его местоположения в реестр ?

Всего записей: 1574 | Зарегистр. 15-03-2004 | Отправлено: 11:58 25-01-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хорошо бы поконкретнее
TNR
 
@ECHO OFF
COLOR 9F
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R "C:\" %%I IN (.) DO (
SET MYPath=%%I
SET MYPath=!MYPath:~0,-1!
IF EXIST "!MYPath!MyFile.txt" (
REG ADD "HKCU\Software\MyKey" /V MyValue /t REG_SZ /d "!MYPath!MyFile.txt" /F  
GOTO END
)
)
:END
ENDLOCAL
PAUSE

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:03 25-01-2010 | Исправлено: bomzzz, 12:53 25-01-2010
TNR



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
Мне необходимо найти файлик cons.exe на разделах и занести в реестр путь где он лежит...  
 
Добавлено:
bomzzz
По сути вот это почти решает мою задачу,  
 
@ECHO OFF  
SETLOCAL ENABLEDELAYEDEXPANSION  
FOR /R "G:" %%I IN (.) DO (  
SET MYPath=%%I
SET MYPath=!MYPath:~0,-1!  
IF EXIST "%%I\cons.exe" (  
REG ADD "HKCU\Software\MyKey" /V MyWrk /t REG_SZ /d "%%I" /F  
GOTO END  
)  
)  
:END  
ENDLOCAL  
PAUSE
 
но только в реестр по мимо пути ставиться ещё какая то точка... как её убрать ?
И можно ли сделать проверку не только одного диска, а несколько ?

Всего записей: 1574 | Зарегистр. 15-03-2004 | Отправлено: 14:07 25-01-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
REG ADD "HKCU\Software\MyKey" /V MyValue /t REG_SZ /d "!MYPath!MyFile.txt" /F  
REG ADD "HKCU\Software\MyKey" /V MyWrk /t REG_SZ /d "%%I" /F    
 
вот так, в оригинале написано "!MYPath!", а у тебя "%%I"
IF EXIST "%%I\cons.exe" - и вот тут тоже
 
SET MYPath=!MYPath:~0,-1!  вот эта строка выкидывает точку, она взялась отсюда  
FOR /R "G:" %%I IN (.) DO (   , на фига так сделали не знаю
можно сделать и несколько, повтори для каждого диска. или можно цикл замутить еще один
 
for /f %%i in ('fsutil fsinfo drives ^|more') do (  
  echo %%i
)
 

Цитата:
 
@ECHO OFF  
SETLOCAL ENABLEDELAYEDEXPANSION  
FOR /R "G:\" %%I IN (.) DO (  
SET MYPath=%%I
SET MYPath=!MYPath:~0,-1!  
REM ECHO !MYPath! можно вставить чтоб не скучно ждать было
IF EXIST "!MYPath!cons.exe" (  
REG ADD "HKCU\Software\MyKey" /V MyWrk /t REG_SZ /d "!MYPath!" /F  
GOTO END  
)  
)  
:END  
 
FOR /R "D:\" %%I IN (.) DO (  
...............................................................
 
 
ENDLOCAL    
 

 
"G:\"  косая черта обязательно - офигенно быстро ищет, вбс срипт гораздо дольше вошкается
НЕКОРРЕКТНО РАБОТАЕТ ПОЧЕМУ ТО. ОШИБКА ГДЕ ТО  
НАШЕЛ В ЧЕМ ОШИБКА - НЕ ИЩЕТ ТАМ ГДЕ В ПУТИ ВОСКЛИЦАТЕЛЬНЫЙ ЗНАК
 
Добавлено:
ВОТ ПЕРЕДЕЛАЛ. НО ЗАРАЗА ВСЕ РАВНО НЕ ИЩЕТ В ИМЕНАХ С !
@ECHO OFF
COLOR 9F
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R "c:\" %%I IN (.) DO IF EXIST %%~fI\MYFILE.TXT ECHO %%~fI\MYFILE.TXT & GOTO END
:END
ENDLOCAL
PAUSE
 
ECHO %%~fI\MYFILE.TXT - ВМЕСТО ВОТ ЕТОГО ЗАПИСЬ В РЕЕСТР НАПИШИ
 
А ВОТ ТАК ИЩЕТ
@ECHO OFF
COLOR 9F
FOR /R "c:\" %%I IN (.) DO IF EXIST %%~fI\MYFILE.TXT ECHO %%~fI\MYFILE.TXT & GOTO END
:END
PAUSE
 
ВСЕ ПЕРЕПРОБОВАЛ - ЛЮБЫЕ ЗНАКИ МОЖНО И АТРИБУТЫ ПАПОК. ТОЛЬКО В КОРЗИНЕ НЕ ИЩЕТ ПОЧЕМУ ТА

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:22 25-01-2010 | Исправлено: bomzzz, 18:37 25-01-2010
TNR



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
Спасибо большое ! Немного подправил твой вариант и всё замечательно работает )))
 
Добавлено:
bomzzz
А как ещё сделать проверку на наличие записи в реестре ? Если запись есть, то запустить например блокнот, если нет запустить поиск т.е. то что описано выше .

Всего записей: 1574 | Зарегистр. 15-03-2004 | Отправлено: 07:14 26-01-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот себе делал батник для очистки системы
 
REM ****DOWNLOAD MASTER*****
REG QUERY "HKCU\Software\2VG\Download Master" /v InstallPath
IF ERRORLEVEL 1 GOTO NEXTDM
 
NOTEPAD.EXE
GOTO FINISH
 
:NEXTDM
 
FOR /R "c:\" %%I IN (.) DO IF EXIST %%~fI\MYFILE.TXT ECHO %%~fI\MYFILE.TXT & GOTO FINISH
 
:FINISH
 
если ключа не существует (конкретно в этом примере проверяется наличие параметра - пути инсталяции) - а значит предположительно и установленной программы переход на метку

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:50 26-01-2010 | Исправлено: bomzzz, 16:03 26-01-2010
   

Страницы: 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