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

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

Автор: Maza_Faka
Дата сообщения: 03.06.2009 08:46
jonnydram
Смотрите описание команды Net User /?
Автор: ipmanyak
Дата сообщения: 03.06.2009 09:45
Smart_Chameleon Попробуй команду forfiles, в XP ее нет, но ее можно взять из W2K3
forfiles /?
Пример удаления файлов в каталоге и подкаталогах, не удаляя сами подкаталоги :
forfiles /P "D:\TEMP" /M *.* /S /C "cmd /c del /Q /F @PATH"
Автор: vitaliy91
Дата сообщения: 03.06.2009 15:31
Подскажите пожлуйста как присвоить переменной 2 символа первой строки определенного положения из файла ?

например файл содержит следующую строку (это HEX адресс и значение первого столбца):

Цитата:

0046D03C 01


Мне надо получить значение 01

Уже разобрался

Цитата:

for /F "delims=" %%i in (dump.txt) do set var=%%i
set "var=%var:~9,-3%"


И такой вопрос: чем отличается одна разделяющая черта от двойной т.е | от ||
Автор: HaK1R
Дата сообщения: 03.06.2009 23:21
vitaliy91
вот так наверное проще будет

Код: for /F "tokens=2" %%i in (dump.txt) do set var=%%i
Автор: ZeroCrash
Дата сообщения: 04.06.2009 00:36
Всем привет! Незнаю можно ли при помощи батника как организовать такое:
Нужно чтобы батник выбирал из списка записей в текстовом файле (допустим файл называется тест1.txt) выбирал случайную строчку и записывал её в отдельно созданном тестовом файле Готовый.txt (в первой строке текстовика). Но каждой строчке из файла тест1.txt соответствует другой тестовый файл (пример: строчка №3 из тест1 соответствует текстовому файлу тестик3.txt), выбирал случайную строчку из файла тестик3.txt и добавлял её соответственно во вторую строку файла Готовый.txt

Я ещё учусь всему этому, но такое для меня чересчур сложно будет

Помогите, если сможете пожалуйста. И о возможности объясните немного хотя бы что да как если не сильно затруднит. Заранее благодарен.
Автор: Smart_Chameleon
Дата сообщения: 04.06.2009 05:19
ipmanyak, HaK1R - спасибо огромное - буду пробовать
Автор: iMiKED
Дата сообщения: 04.06.2009 05:49
Добрый день всем!

Не подскажете как написать код для батника - обход подпапок некоторой папки (и выполнение некотрого действия там, например, копирование)? Уже надоело работать в 100 папках вручную(
Автор: alexander6161
Дата сообщения: 04.06.2009 06:14
В 64-разрядной системе выполняется 32-разрядное приложение, из которого вызывается батник. Батник обращается к реестру через reg.exe, и путь к ключу программы из батника теперь выглядит так:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\приложение
а не как из 32-разрядного приложения
HKEY_LOCAL_MACHINE\SOFTWARE\приложение
Само приложение когда обращается к реестру, попадает на последний ключ (без Wow6432Node). То есть этот ключ выглядит для приложения как обычный, без Wow6432Node.

Кто уже сталкивался с этим ньюансом, подскажите как правильно надо запускать cmd.exe или reg.exe, может с каким ключом или из другой папки, хочется правильно сделать, а не городить огород с переименованием ключей реестра в батнике.
Автор: Maza_Faka
Дата сообщения: 04.06.2009 06:32
iMiKED
Пример рекурсивного перебора всех вложенных папок и копирования файлов:

Код:
@Echo Off

Set SourceDir=C:\Temp
Set DestDir=D:\Temp

For /R %SourceDir% %%A In (.) Do Copy "%%A\*.*" %DestDir%
Автор: jonnydram
Дата сообщения: 04.06.2009 12:49
Maza_Faka
Спасибо =)
Автор: yrs
Дата сообщения: 04.06.2009 14:25
День добрый! Прошу подсказать, как расшарить каталоги на сервере с разными правами для разных прользователей. Например:
есть папки folder1, folder2, folder3;
пользователи u1,u2,u3
надо дать доступ к folder1 для u1 полный, для остальных чтение, к folder2 для u2 полный, остальным чтение и для папки folder3 всем всё, включая пользователей заходящих через удаленный рабочий стол.
Заранее спасибо, а то заклинило
Автор: Maza_Faka
Дата сообщения: 04.06.2009 16:00
yrs

Код:
Net Share /?
Cacls /?
Xcacls /?
Автор: Elroir
Дата сообщения: 04.06.2009 16:05
vitaliy91

Цитата:
И такой вопрос: чем отличается одна разделяющая черта от двойной т.е | от ||

Одна черта - перенаправление вывода команды слева от черты, на вход команды справа.
Две черты - если команда слева завершила свою работу с ошибкой (errorlevel > 0), то выполнить команду справа.
Автор: Babzina
Дата сообщения: 04.06.2009 22:37
Подскажите как сделать чтобы процесс копирования отображался в процентах от 0..100

robocopy /eta как-то не очень красиво, если можно то без списка который отображается
Автор: HaK1R
Дата сообщения: 04.06.2009 23:10
alexander6161

Цитата:
Батник обращается к реестру через reg.exe, и путь к ключу программы из батника теперь выглядит так:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\приложение
а не как из 32-разрядного приложения
HKEY_LOCAL_MACHINE\SOFTWARE\приложение

т.е. батник видет с Wow6432Node а на самом деле если посмотреть через реестр Wow6432Node там не будет?

А в целом непонятно, что хочешь. Если можно, то код батника(если есть), проблему (с примером)(если есть) и что тебе надо(исправить\написать)


Добавлено:
Elroir

Цитата:
Две черты - если команда слева завершила свою работу с ошибкой (errorlevel > 0), то выполнить команду справа.

ты поставил errorlevel > 0. Вопрос: Почему больше? Кроме 0 и 1 errorlevel может принимает еще какие-нибудь значения или нет?
Автор: VetalKr
Дата сообщения: 05.06.2009 00:36
День добрый, подскажите как узнать основной шлюз в бат файле и записать в переменную, чтобы использовать в дальнейшем, например, route add.

OS Windows XP SP3

Заранее благодарен
Автор: NIKZZZZ
Дата сообщения: 05.06.2009 00:43
VetalKr

Цитата:
как узнать основной шлюз в бат файле и записать в переменную, чтобы использовать в дальнейшем, например, route add.



Код: FOR /F "usebackq tokens=1* delims=:" %%i in (`ipconfig ^| find /i "шлюз" ^| find /i ": 10."`) do set ss=%%j
if "%ss%"=="" (
Echo Default gateway error
pause>nul
goto :eof
)
cls
@echo Default gateway %ss%
::route -f
::route add 0.0.0.0 MASK 0.0.0.0 %ss%
::Локальная сеть:
::route -p add 10.0.0.0 mask 255.0.0.0 %ss%
:: и т.п.
Автор: alexander6161
Дата сообщения: 05.06.2009 04:34
HaK1R
Постараюсь объяснить. Выполняется 32-разрядное приложение на 64-разрядной системе. Пишет/читает значения ключа
HKEY_LOCAL_MACHINE\SOFTWARE\приложение

Из этого приложения запускается батник имя.cmd такого содержания:
for /f "tokens=3 usebackq delims=    " %%I in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\приложение" /v "ключ"`) do set A=%%I
или
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\приложение" /v "ключ"

Результат такой - нет такого ключа в реестре. Зато есть такой ключ (для батника):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\приложение

Получается, либо cmd.exe, либо reg.exe запускается 64-разрядный, отсюда такой результат.

Если посмотреть "Пуск"-"Выполнить"-"Regedit" в 64-разрядной системе - ключ этого приложения отображается так:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\приложение

Вопрос: кто из участников форума сталкивался с 64-разрядными системами и что делали с батниками, написанными для 32-разрядных систем? Не менять же все ключи реестра в батнике? Посоветуйте?
Автор: 01MDM
Дата сообщения: 05.06.2009 07:42
alexander6161


Цитата:
Вопрос: кто из участников форума сталкивался с 64-разрядными системами и что делали с батниками, написанными для 32-разрядных систем? Не менять же все ключи реестра в батнике? Посоветуйте?


Батнику все равно какая система 32 или 64 - он делает только то, что прописано в его теле.
Если там указан ключ hkcu\a\b\c, он и будет отрабатывать hkcu\a\b\c, а не hkcu\a\b\64\c
Автор: jonnydram
Дата сообщения: 05.06.2009 08:04
Доброе утро =)

Все пытаюсь как-то освоить bat-анику, в связи с этим вопрос следующий:

В командной строке набираю "for /l %%i in (0,1,4) do echo %%i" и получаю ошибку

Непредвиденное появление: %%i.

А с командой "for /l %i in (0,1,4) do echo %i" получается нормальный цикл, как и должен вроде бы.

Почему? Ведь переменные как раз-таки через %% обозначаются..


P.S. Пробовал в пуск-выполнить-cmd, WinXP SP2.
Автор: Maza_Faka
Дата сообщения: 05.06.2009 08:15
jonnydram

Цитата:
Почему? Ведь переменные как раз-таки через %% обозначаются

Смотря где. В bat-файле знаки процента нужно удваивать, а в ком. строке надо использовать одинарные.

Цитата:

For /?
В пакетных файлах для команды FOR используется запись %% переменная вместо%переменная.
Автор: jonnydram
Дата сообщения: 05.06.2009 08:31
Maza_Faka
Понял, спасибо! Ковыряюсь дальше..))

Добавлено:
А можно ли как-нибудь подключить удаленную командную строку? Как удаленный реестр подцеплять, к примеру.

Суть в чем - на моем ПК команда dsquery не определяется CMD-шником. А на серваке есть. Может быть cmd можно другой поставить, чтобы тоже коннектился к Active Directory?
Автор: alexander6161
Дата сообщения: 05.06.2009 10:05
01MDM
Цитата:
Батнику все равно какая система 32 или 64 - он делает только то, что прописано в его теле.
Если там указан ключ hkcu\a\b\c, он и будет отрабатывать hkcu\a\b\c, а не hkcu\a\b\64\c

Эта система Wow6432Node сама подменяет ключи реестра/папки, насколько я понимаю, и для 32-разрядного приложения они выглядят совсем по другому.

Приложение обращается к ключу
hkcu\a\b\c
64-разрядное попадает на этот ключ: hkcu\a\b\c
а 32-разрядное на этот: hkcu\a\b\Wow6432Node\c
Хотя обращаются абсолютно к одному и тому же ключу.

Вот и хочу понять - есть возможность запускать cmd.exe и reg.exe в 32-разрядном режиме, и как это сделать? Может у кого-то есть опыт в данном вопросе?
Автор: VetalKr
Дата сообщения: 05.06.2009 10:43
NIKZZZZ
!!!ОГРОМНОЕ СПАСИБО!!!
Я в єтом деле еще новичек, вот учюсь.
Автор: 01MDM
Дата сообщения: 05.06.2009 13:04
alexander6161

Цитата:
Хотя обращаются абсолютно к одному и тому же ключу.

У меня нет 64-битной системы, но я больше чем уверен, что батник будет исполнять только то, что в нем есть. Если написан ключ реестра hkcu\a\b\c, то ИМЕННО этот ключ в ходе выполнения батника и будет искаться. Запускай как хочешь, но результат зависит только от содержания.

Как совет, организовать ветвление, в зависимости от версии виндовс. Если конкретный ключ не прописан, а просто запускается приложение, то здесь, извини, ничем не помогу.
Автор: NIKZZZZ
Дата сообщения: 05.06.2009 22:57
BAu3.exe ~ 2.8 Mb, (283 Kb BAu3.exe , остальное - описание)

[more=BAu3]BAu3.exe

Существует довольно много сонсольных утилит, например CLCC, gsar,hstart, msgbox, nircmd и т.п. , в большинстве случаев BAu3.exe их может заменить.

BAu3.exe - Консольная утилита, позволяющая выполнить одну строку скрипта, написанного на Autoit с полной передачей данных в .bat файл.
Можно, конечно , написать скрипт на самом Autoit, но это не всегда проще.


Syntax:
BAu3.exe AutoitString [/d]
AutoitString - Autoit String
/d - Replace CRLF in StdOut on specified symbol

Примеры:

Вычислить размер каталога:
BAu3.exe "DirGetSize('c:\windows')/1024 & ' Mb'"

Пауза:
BAu3.exe "Sleep(1000)"

Калькулятор:
BAu3.exe "2*2+(3*sin(3.14))"

Информация о подключенных дисках:
BAu3.exe "DriveGetDrive ( 'all' )" /d,
- Если результат операции - массив, данные будут разделены crlf
- "/d," - перечислить их через ","

GUI окно с вариантами выбора:
BAu3.exe "MsgBox(4096+2,'BAu3.exe Demo','Returns Choice')"
Возвращает:
OK - 1
CANCEL - 2
ABORT - 3
RETRY - 4
IGNORE - 5
YES - 6

%ErrorLevel% - всегда равно результату операции, если он может быть интерпретирован как численное значение.

GUI выбор файла:
BAu3.exe "FileOpenDialog('BAu3.exe Demo','','All (*.*)',1+4)"

Послать в активное окно нажатие клавиши:
BAu3.exe "Send('Hi' & '{ENTER}')"

Поддержка перенаправления:
Echo 1234567890 | BAu3.exe "StringReplace($StdIn,'456','_654_')"
- $StdIn - псевдопеременная, стандартный STDIN

Замена текста (RegExp)в файле:
Type File.txt | BAu3.exe "StringRegExpReplace($StdIn,'456','_\0_')">NewFile.txp

Вывод текста без crlf (.bat файл)
Echo 1234|BAu3.exe "StringReplace($StdIn,@crlf,'')"
Echo 5678|BAu3.exe "StringReplace($StdIn,@crlf,'')"

Определение IP адреса первого сетевого адаптера.
BAu3.exe "@IPAddress1"

Это очень малая часть возвожностей AutoIt, более подробно в справке. (русская немного устарела, при проблемах лучше использовать Eng)

Сайт AutoIt
http://www.autoitscript.com/autoit3
[/more]


Существует довольно много сонсольных утилит, например CLCC, gsar,hstart, msgbox, nircmd и т.п. , в большинстве случаев BAu3.exe их может заменить.

BAu3.exe - Консольная утилита, позволяющая выполнить одну строку скрипта, написанного на Autoit с полной передачей данных в .bat файл.
Можно, конечно , написать скрипт на самом Autoit, но это не всегда проще.

Вообще-то утилита была написана для других целей, но адаптированная для батников оказалось достаточно удобной.



Автор: lorents
Дата сообщения: 06.06.2009 18:29
такая проблема, нужно сделать печать нескольких картинок, вызовом диалогового окна печати, как это можно осуществить?
Автор: VetalKr
Дата сообщения: 07.06.2009 17:46
Как закрыть процесс через BAT-файл?
Автор: wolf0425
Дата сообщения: 07.06.2009 19:24

Цитата:
Как закрыть процесс через BAT-файл?

taskkill.exe /?


как из батника сделать lowerkeys имени файла?
ЖЕлательно без внешних утилит
Автор: strat
Дата сообщения: 07.06.2009 20:05
wolf0425

Цитата:
как из батника сделать lowerkeys имени файла?

однажды на ответах майл ру я отвечал на такой вопрос, предлагал в качестве решения программу, но был один гениальный ответ который я тут процитирую.


Грозный Ламер

Цитата:

Только-что в целях эксперимента переименовал все файлы в текущей директории в нижний регистр одной единственной строчкой в командной строке:
for /f %i in ('dir /b /l') do ren "%i" "%i"

Синтаксический разбор:
команда dir /b /l выводит только список файлов без дат, размеров и т. п. (ключ /B), используя для отображения только нижний регистр (ключ /L).
Русским языком действие строки можно описать примерно так:
для каждого файла в этой папке выполнить команду ren "имя файла" "имя файла"
т. е. переименовать файл в самого себя. Но, т. к. имена "выводились" в нижнем регистре (только визуально), то и переименование будет происходить в нижний регистр (абсолютно реально).

Например если в папке лежат 3 файла FILE1.EXT, File2.Ext и fiLe3.eXt, будут автоматом выполнены три команды:
ren "file1.ext" "file1.ext"
ren "file2.ext" "file2.ext"
ren "file3.ext" "file3.ext"
и файлы переименуются в file1.ext, file2.ext и file3.ext.

И не надо никаких специальных программ.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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