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

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LDAP
Ну если xcopy не возвращает 1 в случае с маской файлов то попробуй через dir. Если файлы  для копирования есть, то xcopy их скопирует, имхо, в любом случае если есть куда копировать.

Код:
 
@echo off
xcopy test\*.jpg test1\ /Y /R /H 1>nul 2>&1
dir /b test\*.jpg 1>nul 2>&1
if %errorlevel%==1 echo Error
if %errorlevel%==0 echo Good Job
 
или
dir /b test\*.jpg 1>nul 2>&1 && echo Good Job || echo Error
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:08 28-01-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
есть файл .ini , нужно чтобы при запуске бат файла он менял нужную мне строку на ту которой я хочу заменить.  
пример:
.ini
;Separators
2053=0,323,6,2,24
2054=0,499,6,2,24
2055=0,7,36,609,2
2056=0,185,42,2,77
2057=0,370,42,2,77
2058=0,418,54,2,24
2059=0,499,54,2,24
 
после запуска бат файла строка "2056=0,185,42,2,77" меняется на "0000=0,000,00,0,00"
 
получаем:
2053=0,323,6,2,24
2054=0,499,6,2,24
2055=0,7,36,609,2
0000=0,000,00,0,00
2057=0,370,42,2,77
2058=0,418,54,2,24
2059=0,499,54,2,24
 
главное никак зарание не редактировать файл .ini к примеру выделять нужную строку %% или !!

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 23:09 30-01-2008
01MDM



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

Код:
 
:: Первый - теряется коментарий (строка "; Settings")
@echo off
for /f %%i in (test.ini) do (
    if not "%%i"=="2056=0,185,42,2,77" (
        echo %%i 1>>test.tmp
    ) else (
        echo 0000=0,000,00,0,00 1>>test.tmp
    )
)
move test.tmp test.ini
 
:: Второй - утилита gsar.exe - ничего не теряется
gsar -s2056=0,185,42,2,77 -r0000=0,000,00,0,00 -o test.ini
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:43 31-01-2008
LDAP



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

Код:
 
for %%x in ("E:\TEMP_RA\IRBIS\DATAI\IBIS\*.cnt") do (
xcopy "%%x" C:\test\WebIRBIS3.3\irbis\ibis\ /Y /R /H
if ERRORLEVEL 1 (
Комманда копирования файла "%%x1" вернула код ошибки!!! >> log.txt
    ) else (
        Echo Файл  "%%x" скопирован успешно >>log.txt
    )
    set proverka=yes  
)
if not defined proverka Echo Скрипт копирования вернул код ошибки "Файлы для копирования не найдены" >> log.txt  
set proverka=
 

01MDM
Спасибо за помощь.

Всего записей: 522 | Зарегистр. 03-08-2005 | Отправлено: 11:37 31-01-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LDAP
Да, я видел код king_stiven'a. Но раз уж ты решил продублировать свой вопрос и в этой ветке, я и написал как альтернативу решения.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:14 31-01-2008
sscfree



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

Код:
 
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /r %%i in (*.exe) do (
    set dd=%%~ti
    set dd=!%dd:~0,2%!
    echo %%~ti
    echo %dd%
)
ENDLOCAL
 
Почему интересно, в dd не попадает никаких значений, а echo говорит, что оно отключено ?

Всего записей: 124 | Зарегистр. 27-08-2005 | Отправлено: 12:30 31-01-2008
01MDM



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

Код:
 
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
for /r %%i in (*.exe) do (
    set dd=%%~ti
    set dd=!dd:~0,2!
    echo %%~ti
    echo !dd!
)
ENDLOCAL
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:38 31-01-2008
sscfree



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
[/b]2 01MDM[/b]

Код:
SETLOCAL ENABLEDELAYEDEXPANSION

Вот же блиндр, а !!! Пошло, спасибооооооооооо!!!!!!
 
Добавлено:
А вот опять же, findstr не может находить unicode-строчки, да ?
Ну, или посоветуйте, другим чем-нить, найти "windows", перед каждой буквой стоит chr(0). Или как точно найти 00 77 00 69 00 6E 00 64 00 6F 00 77 00 73, желательно б, после найдения знать смещение в файле, по которому лежит искомое, чтоб потом уже вырезать строчку типа mid(начало,конец,сколько байт), а ?

Всего записей: 124 | Зарегистр. 27-08-2005 | Отправлено: 13:11 31-01-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM, спасибо!

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 20:27 31-01-2008 | Исправлено: XXXXL, 20:30 31-01-2008
tantra1985

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно, чтобы батник выводил в окне меню типа:
1 - сделать ...
2 - сделать ...
3 - сделать ... и т.д.
 
пользователь вводит нужную цифру и выполняется нужное действие.
 
Делал так:
 
 
set /p param=введите вариант действия :
if %param%==1: goto :metka1
if "%param%"==2: goto :metka2
 
но почему-то не прокатывает как нужно провести сравнение, чтобы заработало?
 
 
 

Всего записей: 1 | Зарегистр. 01-02-2008 | Отправлено: 04:50 01-02-2008
Elroir



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

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


Код:
 
echo off
echo 1 - сделать...
echo 2 - сделать...
echo 3 - сделать...
set /p "param=введите вариант действия : "
goto metka%param%
:metka1
...
goto :EOF
:metka2
...
goto :EOF
:metka3
...
 

 
 


----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 05:07 01-02-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
после запуска бат файла строка "2056=0,185,42,2,77" меняется на "0000=0,000,00,0,00"  
 
Возникла такая проблема, что у нужной строки есть окончание, которое неизвестно. известно только к примеру: 2056=0,185,42,2,77,199 а выделение красным неизвестно но оно может присутствовать.  
Если возможность добавить функцию измены строки даже в этом случае. окончание оставлять не нужно.
 
P.S Кто не понимает о чём речь, читайте выше.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 10:03 01-02-2008 | Исправлено: XXXXL, 10:04 01-02-2008
01MDM



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

Цитата:
2056=0,185,42,2,77,199

То есть ",199" может быть или не быть, а поменять надо только поля до него?
Если правильно понял, попробуй вариант

Код:
 
@echo off
setlocal
set "toChange=2056=0,185,42,2,77"
set "changeTo=0000=0,000,00,0,00"
for /f "tokens=1-6* delims==," %%1 in (test.ini) do (
        set "line=%%1=%%2,%%3,%%4,%%5,%%6"
        call:parse %%7
)
move test.tmp test.ini
goto:eof
 
:parse
if "%1"=="" (
    if not "%line%"=="%toChange%" (echo %line%>>test.tmp) else (echo %changeTo%>>test.tmp)
) else (
    if not "%line%"=="%toChange%" (echo %line%,%1>>test.tmp) else (echo %changeTo%,%1>>test.tmp)
)
 

 
Если не надо оставлять ",199" удали из  "echo %changeTo%,%1>>test.tmp" ",%1". Если все остальные строки одинаковые по структуре (0=1,2,3,4,5), то можно так

Код:
 
@echo off
setlocal
set "toChange=2056=0,185,42,2,77"
set "changeTo=0000=0,000,00,0,00"
for /f "tokens=1-6 delims==," %%1 in (test.ini) do (
        set "line=%%1=%%2,%%3,%%4,%%5,%%6"
        call:parse
)
move test.tmp test.ini
goto:eof
 
:parse
if not "%line%"=="%toChange%" (echo %line% 1>>test.tmp) else (echo %changeTo% 1>>test.tmp)
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:49 01-02-2008 | Исправлено: 01MDM, 12:06 01-02-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
Втарой вариант это то что нужно. только еть небольшое но. к примеру если сделать  
set "toChange=12345"
set "changeTo=54321"  
то получем  54321=,,,, а не 12345
 
мне нужно чтобы была возможность беспрепятственно изменять формат. В основном этот батник нужен ля измены путей в .ини  
 
к примеру есть строка:

Код:
item2_actparam=""C:\Program Files\topsite\site.exe"|0|1"

 
мы знаем что есть функция

Код:
item2_actparam=""

А что к функции уже что-то запланировано мы не знаем. это может быть:

Код:
item2_actparam=""C:\Program Files\1111\1111.exe"|0|1"
item2_actparam=""Z:\Program Files\yyyy\yyyy.exe"|0|1"
А может и быть пустая, просто:
item2_actparam=""
 
Но нам нужно полубому получить чтобы эта строка поменялась на
item2_actparam=""D:\Program Files\123\123.exe"|1|1"
 
Добавлено:

Цитата:
01MDM

Втарой вариант это то что нужно. только еть небольшое но. к примеру если сделать set "toChange=12345"
set "changeTo=54321"  
то получем  54321=,,,, а не 12345
 
мне нужно чтобы была возможность беспрепятственно изменять формат. В основном этот батник нужен ля измены путей в .ини  
 
к примеру есть строка:

Код:
item2_actparam=""C:\Program Files\topsite\site.exe"|0|1"

 
мы знаем что есть функция

Код:
item2_actparam=""

А что к функции уже что-то запланировано мы не знаем. это может быть:

Код:
item2_actparam=""C:\Program Files\1111\1111.exe"|0|1"
item2_actparam=""Z:\Program Files\yyyy\yyyy.exe"|0|1"

А может и быть пустая, просто:

Код:
item2_actparam=""

 
Но нам нужно полубому получить чтобы эта строка поменялась на

Код:
item2_actparam=""D:\Program Files\123\123.exe"|1|1"

 

Цитата:
Извини если слишком напрягаю

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

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 13:04 01-02-2008 | Исправлено: XXXXL, 14:55 01-02-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
Мой совет, лучше используй gsar.exe (в шапке есть ссылка "Набор GNU-утилит"). Он корректно обрабатывает строки, как целиком, так и их части. С помощью батника достаточно сложно все предусмотреть, да и не предназначен он для парсинга текста. Ошибки могут "выплыть" в самых, казалось-бы, "надежных" местах.

Код:
 
@echo off
setlocal
 
set "toChange=12345"
set "changeTo=54321"
 
gsar -s%toChange% -r%changeTo% -o test.ini
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:58 01-02-2008
XXXXL



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

Цитата:
You don't have permission to access /UnxUtils.zip on this server.
 
 
там не получается скачать.  
если есть у кого, залейте пожалуйста.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 15:57 01-02-2008 | Исправлено: XXXXL, 15:58 01-02-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
http://home.online.no/~tjaberg/gsar111.zip  
Вот первая попавшаяся рабочая ссылка, гугль рулит
 
Или весь комплект http://sourceforge.net/project/showfiles.php?group_id=9328

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:39 01-02-2008 | Исправлено: 01MDM, 16:52 01-02-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Всё равно не получается реализовать ту функцию что я выше описывал.
set "toChange=12345"  
set "changeTo=54321"  
тут меняет конкретно 12345 на 54321, для этого уже достаточно того что ты уже сделал в начале.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 16:57 01-02-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
Да чот с gsar'ом у меня тоже не получается
Еще вариант. Ищет нужный параметр, и если находит, перезаписывает всю строку

Код:
 
@echo off
setlocal
 
set toChange=item2_actparam=
set changeTo=item2_actparam=""D:\Program Files\123\123.exe"|1|1"  
 
for /f "tokens=*" %%i in (test.ini) do (
    echo %%i | findstr %toChange% 1>nul && (
        echo %changeTo%>>test.tmp
    ) || (
        echo %%i>>test.tmp
    )
)
move test.tmp test.ini
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:51 01-02-2008 | Исправлено: 01MDM, 20:17 01-02-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM, громное спасибо! это как раз подошло то что и нужно было!
Спасибо за внимание!

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 21:15 01-02-2008
   

Страницы: 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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru