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

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

Автор: Kirillhome
Дата сообщения: 21.08.2009 16:17
Unitaz

Цитата:
%0 возврвщает имя батника ,а как получить имя каталога в котором лежит батник ?

%CD%
(точнее говоря - это текущий каталог)
или
%~dp0%
Автор: pazdak
Дата сообщения: 21.08.2009 16:30
Подскажите пожалуйста,
нужно в bat файле запускать команду каждую последнюю субботу месяца?
Можно ли такое сделать не прибегая к vbs и другим скриптовым языкам.

Спасибо.
Автор: Kirillhome
Дата сообщения: 21.08.2009 17:38
pazdak

Цитата:
Подскажите пожалуйста,
нужно в bat файле запускать команду каждую последнюю субботу месяца?
Можно ли такое сделать не прибегая к vbs и другим скриптовым языкам.

Можно!
Вот, к примеру, так (для русской локали)

Код:
@echo off
setlocal
For /f "tokens=1-7 delims=.:/-, " %%i in ('echo exit^|command /K prompt $D $T ') do (
For /f "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (
set dow=%%i
set dd=%%j
set mm=%%k
set yyyy=%%l
set hh=%%m
set min=%%n
set ss=%%o
)
)

set max_day=24
if "%mm%"=="01" set max_day=25
if "%mm%"=="02" (
set max_day=22
if "%yyyy%"=="2012" set max_day=23
if "%yyyy%"=="2016" set max_day=23)
if "%mm%"=="03" set max_day=25
if "%mm%"=="05" set max_day=25
if "%mm%"=="07" set max_day=25
if "%mm%"=="08" set max_day=25
if "%mm%"=="10" set max_day=25
if "%mm%"=="12" set max_day=25



if "%dow%"=="Сб" (
if "%dd%" GEQ "%max_day%" (
echo This is last Sunday on this month))

rem Воскресенье Вс
rem Понедельник Пн
rem Вторник Вт
rem Среда Ср
rem Четверг Чт
rem Пятница Пт
rem Суббота Сб

endlocal
Автор: king_stiven
Дата сообщения: 21.08.2009 17:49
Unitaz
шапка

Цитата:
Переменная %0

Автор: Unitaz
Дата сообщения: 22.08.2009 09:16

Цитата:
Unitaz

Цитата:%0 возврвщает имя батника ,а как получить имя каталога в котором лежит батник ?


%CD%
(точнее говоря - это текущий каталог)
или
%~dp0%



спасибо я шапку читал ........ %CD% и %~dp0% возвращают полный путь а мне нужно только имя каталога без пути , если бы было что то типа %-1 я был бы удовлетворён

вопрос можно сформулировать по другому как мне от %~dp0% или %CD% отрезать не нужный мне путь


например файл d:\DWL-2100AP\Drivers\NAME\3.jpg находится в каталоге с именем NAME вот его мне и надо заполучить
Автор: NIKZZZZ
Дата сообщения: 22.08.2009 12:03
Unitaz

Цитата:
мне нужно только имя каталога без пути


Код: Set xx=%~dp0
FOR /F "usebackq delims=" %%i IN ('%xx:~0,-1%') DO Set Name=%%~nxi
Echo %name%
Автор: Kirillhome
Дата сообщения: 22.08.2009 12:38
Unitaz

Цитата:
например файл d:\DWL-2100AP\Drivers\NAME\3.jpg находится в каталоге с именем NAME вот его мне и надо заполучить

Ну тогда, к примеру, так:

Код:
@echo off
set ful_path=%~dp0%
set new_path=%ful_path:~0,-1%
if "%new_path:~-1%"==":" (
set last_cat=%new_path%
set last_sim=\
set cat=\%new_path%)
:start
if not defined last_cat set last_sim=%new_path:~-1%
if not defined last_cat set cat=%last_sim%%cat%
if not defined last_cat set new_path=%new_path:~0,-1%
if "%last_sim%" NEQ "\" goto :start
set cat=%cat:~1%


echo %cat%
Автор: Unitaz
Дата сообщения: 22.08.2009 14:10
спасибо за оба варианта ,всё отлично работает
Автор: 01MDM
Дата сообщения: 23.08.2009 12:51
Kirillhome
Извиняюсь, ответить сразу не мог. На даче только мобила

Цитата:
т.е. посылаем в parse, заменяем табуляцию на спецсимвол, сдвоенный спецсимвол - разделям, потом пытался заменить двойную кавычку на одинарную - не сработало, дальше просто через echo смотрю что получается.


Я так понимаю, что нужны 9, 10 и 12 поля (из book.txt):

Код:
@echo off
setlocal
chcp 1251 1>nul

for /f "tokens=*" %%i in (book.txt) do set str=%%i && call:parse
chcp 866 1>nul
goto:eof

:parse

:: Убиваем кавычки
set str=%str:"=%

:: Табуляцию заменяем на "/" (Возможно это лишнее)
set str=%str:<tab>=/%

:: Заполняем пустое поле, если оно есть.
set str=%str://=/fake/%

for /f "tokens=9,10,12 delims=/" %%i in ("%str%") do (
    echo %%i
    echo %%j
    echo %%k
    echo.
)
Автор: manstopper
Дата сообщения: 23.08.2009 16:09
Ребята, подскажите, реально ли автоматизировать такую задачу?

Сразу скажу, что нужно это для изготовления репаков игрушек. Иногда не лезет на диск и приходится удалять видео, но не всегда игры работают после физического удаления файлов. Приходится совать 1-секундные пустышки с черным полем, закодированные нужным кодеком.

Есть файл aburvalg.ogm, который нужно продублировать N раз в одну папку и переименовать эти копии в соответствии со списком из текстового файла (список имен файлов в текстовике уже получен).
Автор: 01MDM
Дата сообщения: 23.08.2009 16:51
manstopper

Цитата:
Есть файл aburvalg.ogm, который нужно продублировать N раз в одну папку и переименовать эти копии в соответствии со списком из текстового файла (список имен файлов в текстовике уже получен).


Код:
@echo off
for /f "tokens=*" %%i in (list.txt) do copy "From\aburvalg.ogm" "To\%%i"
Автор: manstopper
Дата сообщения: 23.08.2009 20:11
01MDM, огромное человеческое спасибо
Автор: Kirillhome
Дата сообщения: 23.08.2009 20:25
01MDM

Цитата:
Kirillhome
Извиняюсь, ответить сразу не мог. На даче только мобила


Цитата: т.е. посылаем в parse, заменяем табуляцию на спецсимвол, сдвоенный спецсимвол - разделям, потом пытался заменить двойную кавычку на одинарную - не сработало, дальше просто через echo смотрю что получается.
Автор: 01MDM
Дата сообщения: 23.08.2009 21:18
Kirillhome

Цитата:
На самом деле не получается, строки содержат всю "гадость", какую только можно

Я исходил только из твоего файла. Он обрабатывается корректно. Если взять все токены и пронумеровать, то на выходе:

Цитата:

01:3
02:6
03:Великие некроманты и обыкновенные чародеи
04:RU
05:3655
06:0
07:0
08:Маслова, Наталья
09:ru\_\_древнее\_Европа\
10:Великие некроманты и обыкновенные чародеи.fb2
11:355121
12:147948
13:18.05.2008 23:19:41

01:7
02:6
03:Из персидско-таджикской поэзии
04:RU
05:3656
06:0
07:0
08:fake
09:ru\_\_древнее\_Восток\
10:Из персидско-таджикской поэзии.fb2
11:20405
12:6589
13:18.05.2008 23:19:46

01:75472
02:15523
03:Деяния апостолов
04:RU
05:2822
06:4
07:0
08:, Издательство Источник жизни
09:ru\_\_религия\_христианство\Уайт Елена\
10:Уайт 4 Деяния апостолов.fb2
11:1472240
12:382114
13:04.07.2008 22:07:25

01:75473
02:15523
03:Христос - Надежда мира
04:RU
05:2822
06:3
07:0
08:, Издательство Источник жизни, Издательство Источник жизни
09:ru\_\_религия\_христианство\Уайт Елена\
10:Уайт 3 Христос - Надежда мира.fb2
11:2775661
12:709827
13:04.07.2008 22:07:32

Автор: Alukardd
Дата сообщения: 23.08.2009 21:38
king_stiven

Цитата:
а алгоритм примерно такой
for /f "tokens=1,2,3 delims=." %%a in ("%data%") do (
if "%%a" LEQ "00" set not_data=1
if "%%a" GTR "31" set not_data=1
...
if not defined not_data echo %data%
)

спс пока еще не затестил... если не сложно можно паручку коментов? и вопросики еще есть по коду...
переменная "а" по очереди будет принимать значения дня месяца и года? или же пременная "а" - день, а далше по умолчанию создадутся еще 2 перемнные "b" и "c" для месяца и дня? если так то время жизни этих переменных внутри тела цикла или они будут доступны до окончания работы исполняемого файла?

перемнные со следующими именами в цикле типа b c d...z они создаются в момент требования? тоесть до этого они "not defined"???

по поводу проверки целочисленности переменных появились свои мысли, если удасться и будет интересно могу выложить.
Автор: Kirillhome
Дата сообщения: 23.08.2009 21:46
01MDM

Цитата:
Я исходил только из твоего файла.

На самом деле он порядка 88'000строк....
вот пример с ... "плохими" строками (а вот полный файл (размер в архиве - 2,5Мб))


Автор: 01MDM
Дата сообщения: 24.08.2009 09:02
Kirillhome
Конечно не проверял на 88.000 строк (может просто зависнуть), но

Цитата:
вот пример с ... "плохими" строками

нормально разбил строки по полям:

Код:
@echo off
1>nul (
    chcp 1251
    copy /y book.txt book.tmp
    gsar -o -s"(" -r"^(" book.tmp
    gsar -o -s")" -r"^)" book.tmp
    gsar -o -s"&" -r"^&" book.tmp
    gsar -o -s"    " -r"/" book.tmp
    gsar -o -s"//" -r"/fake/" book.tmp
    gsar -o -s""" -r"" book.tmp
)

for /f "tokens=1-13 delims=/" %%a in (book.tmp) do (
1>>result.txt (
echo 01:%%a
echo 02:%%b
echo 03:%%c
echo 04:%%d
echo 05:%%e
echo 06:%%f
echo 07:%%g
echo 08:%%h
echo 09:%%i
echo 10:%%j
echo 11:%%k
echo 12:%%l
echo 13:%%m
echo.
)
)
del book.tmp

1>nul (
    gsar -o -s"^(" -r"(" result.txt
    gsar -o -s"^)" -r")" result.txt
    gsar -o -s"^&" -r"&" result.txt
    chcp 866
)
Автор: guru431
Дата сообщения: 24.08.2009 10:03

Цитата:
Есть маленькая задача - переименовать компы в AD.

Есть список с именами компов вида:
имя_компа=новое_имя_компа

Есть батник на переименование:
set ComputerName=
set NewComputerName=
set DomainUserUPN=user
set DomainUserPasswd=password
netdom renamecomputer %ComputerName% /newname:%NewComputerName% /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60

Как сделать цикл, который переименует все компы из списка (ну и желательно напишет лог)?

Неужели для вас это такая сложная задача?

я вижу этот цикл так:
для каждой строчки в файле выполнять команду:
netdom renamecomputer [символы до знака "=" в n-строке] /newname:[символы после знака "=" в n-строке] /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60

Так можно ли это осуществить?
Автор: 01MDM
Дата сообщения: 24.08.2009 11:25
guru431

Цитата:
Есть маленькая задача - переименовать компы в AD.

Наверное многие, как и я, далеки от админства.

Цитата:
Есть список с именами компов вида:
имя_компа=новое_имя_компа


Попробуй такой вариант:

Код:
@echo off
setlocal

set DomainUserUPN=user
set DomainUserPasswd=password

for /f "tokens=1,2 delims==" %%i in (list.txt) do (
netdom renamecomputer "%%i" /newname:"%%j" /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60
)
Автор: guru431
Дата сообщения: 24.08.2009 16:25

Цитата:

@echo off
setlocal

set DomainUserUPN=user
set DomainUserPasswd=password

for /f "tokens=1,2 delims==" %%i in (list.txt) do (
netdom renamecomputer "%%i" /newname:"%%j" /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60
)


Спасибо! То, что надо!
Только для информативности кое-что добавил:

for /f "tokens=1,2 delims==" %%i in (list.txt) do (
echo Rename %%i to %%j && netdom renamecomputer %%i /newname:%%j /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60
)

Как теперь к этому добавить логирование? Чтобы все события писались в txt.
Автор: NIKZZZZ
Дата сообщения: 24.08.2009 16:32
guru431

Цитата:
Чтобы все события писались в txt.



Код: echo. 2>log.txt
for /f "tokens=1,2 delims==" %%i in (list.txt) do (
echo Rename %%i to %%j>>log.txt
netdom renamecomputer %%i /newname:%%j /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60
)
Автор: guru431
Дата сообщения: 24.08.2009 17:16

Цитата:
echo. 2>log.txt
for /f "tokens=1,2 delims==" %%i in (list.txt) do (
echo Rename %%i to %%j>>log.txt
netdom renamecomputer %%i /newname:%%j /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60
)

Мне нужно вот так:

Код: for /f "tokens=1,2 delims==" %%i in (list.txt) do (
echo Rename %%i to %%j &&
netdom renamecomputer %%i /newname:%%j /userd:%DomainUserUPN% /passwordd:%DomainUserPasswd% /force /reboot:60
)>>log.txt
Автор: NIKZZZZ
Дата сообщения: 24.08.2009 17:43
guru431

Цитата:
А можно сделать так, чтобы информация одновременно выводилась и на экран и в файл?

Только с помощью сторонней утилиты, посмотри в шапке.
Либо просто в конце добавить
Type log.txt



Автор: oshizelly
Дата сообщения: 24.08.2009 18:21
Имеется совсем простой bat-файл из одной строки, запускающий внешнее приложение, типа:
tralala.exe /k/c

Подскажите, как сделать, чтобы:
1) окно command shell не выводилось на передний план или вообще не создавалось.
2) окно command shell закрывалось само после исполнения команды (запуска приложения tralala).

Спасибо!

З.Ы.
Стыдно задавать детский вопрос, но что-то никак не могу сам найти ответа в документации
Автор: Nuts2002
Дата сообщения: 24.08.2009 19:35
oshizelly

Цитата:
1) окно command shell не выводилось на передний план или вообще не создавалось.

Нужно в начале файла написать echo off.
Автор: oshizelly
Дата сообщения: 24.08.2009 20:46
Nuts2002

Цитата:
Нужно в начале файла написать echo off.

Спасибо, но это немного не то. Echo off проосто запрещает вывод текстовых сообщений в ходе выполнения команд, так что окно все равно генерируется, только остается пустым.
А вообще-то меня гораздо больше интересует ответ на 2-й вопрос.
Автор: NIKZZZZ
Дата сообщения: 24.08.2009 21:10
oshizelly

Цитата:
окно command shell закрывалось само после исполнения команды (запуска приложения tralala).



Код: Start "tralala" tralala.exe /k/c
Автор: Alukardd
Дата сообщения: 24.08.2009 22:49
oshizelly

Цитата:
1) окно command shell не выводилось на передний план или вообще не создавалось.

для этого есть такая утилита типо bat to exe. exe'шник не отображается на экране, а в некоторых подобных конверторах есть расширенные настройки, где ты сам опредляешь видимость и многое другое...
Автор: garri671
Дата сообщения: 25.08.2009 07:20
Всем привет!
подскажите как из сервера через батник вытаскивать список пользователей из определенной группы (например Инет) в текстовый файл , админские полномочия имеются. И так же вытаскивать пользователей из Microsoft Exchange server (Списки рассылки ->Display Name (Внешняя почта)).
Заранее благодарен
Автор: oshizelly
Дата сообщения: 25.08.2009 10:39
NIKZZZZ
Цитата:

Код: Start "tralala" tralala.exe /k/c

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

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


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