Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 2

Автор: Tipulatoid
Дата сообщения: 22.12.2006 10:38
Прошу помощи.

Есть текстовый файл teams.txt В нем 6 строк:

Krasnoyarsk
Novosibirsk
Orenburg
Kostroma
Tomsk
Moskva

Нужно получить шесть архивов формата у_Название_города.zip, где у - номер архива

пишу для 1-го города

set /p team_1= < teams.txt
zip 1_%team_1% *.dal

Получается архив 1_Krasnoyarsk.zip В нем запакованы все файлы *.dal из текущей папки. Т.е. все в порядке.

для 2-го города:
set /p team_2= < teams.txt, 2 (по моему разумению, параметр "2" в конце команды должен указывать, что значение переменной следует брать из 2-ой строки текстового файла :-)
zip 2_%team_2% *.dau

Не получается. Значение переменной "team_2" по-прежнему берется из 1-ой строки текстового файла. Т.е. получается архив 2_Krasnoyarsk.zip , а должен быть 2_Novosibirsk.zip

В связи с этим вопрос: как явно указать, чтобы значение переменной бралось из 2-ой, 3-ей или какой другой строки текстового файла?

Спасибо.
Автор: KapralBel
Дата сообщения: 22.12.2006 10:49
Tipulatoid

Код: @Echo Off
For /F "tokens=1-3 delims=;" %%a In (Teams.txt) Do ZIP %%a_%%b_%%a *.%%c
Автор: Tipulatoid
Дата сообщения: 22.12.2006 10:57
to KapralBel: Однако, оперативный ответ получил. Спасибо огромное.
Автор: JohnRD
Дата сообщения: 22.12.2006 11:22
Jon_Dow
спасибо большое за это

Код: FOR /f "usebackq tokens=1,2* skip=4 eol=;" %%a IN (`reg query "HKLM\SYSTEM\ControlSet001\Services\cpdrvlib\license" /v PIDKEY`) DO IF "%%a"=="PIDKEY" SET MY_PIDKEY=%%c
Автор: Elroir
Дата сообщения: 22.12.2006 13:25
ra1n
1-5 :

Код: reg.exe load HKU\DefUser "C:\Documents and Settings\Default User\NTUSER.DAT"
Автор: JohnRD
Дата сообщения: 22.12.2006 14:56
очередной вопрос
есть фал 1.ini

Код: [1 Options]

BDEAlias=UESR_ASDUD
SQLType=DOAOracle

SecuritySystem=1
WorkflowSystem=-
ExchangeSystem=-
ExchangeFile=-
iKeyLogOn=-
wbcontainer=iKey
wbprefix=vcert
iKey=+
DeviceKeyDll=IKeyOld.dll
HandleMsgParam=+
SpellCheckerMode=0
Автор: KapralBel
Дата сообщения: 22.12.2006 15:36
JohnRD
Счас нет времени написать такой батничек
Попытайся модифицировать тот который я дал на этой странице Tipulatoid
Только
1. измени delims=; на delims== - будешь получать в %%a - ключ, в %%b - значение
2. Проверяй ключ IF
3. заменяй нужные параметры
4. сбрасывай в файл 2.ini
5. Замени 1.ini на 2.ini
Автор: Maza Faka
Дата сообщения: 22.12.2006 17:52
как запретить повторный запуск приложения при помощи bat файла?
Автор: igor_andreev
Дата сообщения: 22.12.2006 18:43
JohnRD

Цитата:
неоходимо заменить
iKeyLogOn=- на iKeyLogOn=+
wbprefix=vcert на wbprefix=native
iKey=+ удалить

В одну строчку

Код:
type 1.ini|gsar -s"iKeyLogOn=-" -r"iKeyLogOn=+" -F|gsar -s"wbprefix=vcert" -r"wbprefix=native" -F|gsar -s"iKey=+" -r -F >2.ini
Автор: Elroir
Дата сообщения: 22.12.2006 19:18
Maza Faka

Цитата:
как запретить повторный запуск приложения при помощи bat файла?

Смотрим, как называется приложение в диспетчере задач->процессы - например process.exe, тогда:

Код:
@echo off
tasklist | find /i "process.exe">nul
if %errorlevel%==1 process.exe
Автор: JohnRD
Дата сообщения: 23.12.2006 09:44
KapralBel igor_andreev
спасибо за помощь. уже начинаю понимать кое что, особенно после helpa

задача усложняется
есть тот же фал 1.ini

Код: Код:[1 Options]

BDEAlias=UESR_ASDUD
SQLType=DOAOracle

SecuritySystem=1
WorkflowSystem=-
ExchangeSystem=-
ExchangeFile=-
iKeyLogOn=-
wbcontainer=iKey
wbprefix=vcert
iKey=+
DeviceKeyDll=IKeyOld.dll
HandleMsgParam=+
SpellCheckerMode=0
....................
Автор: Desenix
Дата сообщения: 23.12.2006 12:34
JohnRD
для этого есть goto
ставишь условие и после его выполнения делаешь переход.
Автор: igor_andreev
Дата сообщения: 23.12.2006 15:12
JohnRD

Цитата:
ivanov_ab;ivanov a.b._L
petov_ac;petrov a.c.-L
sidorov_ad;sidorov a.d._L

Ну так в чем дело?
FOR /F "TOKENS=2 DELIMS=;" %%A IN ('MORE 2.csv') DO ECHO %%A
Отдавай это %%A каждый раз gsar.exe и все

Цитата:
есть ли такое чтобы например после 10 строк далее не читать...? (если файл большой., а настройки в начале файла)

http://www.commandline.co.uk/lib/treeview/index.php Ткни там в Batch Howto's и в Reading Files, там есть пример "Displaying the first X lines". Это если только средствами cmd-файлов надо решить. Но так не очень корректно, батник пустые строки не считает. Удобней пользоваться head.exe(в шапке "Набор GNU утилит для win32" )


Автор: Nagual
Дата сообщения: 23.12.2006 16:21
Такая задачка:

нужно скопировать n файлов пресловутой командой copy в одну строку с использованием системных переменных

рабочий пример:

Код: @echo off
set xx="%programfiles%\xx Software\XXX\
set co=copy /y
%co%%xx%file_1" DIR1
%co%%xx%file_2" DIR1
%co%%xx%file_n" DIR1
set xx=
set co=
Автор: igor_andreev
Дата сообщения: 23.12.2006 16:48
Nagual

Цитата:
file_1 file_2 file_n

А у твоих файлов что, цифра в названии есть? Тогда FOR /L тебе нужен
Автор: Nagual
Дата сообщения: 23.12.2006 17:13
Нет, цифр нет просто список, это я для наглядности так написал
Автор: JohnRD
Дата сообщения: 25.12.2006 17:09
igor_andreev
спасибо
не могли бы Вы прокоментировать

Цитата:
ivanov_ab;ivanov a.b._L
petov_ac;petrov a.c.-L
sidorov_ad;sidorov a.d._L



Код: FOR /F "TOKENS=2 DELIMS=;" %%A IN ('MORE 2.csv') DO ECHO %%A
Автор: king_stiven
Дата сообщения: 26.12.2006 12:54
Почему то из бата неро пишет только папку без подпапок. Если кто знает, подскажите. Пример:
"C:\Program Files\nerocmd.exe" --no_user_interaction --write --real --iso hive --drivename F: --force_erase_cdrw "C:\temp\5\*.*"
Автор: JohnRD
Дата сообщения: 26.12.2006 13:14
подскажите как прочитать в файле
1.mif

Код: Start Component
Name = "Software License Key" Start Group
Name = "Wide World Asset Numbers" ID = 1
Class = "wideWorldAssetNumbers" Key = 1
Start Attribute
Name = "Computer License Number" ID = 1
Type = String(30)
Value = "000000000000000000000000" End Attribute
End Group
End Component
Автор: Elroir
Дата сообщения: 26.12.2006 14:02
JohnRD

Цитата:
так читаем
"000000000000000000000000" End Attribute
а нужно только 000000000000000000000000

В for-е поставь пробел после второго знака "равно":

Код: for /f "tokens=2 delims== " %%a ...
Автор: tolyn77
Дата сообщения: 26.12.2006 14:08
подскажите как мне в сети на всех компютерах узнать что принято в %temp% %tmp%?
заранее благодарен
Автор: Jon_Dow
Дата сообщения: 26.12.2006 14:15
JohnRD
Так - для начала выполните пожалуйста и изучите результаты:
Код: FOR /F "usebackq tokens=1 eol= skip=1 delims= " %%a IN (`help^|findstr /B /V /C:" "`) DO help %%a >>%%a.txt
Автор: JohnRD
Дата сообщения: 26.12.2006 15:32
Elroir и Jon_Dow Вам очередная благодарность
особенно за это

Код: FOR /F "usebackq tokens=1 eol= skip=1 delims= " %%a IN (`help^|findstr /B /V /C:" "`) DO help %%a >>%%a.txt
Автор: Elroir
Дата сообщения: 26.12.2006 17:04
Jon_Dow

Цитата:
кстати эта конструкция работает для произвольных переменных окружения ТОЛЬКО в цикле FOR...

Модификатор "~" работает с переменными вида %i, то есть переменными for-а и аргументами командной строки.

Цитата:
А set line=%line:"=% сработает в любом месте...

Согласен - сработает
Но... удалит все кавычки в строке, а не только по краям.
P.S В данном случае, это, конечно же , не принципиально
Автор: Jon_Dow
Дата сообщения: 26.12.2006 20:32
Насчет аргументов коммандной строки не подумал даже... Спасибо за инфу! Приму к сведению...
И вообще спасибо огромное всем участникам данного топика - куча ценной информации!

Sorry за
Автор: king_stiven
Дата сообщения: 26.12.2006 23:27
Сам нашёл, надо использовать ключ --recursive .
Автор: Sceval
Дата сообщения: 27.12.2006 08:53
Подсабите написать батник - который бы проверял если такая прога, если ее нет то переписывал бы с сервера, а если есть то не чего не делал
Автор: xcherep
Дата сообщения: 27.12.2006 09:12
Всем привет
Кто поможет написать bat файл форматирования дискеты
Автор: JohnRD
Дата сообщения: 27.12.2006 09:23
Уважаемые гуру

можно ли завести системную переменную %username% в пакетный файл

что нить типа ...

Код: set login=%username%
for /f "usebackq tokens=1,2 delims=;" %%a in (2.csv) do if %%a==login set key=%%b
Автор: king_stiven
Дата сообщения: 27.12.2006 10:13

Цитата:
xcherep


это пример из справки по cmd
Использование if для выдачи сообщения при возникновении ошибки

В приведенном ниже примере, если при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение:


:begin
@echo off
format a: /s
if not errorlevel 1 goto end
echo Ошибка во время форматирования диска.
:end
echo Конец пакетной программы.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Сбой активации XP sp2


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.