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

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

Автор: Lexua
Дата сообщения: 04.04.2006 21:07
uZver
может N=N+1
Автор: Romero_Ekb
Дата сообщения: 05.04.2006 05:41
abz
Так в том то и дело, что заранее неизвестен точно путь HKEY_USERS\S-1-5-21-...
Для того и SID.

KapralBel
Я не знаю точное имя пользователя - нужен поиск по подстроке.
Автор: jak_forest
Дата сообщения: 05.04.2006 07:44
uZver
в этой ветке есть уже упоминание решения.

Код:
echo off
setlocal ENABLEDELAYEDEXPANSION
set n=0
for /l %%i in (1,1,5) do (
    set /a n=!n!+1
    echo !n!
)
Автор: tomegadeth
Дата сообщения: 05.04.2006 08:01
как отметил jak_forest, все дело в setlocal ENABLEDELAYEDEXPANSION и !N! вместо %N% - вот и решение

Код: @echo off
setlocal ENABLEDELAYEDEXPANSION
set N=0
for %%f in (*.txt) do (
set /a N+=1
arj m -e -y test!N! .\%%f -jm1
)
Автор: uZver
Дата сообщения: 05.04.2006 09:06
всем спасибо
ну вот и я стал еще немного умнее
до исользования setlocal ENABLEDELAYEDEXPANSION догадался,
а вот то что надо использовать ! забыл.
Автор: abz
Дата сообщения: 05.04.2006 12:05
Romero_Ekb

Цитата:
Так в том то и дело, что заранее неизвестен точно путь HKEY_USERS\S-1-5-21-...
Для того и SID.

Да туда вообще лазить не нужно. Все действия проводятся с веткой HKCU
Автор: Serge2005
Дата сообщения: 05.04.2006 12:37
Скажите, пожалуйста... Есть файл такой структуры default.bar:

Код:
Buttoncount=58
button1=%ProgramFiles%\Winamp\winamp.exe,3
cmd1=%ProgramFiles%\Winamp\winamp.exe
path1=%ProgramFiles%\Winamp\
iconic1=1
menu1=WinAmp
button2=%Commander_path%\Plugins\wfx_TWinAmp2_1.5.2\WAC.exe,6
cmd2=%Commander_path%\Plugins\wfx_TWinAmp2_1.5.2\WAC.exe
param2=prev
path2=%Commander_path%\Plugins\wfx_TWinAmp2_1.5.2\
menu2=Предыдущий трек
button3=%Commander_path%\Plugins\wfx_TWinAmp2_1.5.2\WAC.exe,9
cmd3=%Commander_path%\Plugins\wfx_TWinAmp2_1.5.2\WAC.exe
param3=play
path3=%Commander_path%\Plugins\wfx_TWinAmp2_1.5.2\
menu3=Воспроизведение
....58
Автор: SiR666
Дата сообщения: 05.04.2006 15:35
подскажите плиз ... что-то я туплю .
как в бат файле получить переменную с датой за 3 дня до текущей в формате ГГГГММДД?
все ... сам разобрался.
Set dt=%Date%
Set dtDay=%dt:~0,2%
Set dtMonth=%dt:~3,2%
Set dtYear=%dt:~6,4%
Set /a dtDay=%dtDay%-3%
If %dtDay%==0 (Set /A dtMonth=%dtMonth%-1)
If %dtMonth%==0 (Set /a dtYear=%dtYear%-1) & (Set dtMonth=12)
If %dtDay%==0 (
If %dtMonth%==1 (Set dtDay=31)
If %dtMonth%==3 (Set dtDay=31)
If %dtMonth%==5 (Set dtDay=31)
If %dtMonth%==7 (Set dtDay=31)
If %dtMonth%==8 (Set dtDay=31)
If %dtMonth%==10 (Set dtDay=31)
If %dtMonth%==12 (Set dtDay=31)
If %dtMonth%==2 (Set dtDay=28)
If %dtMonth%==4 (Set dtDay=30)
If %dtMonth%==6 (Set dtDay=30)
If %dtMonth%==9 (Set dtDay=30)
If %dtMonth%==11 (Set dtDay=30)
)
Set dt2=%dtYear:~0,4%%dtMonth:~0,2%%dtDay:~0,2%%
Автор: Saftor
Дата сообщения: 05.04.2006 16:33
Добрый вечер подскажите пожалуйста как сделать следущие так как только начал изучать cmd: У меня есть WinSrv2000Sp4 мне нужно создать .cmd файлик который делал бы удаление всех файлов в папке e:\Обмен\ , но при этом оставлял папки пользователей (допустим Иванов, Петров, Сидоров......), а также удалял все папки и файлы в папке Иванов! У меня получается что все файлы он удаляет, а вот папки вложенные в (Иванов) нет!?
Как сделать чтоб удалялись так же вложенные папки и файлы в папке пользователя? А вот ещё у меня он так же нехочет удалять временны файлы (~$дачи КО.doc и так далее?
вот что у меня получилось:
c:
cd \progra~1\ca\bat\
del %TEMP%\*.* <y.cdm
del g:\temp\*.* <y.cdm
xcopy /e /y C:\Обмен\*.* D:\temp\
Del e:\Обмен\*.* <y.cdm
del /s/q e:\Обмен\*.*
Автор: jak_forest
Дата сообщения: 06.04.2006 07:52
SiR666
маленькая подсказка.
по крайней мере в коде

Код: If %dtDay%==0 (Set /A dtMonth=%dtMonth%-1)
Автор: 3pak
Дата сообщения: 06.04.2006 11:03
Извените, сильно не ругайтесь, недавно только узнал что такое .bat файлы и для чего они нужны, я только учусь.
Как нибудь на досуге перечитаю весь топик, а пока интерисует только один вопрос.
Прочитал в журнале Upgrade Special #4 2006 стр.124 синтаксис удаления вложеных папок и файлов (для примера выбрал Temp):

Erase /S /Q
C:\Documents and Settings\Имя пользователя (свое подставлял)\Local Settings\Temp

Неполучается удалить не вложенные папки ни файлы, ось WinXP, в чем ошибка??
Автор: KapralBel
Дата сообщения: 06.04.2006 11:26
3pak
Для удаления всех файлов

Код:
erase %Temp%\*.* /s /q
Автор: olegupb
Дата сообщения: 06.04.2006 16:00
Как заставить такую строку заработать?

Цитата:
move E:\~i??????.??? E:\11\~i??????.4??

Или она совсем неправильная?
Автор: Saftor
Дата сообщения: 06.04.2006 16:25
KapralBel
Спасибо всё получилось, а ещё вопрос а возможно сделать маску на некоторые папки и файлы внутри этой папки которые не будут удаляться?
Автор: KapralBel
Дата сообщения: 06.04.2006 16:35
Saftor
Команда Erase/Del без ключа /f удаляет все файлы, за исключением тех, на которые установлен аттрибут ReadOnly
т.е. сначала ставишь аттрибут attrib /? - затем удаляешь, затем снимаешь аттрибут
Автор: Serge2005
Дата сообщения: 06.04.2006 21:51
Меня игнорируют?
http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=620#18
Пожалуйста, помогите...хоть скажите, гда почитать об этом....
Автор: 3pak
Дата сообщения: 06.04.2006 22:23
KapralBel, справку по командной строке я уже читал и код такого вида подстовлял: rd [полный путь до папки] /s /q и впереди еще пробовал - rmdir, итог один - ни чего не происходит. Из написаного Вами непойму что за путь такой - %Temp%. Это чтоли удалить все имеющиеся на HDD папки Temp?
Это папка Temp, у меня была как пример. А если к примеру мне надо удалить кэш Windows прожигалки, которая находится по адресу C:\Documents and Settings\Имя пользователя\LocalSettings\Арplication Data\Microsoft\CD Burning, то тут как быть с написанием пути. Что-бы мне каждый раз не бегать у Вас не спрашивать путь до необходимой мне папки, обьясните мне чайнику этот момент с написанием пути.
И что-бы сама папка не удалялась, а только её вложения.
Автор: abz
Дата сообщения: 07.04.2006 01:38
3pak

Цитата:
Из написаного Вами непойму что за путь такой - %Temp%

А посмотреть самому не судьба?
Пуск - Выполнить - cmd
echo %temp%

Добавлено:

Цитата:
А если к примеру мне надо удалить кэш Windows прожигалки, которая находится по адресу C:\Documents and Settings\Имя пользователя\LocalSettings\Арplication Data\Microsoft\CD Burning, то тут как быть с написанием пути.

Так: %APPDATA%\Microsoft\CD Burning

Цитата:
Что-бы мне каждый раз не бегать у Вас не спрашивать путь до необходимой мне папки, обьясните мне чайнику этот момент с написанием пути.

Код: Пуск - Выполнить - cmd
set
Автор: jak_forest
Дата сообщения: 07.04.2006 08:07
Serge2005
а попробуй перефорулировать задание.
Автор: Serge2005
Дата сообщения: 07.04.2006 08:20
jak_forest
Это сложно... Как бы есть ini (по структуре) файл, в котором используются параметры: menuN, cmdN, где N - порядковый номер. Нужно найти эту строку по ее значению и потом как-то получить N.

Код:
file.ini:
[section]
menu1=menuabcdefg
cmd1=program_first
menu2=menuabcde
cmd2=program_second
....
Автор: jak_forest
Дата сообщения: 07.04.2006 09:44
найти строку по чем-либо findstr /i "что-либо" <filename>.
выделить из строки N
Код: set k=%computername%
set k=%k:~3%;устанавливаем переменную = с 4-го и до конца все символы
Автор: Serge2005
Дата сообщения: 07.04.2006 09:51
jak_forest
А где почитать на просто, доступном для новичка языке, объяснения к вышепредложенному, например, что значит for /f %%i
:L1
%1? %%j? %%k
%M:3%
Автор: KapralBel
Дата сообщения: 07.04.2006 10:00
3pak

Цитата:
Из написаного Вами непойму что за путь такой - %Temp%

Переменная среды (ссылка), которая укахывает путь к папке Темп, т.е. в как на разных компах эта папка может находиться в разных местах. Так, что лучше использовать именно переменные среды а не полный путь. Как получить список тебе объяснил abz

Кстати если в пути встречаются не буквенноцифровые символы (например пробел), то желательно путь охватываь кавычками


Цитата:
И что-бы сама папка не удалялась, а только её вложения.


Код:
PushD %Temp%
RD . /q/s
PopD
Автор: Serge2005
Дата сообщения: 07.04.2006 10:02
1) Порядковые номара могут не совпадать со строками. То есть там могут быть еще и другие строки, которые мне не нужны.
2) Можно, пожалуйста, с комментариями, а то я совсем не могу разобраться.
Это нужно для смены кучи параметров одним нажатием, то есть в скрипт планируется прописать кучу таких вот кусочков, которые будут заменять (по описанному алгоритму) каждый свою часть, а если искомой строки нет, то будут пропускаться
Автор: jak_forest
Дата сообщения: 07.04.2006 10:58
Serge2005
по поводу for - for /?
по поводу %M:3% - set /?
коментарии к батнику смотри сюда:
[more]
коментарии лучше поудалять в самом бтнике, могут возникнуть траблы на пустом месте

Код:
; коментарии начинаются с тчк+зпт и идут следом за коментируемой строкой
del /q /s file1.txt > nul 2>&1
;удаляем на всякий случай выходной файл.
;> nul 2>&1 нужно для того что бы небыло на экране никаких сообщений об ошибках
for /f %%i in (file.txt) do call :L1 %%i
;для каждой строки из указанного файла переходим на метку L1 с передачей всей строки
;если в строке есть пробелы, то заключи %1 в двойные кавычки а после метки L1
;замени set L=%1 на set L=%~1
goto :eof
;выходим из программы сразу после перебора всех строк

:L1
;это метка для перехода на нее из любого места
;сюда попадаем для разбора каждой строки во входном файле.
;в данном случае из-за того что переходили на етку с помощью
;call :L1 строка
;%1 содержит всю строку
set L=%1
;в переменную L заносим всю строку
echo %L%>> file1.txt
;выводим строку в выходной файл
for /f "delims== tokens=1,*" %%j in (%L%) do (
; ЭТОТ КОМЕНТАРИЙ В БАТНИКЕ НЕ ОСТАВЛЯЙ - ПРОВЕРЕННО ЭТО ГРАБЛЯ
;разбиваем строку назодящююся в L на 2 части (tokens=1,*).
;разделителем служит = (delims==).
;Первая часть помещается в %%j,
;вторая и последующие в переменные по порядку: k, l, m, ... пока есть что помещать
if "%%k"="program_second" call :L2 %%j
;ну если после знака = в исходной строке идет то на что мы реагируем, то переходим на
;метку L2
;сюда, между двумя круглыми скобками, можно накидать несколько разных сравнений
;и соответственно переходов на разные метки
)
goto :eof
;если метка была вызвана с помощью CALL, то возвращаемся туда, откуда вызвали
;в противном случае выходим из батника вообще.

:L2
;аналогично :L1
set M=%1
;в М запоминаем входной параметр
set M=%M:3%
;в М записываем то что находится в М после третьего символа
;т.е. из cmd1234 получим в М 1234
echo cmd_new%M%=command>> file1.txt
;выводимм в выходной файл все что нам надо с учетом того что в M у нас есть номер
goto :eof
;см. выше по аналогии
Автор: abz
Дата сообщения: 07.04.2006 13:18
KapralBel

А чем отличается:

Код: PushD %Temp%
Автор: KapralBel
Дата сообщения: 07.04.2006 13:27
abz
Попытайся проделать эти 2 команды с другого диска

PushD %Temp% - меняет папку и диск
CD %Temp% - меняет только папку на указанном диске, надо будет сделать еще c:, а если темп не на С?

Кроме того есть команда PopD парная к PushD %Temp%, которая возвращает в ту папку из которой была сделана команда PushD
Автор: Serge2005
Дата сообщения: 07.04.2006 16:11
jak_forest
Спасибо очень очень огромное!!!!! Сейчас постараюсь понять и сделать уже код под себя!! Спасибо!!!!


Код:
for /f %%i in (file.txt) do call :L1 %%i
goto :eof

:L1
set L="%~1"
echo %L%>> file1.txt
for /f "delims== tokens=1,*" %%j in (%L%) do (
if "%%k"="cd \\\Registry" call :L2 %%j
)
goto :eof

:L2
set M=%1
set M=%M:3%
echo cmd_new%M%=command>> file1.txt
goto :eof
Автор: Romero_Ekb
Дата сообщения: 08.04.2006 06:50
abz

Цитата:
Да туда вообще лазить не нужно. Все действия проводятся с веткой HKCU


Вот и подскажи тогда, пожалуйста, как дать права на раздел в HKCU пользователю при помощи командного файла.
Давать юзеру временно права админа - не канает, так как придется завершать сеанс для вступления в силу изменений.
Автор: vu1tur
Дата сообщения: 08.04.2006 08:42
Romero_Ekb
How to: Use a Script to Change Registry Permissions from the Command Line

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Вернуть библиотеку АТМ (поддержка шрифтов Type 1)


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