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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
 
 
Старая версия первого сообщения

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



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 проблемы в скрипте...
1) В List.txt несколько записей, однако цикл выполняется всего один раз.
2) В конце скрипта вместо In ("%test1%") не могу использовать %%c, она "пустая", приходится test1 создавать
 
Добавлено:
KapralBel
Спасибо!
vserd
Смысл понял!

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 13:49 27-07-2007 | Исправлено: Yuki2003, 13:52 27-07-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yuki2003
Сходу.
Скобки!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Скрипт вы полняется до ближайшей закрывающей скобки.
 
Что ты хочешь сделать?

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 13:57 27-07-2007 | Исправлено: vserd, 14:00 27-07-2007
Yuki2003



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd
Вложенные циклы нельзя?
 
Добавлено:

Цитата:
выполняется до ближайшей закрывающей скобки

Вроде нет, Echo, которое после ближайшей закрывающей скобки - "срабатывает"
 
Добавлено:

Цитата:
Что ты хочешь сделать?

В List.txt список путей. Хочу в цикле (перебор строк) получать 2 переменных - сам путь и имя последнего в этом пути каталога (и делать бэкап). Приведенный пример получает имя последнего каталога.

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 14:06 27-07-2007 | Исправлено: Yuki2003, 14:10 27-07-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На счет скобок, я похоже прогнал, но что-то сними не так, наступал на грабли, и было больно :(
 
Set test=%%e ?????????????????????????????????????????????????????????
это чего такое

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 14:15 27-07-2007
Yuki2003



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

Цитата:
это чего такое

Присвоение "правого остатка" от %%d в переменную test (вычисление имени самого "правого" каталога в цикле.
Это все как раз работает без проблем.

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 14:21 27-07-2007 | Исправлено: Yuki2003, 14:34 27-07-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yuki2003
Вообще, что ты хочешь сделать

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:46 27-07-2007
Yuki2003



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
В List.txt список путей.
Хочу в цикле (перебор строк) получать 2 переменных - сам путь (то есть просто строку целиком) и имя последнего в этом пути каталога и делать бэкап:
1-я переменная - что бэкапить,
2-я - имя архива.
И то и другое - не проблема, работает, но... не в цикле, а всего 1 раз.
Цикл прерывается.
Пример "облегчен", в нем только 2-я переменная "вычисляется".

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 14:54 27-07-2007
vserd

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

Цитата:
это чего такое  
 
Присвоение "правого остатка" от %%d в переменную test  

Хм. Мои глаза указывают что это присвоение переменной test значение некоторой переменной %%e но не %%d
А следующим идет проверка на не пустое значение test. Так как условие не выполняется, то %count% = 1  

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 15:09 27-07-2007
Yuki2003



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

Цитата:
%%e но не %%d

%%e - автоматически создается, это работает

Цитата:
условие не выполняется, то %count% = 1

условие выполняется, сделайте echo - count в цикле (GoTo again) будет равен от 1 до кол-ва разделенных слэшами слов в строке файла List.txt
 
Добавлено:
vserd
Не работает другой цикл, перебор строк в файле List.txt ограничивается первой строкой.

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 15:24 27-07-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yuki2003
Ты приведи не облегченный вариант а полный и лист.тхт

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:16 27-07-2007
Yuki2003



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

Цитата:
C:\Files\Mail\*
\\SERVER\Folder\*
\\SERVER\Another Folder\*

Test.bat:

Код:
@Echo Off
setlocal ENABLEDELAYEDEXPANSION
For /f "eol=; delims=" %%c In ( List.txt ) Do (                         ; читаем строки из List.txt
Set test=%%c
Set test1=%%c
Set count=0
:again
For /f "delims=\* tokens=1*" %%d In ("!test!") Do (                ; вычисляем "глубину" папки (в примере у всех - 2)
Set /a count=!count!+1
Echo %count%
Set test=%%e
)
If Not "!test!"=="" GoTo again
For /f "delims=\ tokens=%count%" %%f In ("%test1%") Do Set test1=%%f    ; обрезаем до имени последней в пути папки
Echo !test1!
)

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 17:00 27-07-2007 | Исправлено: Yuki2003, 17:14 27-07-2007
KapralBel



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

Код:
@Echo Off
setlocal ENABLEDELAYEDEXPANSION
For /f "eol=; delims=/" %%c In ( List.txt ) Do (
Set test=%%c
Set test1=%%c
Set count=0
:again
For /f "delims=/* tokens=1*" %%d In ("!test!") Do (
Set /a count=!count!+1
Echo %count%
Set test=%%e
)
If Not "!test!"=="" GoTo again
For /f "delims=/ tokens=%count%" %%f In ("%test1%") Do Set test1=%%f
Echo !test1!
)

 
Так?
или я не правильно понял задачу?
 
Если не так - то  по каждой строке объясни что ты хочешь получить?

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:06 27-07-2007 | Исправлено: KapralBel, 17:08 27-07-2007
Yuki2003



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Замена обратных слэшей на прямые?? Гм, внешний цикл заработал, внутренний перестал...

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 17:10 27-07-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yuki2003
Ладно, пойдем другим путем
 
Вот 3 строки
C:\Files\Mail\*
\\SERVER\Folder\*
\\SERVER\Another Folder\*
 
Что из каждой надо получить?

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



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

Цитата:
C:\Files\Mail\*  
\\SERVER\Folder\*  
\\SERVER\Another Folder\*

Mail
Folder
Another Folder
 
независимо от кол-ва слэшей!
 
Добавлено:
Вобщем с delims в примере все нормально. В чем-то другом прикол.

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 17:15 27-07-2007 | Исправлено: Yuki2003, 17:16 27-07-2007
vserd

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

Код:
 
@Echo Off
setlocal ENABLEDELAYEDEXPANSION
For /f "delims=" %%c In ( List.txt ) Do (
::Set test=%%c
Set test1=%%c
Set count=0
Call :GetCount "%%c"
Echo test1=!test1!
)
 
Goto :eof
 
:getCount
Set test=%~1
 
:again
For /f "delims=\* tokens=1*" %%d In ("!test!") Do (
Set /a count=!count!+1
Set test=%%e
)
If Not "!test!"=="" GoTo again
 
For /f "delims=\ tokens=%count%" %%f In ("%test1%") Do Set test1=%%f
 
goto :eof
 

результат
test1=Mail
test1=Folder
test1=Another Folder
 
 
Добавлено:
В чем прикол не понял, если внутри цикла вызывать, срабатывает один раз, если через процедуру, то как нужно, но мое мнение что в скобках....

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 18:34 27-07-2007
Yuki2003



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

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 19:11 27-07-2007
Maza Faka



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

Код:
 
@echo off
setlocal enabledelayedexpansion
set count=2
 
:begin
for /f "skip=%count% delims=" %%a in ('find /v "" list.txt') do (
set str=%%a
 
:subrout
for /f "tokens=1* delims=\*" %%b in ("!str!") do (
set str=%%c
if defined str (
 goto :subrout) else (
  echo %%b>> out.txt
   set /a count+=1
    goto :begin
)
 )
  )
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:42 28-07-2007
utka00



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

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



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
utka00
1. Не та тема
2. Скорее всего невозможно
3. Надо смотреть конкретную программу

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:07 28-07-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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru