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

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

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

Widok (10-03-2009 12:39): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108

   

Widok



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

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

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:08 19-11-2007 | Исправлено: Dmitriy05, 22:49 13-04-2008
Intexid

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
igor_andreev
спасибо друзья, попробую разобраться, пока для меня это слишком сложно, не все понимаю, что там написано
 
пока вот так придумал делать:

Код:
if -%~x1 neq - (
    echo Eto ne papka: u faila est rasshirenie
    pause
    exit
)
set count=0
for %%Y in (%1\*) do set /a count=count+1
for /d %%Z in (%1\*) do set /a count=count+1
if %count% neq 0 (
    echo Eto papka i v nei %count% elementov
    pause
    exit
)
echo Eto papka, no ona pusta
pause
exit
 

 
подробно:
 
if -%~x1 neq - ( # проверяем, есть ли у файла расширение. если есть, то:
    echo Eto ne papka: u faila est rasshirenie # посылаем юзера на это расширение и уходим не оглядываясь
    pause
    exit
) # если расширения не было, то:
set count=0 # создаем переменную count
for %%y in (%1\*) do set /a count=count+1 # последовательно пересчитываем все только файлы
for /d %%z in (%1\*) do set /a count=count+1 # приплюсовываем все только папки
if %count% neq 0 ( # если результат отличен от нуля, то:
    echo Eto papka i v nei %count% vlozhennyh elementov # сообщаем кол-во вложенных элементов и выходим
    pause
    exit
) # если результат был равен нулю, то:
echo Eto papka, no ona pusta # сообщаем, что это папка, но вложенных эл-тов не найдено
pause
exit
 
этот метод работает прекрасно, но ровно до тех пор, пока переменная и for'ы находятся в позиции else, т.е. вне скобок if
если действия на "да" и "нет" в if'е просто поменять местами (изменив соответственно условие на if NOT), то он не то что бы считать начинает неправильно, он просто аварийно завершается! ну ПОЧЕМУ?, уменя уже волос на голове не осталось, я вырвал их все, почему в скобках это не работает?
вот код, который не работает:

Код:
if not -%~x1 neq - (
    set count=0
    for %%Y in (%1\*) do set /a count=count+1
    for /d %%Z in (%1\*) do set /a count=count+1
    if %count% neq 0 (
        echo Eto papka i v nei %count% elementov
        pause
        exit
    )
    echo Eto papka, no ona pusta
    pause
    exit
)
echo Eto ne papka: u faila est rasshirenie
pause
exit
 

Всего записей: 24 | Зарегистр. 02-10-2008 | Отправлено: 13:04 24-02-2009 | Исправлено: Intexid, 13:17 24-02-2009
v1rus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Подскажите, можно ли решить на .cmd такую задачу:
есть предварительно подготовленный файл такого вида
 
текст        текст        123    456
 
Вообщем текст с разделителями. Нужно над одним из столбцов произвести ряд математических действий (подозреваю что через команду set) и результат записать тот же файл или в новый файл, но с сохранением структуры и остальных столбцов. Сейчас эта задача реализована, но с привлечением дополнительных програм и все это не очень красиво и аккуратно, а хотелось бы от начала до конца всю обработку иметь на cmd.
 
может привлечь для этих целей SED? я его использую немного, но по готовым примерам, но сам такое не осилю к сожалению

Всего записей: 19 | Зарегистр. 16-12-2005 | Отправлено: 15:40 24-02-2009
albamef

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
люди, помоги пожалуйста... такая задача:
в текстовом файле где-то в середине есть строка:
 
SkinDir=
 
задача - после знака равно написать путь к папке с тем батником, в котором он лежит...  
 
например я запускаю файл из папки C:\Program Files\Program\123.bat, вот необходимо чтобы "SkinDir=C:\Program Files\Program".... возможно ли такое, если да то поскажите пожалуйста...?

Всего записей: 2 | Зарегистр. 10-01-2009 | Отправлено: 16:12 24-02-2009
jonnydram

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброе утро =) В первую очередь хочу сказать спасибо Maza_Faka за предоставленный код - спс большое +)
 
Во вторую очередь - мини фича для модернизации уже сделанного.
 
Как сделать так, чтобы при запуске батник сворачивался сразу? Т.е. чтобы пользователь не видел этого черного окошка на фоне. А то ведь пользователи нонче умные пошли - крестик, крестик, крестик. А потом удивляются..

Всего записей: 19 | Зарегистр. 20-02-2009 | Отправлено: 07:06 25-02-2009
Maza_Faka



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

Цитата:
Как сделать так, чтобы при запуске батник сворачивался сразу?

cmdow - изменение параметров и видимости дос-окна - в шапке.
hstart - скрытый запуск командных файлов и консольных программ
 
Добавлено:
albamef

Цитата:
после знака равно написать путь к папке с тем батником, в котором он лежит

Попробуй так:

Код:
 
@Echo Off
 
Call :sbs2.com
 
"%temp%.\sbs2.com" 0 "SkinDir=" "SkinDir=%CD%" < test.txt > result.txt
 
Del /F /Q "%temp%.\sbs2.com"
GoTo :EOF
 
:sbs2.com
:: Create the assembler program, by Herbert Kleebauer
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=> "%temp%.\sbs2.com"
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>> "%temp%.\sbs2.com"
echo ?@}IKuNWpe~Fpe?FNHlF?wGMECIQqo{Ox{T?kPv@jeoSeIlRFD@{AyEKj@>> "%temp%.\sbs2.com"
echo iqe~1NeAyR?mHAG~BGRgB{~H?o~TsdgCYqe?HR~upkpBG?~slJBCyA?@xA>> "%temp%.\sbs2.com"
echo LZp{xq`Cs?H[C_vHDyB?Hos@QslFA@wQ~~x}viH}`LYNBGyA?@xAB?sUq`>> "%temp%.\sbs2.com"
echo LRy@PwtCYQEuFK@A~BxPtDss@fFqjVmzD@qBEOEenU?`eHHeBCMs?FExep>> "%temp%.\sbs2.com"
echo LHsPBGyA?@xAunjzA}EKNs@CA?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>> "%temp%.\sbs2.com"
echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[xeHCPvqFj@oq@eNc?~}Nu??O>> "%temp%.\sbs2.com"
echo ~oEwoAjBKs?Zp`LBzHQzyEFrAWAG{EFrAqAGYwHTECIQ{coKIsaCsf{Oe~>> "%temp%.\sbs2.com"
echo CK}Ayre~CNFA{rAyEKFACrA{EKGAjbA}eKGSjNMtQFtc{OAyDGFj?{FDGQ>> "%temp%.\sbs2.com"
echo KAjNVk_OCAx@e?f{o?CosI}1EGizhljJ~H1ZeG}JBA~rACBMDGjjDG@g0>> "%temp%.\sbs2.com"
 

 
Добавлено:
v1rus

Цитата:
Нужно над одним из столбцов произвести ряд математических действий

Какие именно действия и с каким столбцом?

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:41 25-02-2009
maxi812

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите !
 
Нужен Батничек что бы при загрузке  или выключения без разнице  проверял определенные папки и удалял в них файлы  старше 1 недели. и выводил сообшения что  удалены.

Всего записей: 15 | Зарегистр. 25-02-2009 | Отправлено: 13:03 25-02-2009
Grisha_Tamashi_SAN



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую, Уважаемые РуБордовцы.
Тут состряпал батник удаляющий определенный файл в каталоге старее 30 мин текущей даты. Возможно ли его как-то упростить(оптимизировать)?

Код:
::Удаление файла созданного на 30 минут раньше
@echo off
setlocal
pushd e:\temp\
for %%a in (flag.txt) do if exist %%a call :run_ "%%a" "%%~ta"
popd
goto :EOF
:run_
set tm=%TIME%
set h=%TIME:~0,2%
set m=%TIME:~3,2%
set /a m=1%m%-100  
set /a "min=60*h+m"
set "fdate=%~2"
set "fdate=%fdate:~11,12%"
set fh=%fdate:~0,2%
set fm=%fdate:~3,2%
set /a fh=1%fh%-100
set /a fm=1%fm%-100  
set /a "fmin=60*fh+fm"
set /a "rz=%min%-%fmin%"
if %rz% GTR 30 del /q "%~1" else (
echo File %~1 not deleted.
)
 
 
И можно как-то добавить вывод еcho если файл удалён?

Всего записей: 44 | Зарегистр. 17-09-2002 | Отправлено: 16:38 25-02-2009
magistrfet



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

Всего записей: 719 | Зарегистр. 27-09-2001 | Отправлено: 18:48 25-02-2009
hunter19

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Привет всем. Можете помочь пожалуйста? Я до этого bat-ики не писал и попалась проблема, которую решить не могу.
 
Вот мой пример:
:hlds
START/HIGH /wait hlds.exe +sv_lan 1 -game cstrike +port 27018 -console -insecure -noipx +maxplayers 32 +map de_dust2 +rcon_password 123 +exec server.cfg
echo (%time%) WARNING: hlds closed or crashed, restarting.
goto hlds
 
Здесь если программа сама закрывается, то заново после этого запускается.
Но если сам закрываешь, то спрашивает: Завершить выполнение пакетного файла [Y(да)/N(нет)]
 
Но нужно сделать так, чтобы когда сам закрываешь программу, то при этом и консольное окно закрывалось.

Всего записей: 86 | Зарегистр. 28-02-2007 | Отправлено: 18:54 25-02-2009
SoldatShveik

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

Цитата:
    Как вариант создать копию файла с заменой двойных кавычек - одинарными. Для замены можно использовать sbs2.com  

 
Все супер! Одной проблемой стало меньше. Большое спасибо,
Цитата:
Maza_Faka
!
 

Цитата:
SED, GREP?

 
Блин, всю башку сломал, как эти GNU утилиты прикрутить для построчной замены в куче файлов. Если конкретное значение на конкретное менять - все ясно без вопросов.  
А если параметры поиска и замены точно не определены - они построчно берутся из двух одноименных файлов в разных папках: если для строки_1 файла_1 соблюдается некое условие (присутствует, скажем, текст неопределенной длины между двумя одинарными кавычками или иными заданными символами), то этот кусок строки_1 между символами меняем на кусок строки_1 из файла_2 (аналогичного по структуре, но с иными параметрами между заданными символами), и так далее для каждой строки в каждом файле.
Если вообще возможна подобная процедура поиска и замены, подскажите алгоритм решения.

Всего записей: 3 | Зарегистр. 19-02-2009 | Отправлено: 22:09 25-02-2009
v1rus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
Например над четвертым столбцом. Математических действий несколько, скажем *110, затем +100, затем /10 и *10 (так округлится, удобней мне будет).  возможно такое? я честно не соображу..
то что через set все эти математические действия можно произвести мне понятно, оно работает, но как это сделать для всего столбца, перебирая строку за строкой, я не знаю ((

Всего записей: 19 | Зарегистр. 16-12-2005 | Отправлено: 00:05 26-02-2009
Maza_Faka



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

Цитата:
что бы при загрузке  или выключения без разнице  проверял определенные папки и удалял в них файлы  старше 1 недели. и выводил сообшения что  удалены.

Помести батничек с нижеуказанным кодом в автозагрузку.

Код:
 
@Echo off
 
Forfiles /D -7 /P C:\Test /C "cmd /c if @isdir==FALSE del /f /q @path" | Find /I /V "error">Nul && Echo Files deleted!
 
Pause
 

 
Добавлено:
magistrfet

Цитата:
пример кода для инсталляции драйверов например для usb модема через .inf файлы

Попробуй так:

Код:
 
%SystemRoot%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 X:\vashINFFile\file.inf
 

 
Добавлено:
v1rus

Цитата:
Например над четвертым столбцом

Можно вывести в файл содержимое 4-го столбца и дальше разбирать его с помощью For /F ...

Код:
 
Sed "s/.* [ \t]*\(.*\)$/\1/g" < test.txt > out.txt
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:39 26-02-2009 | Исправлено: Maza_Faka, 07:43 26-02-2009
maxi812

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

Цитата:
Помести батничек с нижеуказанным кодом в автозагрузку.
 
Код:
 
@Echo off
 
Forfiles /D -7 /P C:\Test /C "cmd /c if @isdir==FALSE del /f /q @path" | Find /I /V "error">Nul && Echo Files deleted!
 
Pause  

 
фто то не работает  ((
 
 
Добавлено:
@Echo off
 
Forfiles /D -7 /P C:\Test /C "cmd /c del /f /q @path"
Echo Files deleted!
 
pause
 
 
работает  на сервере 2003 а на Xp нет почему ?

Всего записей: 15 | Зарегистр. 25-02-2009 | Отправлено: 11:59 26-02-2009
magistrfet



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
исправьте в шапке -  
 
Набор GNU утилит для win32  
http://gnuwin32.sourceforge.net/
 
старый комплект по ссылке в шапке не работает

Всего записей: 719 | Зарегистр. 27-09-2001 | Отправлено: 12:33 26-02-2009
Maza_Faka



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

Цитата:
работает  на сервере 2003 а на Xp нет почему ?

Возможно, потому, что в XP нет утилиты Forfiles?

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:43 26-02-2009
maxi812

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

Цитата:
Возможно, потому, что в XP нет утилиты Forfiles?

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

Всего записей: 15 | Зарегистр. 25-02-2009 | Отправлено: 17:04 26-02-2009
zzxx1488

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
magistrfet - скорее всего это временные проблемы, комплект очень популярный

Всего записей: 62 | Зарегистр. 04-10-2008 | Отправлено: 17:37 26-02-2009
vitrzn



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сможет кто помочь в написании батника?!!!
Нужно через батник зайти на FTP (логин/пароль - есть)
перейти в определённую папку (назв. папки постоянное, например--  v3000 ) и скачать всё что там есть. ( c:\ftp_temp\ )
При повторном скачивании файлов проверять их присутствии на локальном компе и если такой файл уже был скачен, то пропустить его скачивание.
 
p.s. можно кончено взять какой-нить FTP-клиент и им это сделать, но вся загвозка в том что это надо сделать без инсталяции каких либо программ (нет прав админа ;( ), да и батником как-то приятнее

Всего записей: 1358 | Зарегистр. 28-10-2007 | Отправлено: 00:45 27-02-2009 | Исправлено: vitrzn, 00:48 27-02-2009
v1rus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
вывести я могу.. а как с помощью for /F произвести над каждой строкой несколько действий и записать обратно в файл.. а потом ведь еще и обратно в тот файл из которого этот столбец взять нужно записать

Всего записей: 19 | Зарегистр. 16-12-2005 | Отправлено: 10:43 27-02-2009
Kilyan



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Требуется организация батника!
В разделе реестра HKLM\SOFTWARE\microsoft\windows\curentversion\uninstall\
существуют разделы для удаления программ, например такого вида {7f....db527}
в которых несется информация о продукте (publisher) и ключ для удаления (uninstallString)
Как найти необходимый продукт из массы {7f....db527} со строковым параметром  (publisher) и при нахождении вытянуть строковый параметр для удаления (uninstallString)
Очень нужно - ПОМОГИТЕ!

Всего записей: 884 | Зарегистр. 04-09-2008 | Отправлено: 11:53 27-02-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 102 103 104 105 106 107 108

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru