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

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

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

Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 109 110 111 112 113 114 115 116 117 118

   

KLASS



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

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

Всего записей: 9706 | Зарегистр. 12-10-2001 | Отправлено: 04:28 24-09-2002 | Исправлено: Elroir, 19:35 11-09-2007
Rotorina



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

Код:
@echo off    
for %%a in (*.txt) do call :gs "%%a"  
goto :eof    
   
:gs  
gsar -sC&&numwant==200 -rC&&event==stopped&&numwant==200 "%~1" "%~n1_00%~x1" >nul    
goto :eof    
 

 
Ответ:
gsar: command error, no input file name specified
gsar: command error, no input file name specified
 
Файлы, примерно, следующего вида:
refreshx_y.txt
refreshx.txt
x=1...10k
y=1...50
Вместо (*.txt) пробовал (*.*).
Без толку

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 01:11 26-08-2007 | Исправлено: Rotorina, 01:16 26-08-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rotorina
Тут дело не в именах файлов, а в симвоиле "&". Это спец. символ, который используется для разделения команд в командной строке.
Чтобы использовать его в строке поиска или замены, вместо него надо вставить его ASCII код после двоеточия, в данном случае ":038". То есть строчка с gsar-ом будет выглядеть так:

Код:
gsar -sC:038:038numwant==200 -rC:038:038event==stopped:038:038numwant==200 "%~1" "%~n1_00%~x1"
 

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:21 26-08-2007
Rotorina



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

В который раз меня выручаешь!
 
Если я ещё не сильно замучал, подскажи, пожалуйста, как в моём коде организовать перезапись файлика?

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 01:40 26-08-2007 | Исправлено: Rotorina, 01:45 26-08-2007
Elroir



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

Цитата:
как в моём коде организовать перезапись файлика?

Не совсем понял вопрос. Какого файлика?

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:48 26-08-2007
Rotorina



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выше в посте о файликах я писал.
Дело в том, что при замене последовательности символов на другую (код описан пару постов выше), батник начинает сохранять файлы в следующем виде: ....._00.txt
После того как все обрабтает, продолжает обрабатывать ....._00.txt  и создаёт ....._00_00.txt и т.д.
 
И вообще, у меня с именами файлов напряги получились...  

refresh_x_y.txt
refresh_x.txt  
refreshx_у.txt  
refreshx.txt
x=1...10k  
y=1...50  - Ну это разве нормально? (

Но можно лишнии удалить и вернуться к начальному виду (до замены и использования батничка):
refresh_x.txt
refreshx.txt          х=1...10к
 
Хотелось бы при использовании батничка не только зименять ту комбинацию символов но и переименовывать файлики следующим образом:
 
refresh_x.txt   >    divertedx.txt
refreshx.txt     >    retractedx.txt     <--- (пример)
diverted и retracted вместо y.
 

Код:
 
@echo off      
for %%a in (*.txt) do call :gs "%%a"    
goto :eof      
   
:gs    
gsar -s -r[pust] "%~1" "%~n1_00%~x1" >nul      
goto :eof    
 

 
"%~n1_00%~x1" - это как я понимаю, файлик на выходе.
Заменять в имени файла нужно будет refresh, могу вручную менять, всего 50 раз получится.
 
Подскажие. как в моём случае можно при gsar-е переименовывать файлы?
 
P.S.: Простите за столь длинное сообщение, смысл которого можно было впихнуть в 4-5 строчек. (моск уже давно спит, а тело колупает долбанные файлы)  

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 02:12 26-08-2007 | Исправлено: Rotorina, 03:54 26-08-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rotorina
Я уже запутался .
Вернемся к началу. У нас есть много файлов с именами refresh[номер].txt и refresh_[номер].txt. То есть начало названия у всех файлов одинаковое (refresh)? Теперь - с помощью gsar-a заменяем строчки внутри файлов и пишем на выходе в файлы diverted[номер].txt, если на входе был файл с символом подчеркивания и retracted[номер].txt, если на входе файл без этого символа. Так?    

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:48 26-08-2007
Rotorina



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
Всё именно так ))
Суть в том, чтобы можно было не только поменять файлик внутри, но и сменить его имя с xxxxx[number].txt на yyyyyy[number].txt.
Если колупаться глубже, то на самом деле есть не только refresh[n], refresh_[n], но и  stop[n], start[n], etc, но это уже всё индивидульно.
Так же хотелось бы реализовать обработку файлов не все *.txt, а по заданному ключевому слову в имени.
 
Добавлено:
Нашёл замечательную утилитку nc.exe.
Неудобством nc.exe является ожидание ответа от хоста, который мне не нужен.
Кто подскажет, какая утилита может заменить nc.exe (NetCat, бывает говорят) для отправки пакетов?
Или как из командной строки ускорить работу данной утилитки?
Возможно ли сочетание команды nc.exe и break? - Как только nc отправляет пакетик из файлика, break тут же прерывает его, пакет как бы отправлен уже, а команда полностью не выполнена, т.к. нет ответа )  
Ваши идеи?

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 01:06 27-08-2007 | Исправлено: Rotorina, 03:02 27-08-2007
Elroir



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

Код:
 
@echo off
setlocal enabledelayedexpansion
:: the "wlength" variable determines the number of letters in the prefix
:: for prefix "refresh" it is 7
set "wlength=7"
set /a "index=wlength+1"
:: you can change the files to be processed by editing the file mask in the brackets
for %%a in (refresh*.txt) do call :gs "%%a"
ren *.tx_ *.txt
goto :EOF      
     
:gs
set "fname=%~n1"
if "!fname:~%wlength%,1!"=="_" (
gsar -sSTRING1 -rSTRING2 "%~1" "diverted!fname:~%index%!.tx_" >nul
) else (
gsar -sSTRING1 -rSTRING2 "%~1" "retracted!fname:~%wlength%!.tx_" >nul
)
 

Выделенная пременная "wlength" должна содержать количество букв в названии файла до символа подчеркивания. То есть если обрабатываемые файлы имеют названия "refresh[n].txt и refresh_[n].txt - это будет число 7.
Выделенная маска файлов в скобках оператора for отвечает за выбор обрабатываемых файлов. Соответственно надо менять эту маску, если надо обрабатывать файлы с другими названиями. При этом надо будет поменять число в переменной "wlength".  
 
Добавлено:
Насчет NetCat ничего посоветовать не могу.

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:00 27-08-2007
Rotorina



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
днём попробую, сразу же отпишусь СЕНКС

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 03:09 27-08-2007 | Исправлено: Rotorina, 03:19 27-08-2007
Rotorina



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

Код:
 
gsar -sSTRING1 -rSTRING2 "%~1" "diverted!fname:~%index%!.tx_" >nul  
) else (  
gsar -sSTRING1 -rSTRING2 "%~1" "retracted!fname:~%wlength%!.tx_" >nul  
)  
 

А если таких имён 20-50... Притом каждый раз названия разные... и мне их прислать могут в любой момент.
Имелось ввиду для единичного случаю.
Правильно ли я правил код:

Код:
 
echo off  
setlocal enabledelayedexpansion  
set "wlength=7"  
set /a "index=wlength+1"  
for %%a in (refresh*.txt) do call :gs "%%a"  
ren *.txt  
goto :EOF        
     
:gs  
set "fname=%~n1"  
if "!fname:~%wlength%,1!"=="_" (  
gsar -sSTRING1 -rSTRING2 "%~1" "diverted!fname:~%index%!.tx_" >nul  
) else (  
break
)  
goto :eof  
 
 

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 12:49 27-08-2007 | Исправлено: Rotorina, 12:51 27-08-2007
Elroir



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

Цитата:
Правильно ли я правил код

Неправильно . Надо так:

Код:
 
echo off
setlocal enabledelayedexpansion  
set "wlength=7"
set /a "index=wlength+1"
for %%a in (refresh*.txt) do call :gs "%%a"
goto :EOF        
       
:gs  
set "fname=%~n1"  
if "!fname:~%wlength%,1!"=="_" (  
gsar -sSTRING1 -rSTRING2 "%~1" "diverted!fname:~%index%!.txt" >nul  
)  
goto :eof  
 

А насчет разных имен - я до сих пор до конца не понимаю. Входные файлы могут быть с разными именами - это понятно. Непонятно другое - ты привел пример stop[n], start[n] и т.д. Вопрос - что со знаком подчеркивания в этих названиях? Также как и с refresh - может быть, а может не быть? В зависимости от этого надо менять имя файла на выходе? Имена на выходе могут быть только diverted[n] и retracted[n]?

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:13 27-08-2007
Rotorina



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
Знак подчёркивания никакого эффекта не даёт, это всего лишь такое имя файла, входные файлы могут в хвосте также иметь разные символы, поэтому что refresh[n].txt, что refresh_[n].txt или refresh2007-08-27[n].txt имеют один и тотже смысл.
P.S.: сорри, что сразу так не объяснил.
Имена на выходе задаваемые. diverted[n].txt и retracted[n].txt могут быть аж никак не diverted[n] и retracted[n], а к примеру 12345[n].txt
 
Я хотел бы, чтоб в батнике была возможность прописывать руками имя входного файла aaaaa и задавать его на выходе как bbbbb. Таким образом после gsar-а бывший файлик aaaaa1.txt стал bbbbb1.txt, а файлик aaaaa19840.txt становился bbbbb19840.txt
 
P.S.: aaaaa и bbbbb могут меняться в зависимости от требований. )
Elroir, вы думаете слишком сложно... я ведь начинающий ещё, все идеи простенькие
 
Добавлено:
Да что ж я делаю не так
вот код:

Код:
 
echo off  
setlocal enabledelayedexpansion    
set "wlength=7"  
set /a "index=wlength+1"  
for %%a in (refresh*.txt) do call :gs "%%a"  
goto :EOF          
       
:gs    
set "fname=%~n1"    
if "!fname:~%wlength%,1!"=="_" (    
gsar -s%%c9D%%1b%%16%% -r1111111111 "%~1" "diverted!fname:~%index%!.txt" >nul    
)  
goto :eof    
 

 
вот файл refresh51.txt, с содержимым:

Цитата:
 
...f6e46e758f1ff3a2e3e4ead47f2cefa8&_hash=%c9D%1b%16%16%c5%1d%af%3b2%bcgTBX%f1%2a%24T%bf&peer_id=-%da%81p%13%ee%a5%07O%a4%e5%b7%8c&port=8888...
 

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 14:18 27-08-2007 | Исправлено: Rotorina, 14:29 27-08-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rotorina
Вот теперь понятно
Тогда так:

Код:
 
echo off
setlocal enabledelayedexpansion
set "input=aaaaa"
set "output=bbbbbb"
set "wlength=5"
for %%a in (%input%*.txt) do call :gs "%%a"
goto :EOF          
       
:gs
set "fname=%~n1"
gsar -sSTRING1 -rSTRING2 "%~1" "%output%!fname:~%wlength%!.txt" >nul
goto :eof    
 

 
Добавлено:

Цитата:
Да что ж я делаю не так  

Запускай с последним кодом.

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:29 27-08-2007 | Исправлено: Elroir, 14:32 27-08-2007
Rotorina



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir  
Большое-больше СПАСИБО и УВАЖЕНИЕ!
Сбылось!!!!
Ещё раз спасибо!

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 14:40 27-08-2007
utka00



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня есть много интернет тарифов, как мне сделать батник чтоб там было чтото типа меню какой тариф подключить, причем у меня все идет через одно подключение (rasdial inet логин пароль)?

Всего записей: 95 | Зарегистр. 01-05-2007 | Отправлено: 12:12 28-08-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
utka00
А как тогда тариф выбирается?

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:17 28-08-2007
utka00



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

Всего записей: 95 | Зарегистр. 01-05-2007 | Отправлено: 14:11 28-08-2007
Elroir



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

Код:
 
@echo off
setlocal
echo 1. aaaa
echo 2. bbbb
echo 3. cccc
set /p "choice=Enter your choice: "
if "%choice%"=="1" rasdial inet loginA passwordA
if "%choice%"=="2" rasdial inet loginB passwordB
if "%choice%"=="3" rasdial inet loginC passwordC
 



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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:31 28-08-2007
Rotorina



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а если VPN ?
Не отображается русский?
 
Запускаю батник REFRESH из батника 1, но он не выполняется по той причине, что пытается обработать файлы, которые находятся в том же каталоге где и 1.bat, а они реально находятся с батничком REFRESH.bat. Да и открывает новое окно cmd.

Код:
 
if "%choice%"=="1" (
start D:\Install\Start\REFRESH.bat
)
 

 
Добавлено:
Нашёл ответ.
Нужно было указать путь:

Код:
 
D:
cd D:\\Install\Start\
start /b D:\Install\0day\start\REFRESH.bat
 

 
Вопрос о VPN и русской кодировки ещё актуален.

Всего записей: 109 | Зарегистр. 03-08-2007 | Отправлено: 17:29 28-08-2007 | Исправлено: Rotorina, 19:23 28-08-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rotorina
А что VPN? Если я не ошибаюсь, VPN тоже подключается через rasdial.
А насчет русского - в начале батника надо прописать "chcp 1251>nul"

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:02 28-08-2007
   

Страницы: 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 109 110 111 112 113 114 115 116 117 118

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru