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

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

Автор: adam264
Дата сообщения: 04.07.2011 12:55
king_stiven, я так понимаю это не весь скрипт? В итоге открывается файл и в нём перебираются строки, но ничего не изменяется. Можно разжевать что означает:
delims=" %%a
echo "%%a"|
errorlevel 1 1>>1.txt
и где почитать про символ |

вот есть пример замены строк, как его переделать в подстроки?

Код: @echo off
chcp 1251

for /f "tokens=*" %%a in ('more^<old.txt') do call :_replace %%a
goto eof

:_replace
set i=%*
echo %i%
set i=%i:папа=отец%
set i=%i:мама=мать%
set i=%i:доча=сын%
echo %i%>>new.txt
goto eof

:eof
Автор: king_stiven
Дата сообщения: 04.07.2011 13:28
adam264
У меня всё работает.

Цитата:
delims=

delims=xxx    Задает набор разделителей. Заменяет набор разделителей по умолчанию, состоящий из пробела и символа табуляции.


Цитата:
echo "%%a"|

echo /?
Вывод сообщений
Фильтр команды используется с символом перенаправления канала команды (|) и является командой внутри команды, которая считывает ввод команды, преобразовывает ввод, а затем записывает выход. Команды-фильтры дают возможность сортировать, просматривать и отбирать часть выходной информации других команд.


Добавлено:
If /?
for /?

Добавлено:

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

Автор: adam264
Дата сообщения: 04.07.2011 13:48
king_stiven, не знаю, не пашет. Я скопировал в папку батник и файл в котором надо удалить подстроки, заархивировал это дело и залил, можешь проверить.

http://webfile.ru/5420403
Автор: king_stiven
Дата сообщения: 04.07.2011 14:08
adam264
из строки
File: b1.paa Compressed: NO
тебе надо удалить
Compressed: NO
а не всю строку?
Тогда я или ты ошибся с заданием. Термин подстроки расплывчат, лучше говорить "убрать словосочетания"
Автор: adam264
Дата сообщения: 04.07.2011 14:14
В строке
File: b1.paa Compressed: NO
мне надо оставить только
b1.paa, т.е. удалить "File: "и " Compressed: NO" и так по всем строкам.
Автор: king_stiven
Дата сообщения: 04.07.2011 14:15

Код: @echo off
chcp 1251

for /f "tokens=*" %%a in ('more^<Abel.log') do call :_replace "%%a"
goto eof

:_replace
set "i=%~1"
set i=%i:File: =%
set i=%i: Compressed: NO=%
set i=%i:Extraction result: SUCCESS!=%
if defined i 1>>spisok.txt echo %i%
Автор: adam264
Дата сообщения: 04.07.2011 14:33
Ура! Уже работает, только теперь между строк выводит сообщение:
Режим вывода команд на экран (ECHO) отключен. Можно его не выводить?
Автор: king_stiven
Дата сообщения: 04.07.2011 14:41
да шо ж такое, не выводит у меня


Добавлено:

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

Автор: adam264
Дата сообщения: 04.07.2011 14:56
king_stiven, я преклоняюсь пред тобой за твоё терпение! спасибо огромное, работает как просил! А сложно доработать этот скрипт чтобы он скидывал такие списки из всех файлов в каталоге с расширением log также в один файл?
Автор: king_stiven
Дата сообщения: 04.07.2011 15:18
adam264
Лучше сразу сформулируй сверхзадачу.


Цитата:
скидывал такие списки из всех файлов в каталоге с расширением log также в один файл

copy /a "*.log" 1.txt
Автор: adam264
Дата сообщения: 04.07.2011 15:41

Цитата:
Лучше сразу сформулируй сверхзадачу.


у меня много файлов с разными названиями в одной папке, объединяет их похожее содержимое и расширение *.log. В идеале хотелось бы скинуть всё что в них есть по тому же принципу в один файл добавляя в начало строки (") а в конец строки (",) без скобочек.
Пример:
"b1.paa",
"bah.paa",
"bt.paa",
"pipipish.pac",
"pishpish.pac",
В общем должен получиться такой большой-большой список.
Автор: Karbid87
Дата сообщения: 04.07.2011 16:03
Ребята, подскажите через bat'ник можно поставить запрет на изменение кокретного значения?
Например, есть вот такой ключ реестра (указываю в общем виде, так как важно лишь значение, а не путь до него)
[HKEY_CURRENT_USER\Software\xxx\yyy\zzz\aaa\bbb]
"Program"=dword:001b7740
Можно ли значение параметра "Program" заморозить? Значение "Program" автоматически меняется во время работы программы. Нужно сделать так, чтобы оно не изменялось во время работы этой программы, а всё время оставалось именно такое. Возможно ли это сделать с помощью bat файлов?
Автор: adam264
Дата сообщения: 04.07.2011 16:10
Karbid87, если только постоянно менять перед выключением windows. А так на мой взгляд лучший способ это сидеть под гостем, а когда надо делать из гостя администратора. Под гостем у программ нет прав изменять реестр.
Автор: Karbid87
Дата сообщения: 04.07.2011 16:11
adam264, понятно тогда
Автор: adam264
Дата сообщения: 04.07.2011 16:49
king_stiven, в конец строк я уже добавил путём замены не на пустоту а на ",,. Я уже совсем разленился, думаю мне это самомому уже под силу. В любом случае огромное спасибо тебе за помощь!
Автор: king_stiven
Дата сообщения: 04.07.2011 17:12
скорее всего отцу русской демократии требовалось следующее:

Код: @echo off
chcp 1251

for %%c in (*.log) do for /f "tokens=*" %%a in (%%c) do call :_replace "%%a"
goto eof

:_replace
set "i=%~1"
set i=%i:File: =^"%
set i=%i: Compressed: NO="%
set i=%i:Extraction result: SUCCESS!=%
if defined i 1>>spisok.txt echo %i%
Автор: adam264
Дата сообщения: 04.07.2011 17:49
king_stiven, вот сейчас вроде то что хотел, больше и не надо, но при первом прогоне были две ошибки (не убирались сообщения, хотя должны были, проверил всё до символа). После второго моего добавления каждый раз через строчку пишет:
Extraction result: CHECKSUM Error!=

Код: @echo off
chcp 1251

for %%c in (*.log) do for /f "tokens=*" %%a in (%%c) do call :_replace "%%a"
goto eof

:_replace
set "i=%~1"
set i=%i:File: =^"%
set i=%i: Compressed: NO=",%
set i=%i: Compressed: YES=",%
set i=%i:Extraction result: CHECKSUM Error! - file successfuly recovered=%
set i=%i:Extraction result: SUCCESS!=%
set i=%i:Extraction result: CHECKSUM Error!=%
if defined i 1>>spisok.txt echo %i%
Автор: king_stiven
Дата сообщения: 04.07.2011 22:22

Цитата:
винда тупит.


Код: @echo off
chcp 1251
for /f "tokens=2" %%a in ('findstr /c:"File: " *.log') do echo "%%a",>>1.txt
Автор: NIKZZZZ
Дата сообщения: 05.07.2011 10:44
Karbid87

Цитата:
подскажите через bat'ник можно поставить запрет на изменение кокретного значения?

Ограничить доступ, примерно так:


Код: SetACL.exe -on "hklm\HKEY_CURRENT_USER\Software\xxx\yyy\zzz\aaa\bbb" -ot reg -actn ace -ace "n:System;p:set_val;m:deny"
Автор: Luna_Q
Дата сообщения: 05.07.2011 11:53
Господа программисты, подскажите пожалуйста, как мне вывести нужный текст из xml в txt файл.
Делаю так:
текст xml:

Цитата:
<Name>AMD Athlon(tm) XP 1700+</Name>
<Name>Windows XP Professional Service Pack 3</Name>
<Name>C</Name>

батник:

Код: for /f "tokens=3 delims=<>" %%i in ('find "<Name" 224876.XML') do echo %%i>>Result.txt
Автор: king_stiven
Дата сообщения: 05.07.2011 12:16
Luna_Q
sed самое лучшее, без него костыли типа

Цитата:
мне нужно вывести только первую строку

for /f "tokens=3 delims=<>" %%i in ('find "<Name" 224876.XML') do (
echo %%i>>Result.txt
exit
)

Цитата:
или только вторую

for /f "skip=1 tokens=3 delims=<>" %%i in ('find "<Name" 224876.XML') do (
echo %%i>>Result.txt
exit
)



Добавлено:
Посоветуйте менеджер горячих клавиш из комстроки, мне надо запускать батник по клавише SPACE. Причём разные батники. Разумеется после работы батника клавиша освобождается.
Автор: Luna_Q
Дата сообщения: 05.07.2011 15:57
king_stiven
Спасибо!!! Забыл про skip.
Автор: kronomobil
Дата сообщения: 05.07.2011 18:47
Можно ли батником удалить определенный файл с сервера из профилей пользователей? Например из C:\Documents and Settings\username\Local Settings\Application Data\Navision
Проблема в том, что профилей много и сам конечный файл имеет имя типа <GUID>, но расширение его известно, и в конечной папке он с таким расширением только один.
Автор: wolf0425
Дата сообщения: 05.07.2011 19:31

Цитата:
Можно ли батником удалить определенный файл с сервера из профилей пользователей?
вообще такие вещи лучше решать через групповые политики - типа логинится юзер, а у него активирующаяся на старте политика трет файл.
Как примитивный вариант - файл трет попросту логон-скрипт.

ну или тупо, через системную шару c$ - перебираешь одним циклом все компы юзеров, вложенным - все каталоги в \\<usercomp>\C$\Documents and Settings\, а там уже проверяешь и удаляешь свой файл - относительный путь у него фиксированный.
Автор: kronomobil
Дата сообщения: 05.07.2011 19:47
wolf0425

Цитата:
юзер, а у него активирующаяся на старте политика трет файл

На каждый логин пользователя - не нужно. Надо периодически запускать руками.
При том, что серверов десяток, профилей на каждом сотня, а путь к файлу длинный, то этот процесс очень трудоемкий и его надо автоматизировать.
Затирается программный кэш, который мешает при внедрении.

Цитата:
перебираешь одним циклом все компы юзеров

Серверы, не компы. %username% в этом случае не помогает. пользователи могут быть и не залогинены..

Цитата:
\C$\Documents and Settings\

Продолжением этого адреса служит совершенно рандомное имя пользователя, в этом проблема. Если это место можно подставить какую-то переменную, то проблема практически решена.
Как вариант, потереть все файлы с определенным расширением в дереве Documents and Settings, но не подходит. Есть еще один нужный файл с таким расширением в другой папке дерева. Он должен остаться.
Автор: wolf0425
Дата сообщения: 05.07.2011 22:39

Цитата:
На каждый логин пользователя - не нужно. Надо периодически запускать руками.
в политиках есть механизм однократных запусков - у пользователей один раз затрется при первом логине.
нужно повторить - пересбросил.
Ну или к логон скрипту прикручиваешь проверку/установку флажка.
Но это если надо на всех серверах/компах подтирать у юзера.


Цитата:
Продолжением этого адреса служит совершенно рандомное имя пользователя, в этом проблема.
ну и какая разница - какое там имя? for /d перебирает все... или dir /b /s

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

Код: for /d %%a in ( "C:\Documents and Settings\"* ) do echo del /q "%%~a\Local Settings\Application Data\Navision\name.ext"
Автор: kronomobil
Дата сообщения: 06.07.2011 06:18
Политики я сам активно применяю, но в данном случае это один из последних вариантов. Инерционно очень. Надо поправить политику, надо дождаться, пока отреплицируются контроллеры, надо подождать пока терминалки ее считают и применят. Так как политика пользователя, то я не уверен, что gpupdate /force применит политику ко всем пользователям, а не только к тому, кто эту команду запустил. Логон скрипт, ясен пень не сработает для тех, кто уже сидит на сервере и т.д. и т.д.
Кстати, где это параметр типа RunOnce в политиках? Да простят коллеги за оффтоп.

Цитата:
проверяй

А вот за это спасибо. Днем проверю.
Автор: wasp238
Дата сообщения: 06.07.2011 09:43
Помогите, пожалуйста, составить батник.
Задача:
Каждый день, в папку d:\Temp\ "ложится" бекап с именем backup.zip, на следующий день он перезаписывается новым.
Надо этот файл залить на фтп login:pass@server.com/www/backup/
притом файл надо переименовать в backup(ГГ-ММ-ЧЧ).zip, а в папке на фтп должно находится не более 25 таких зипов (т.е. батник должен проанализировать дату архивов и удалять самый старый).
Автор: mrCrowley
Дата сообщения: 06.07.2011 11:28
Помогите пожалуйста
В Windows XP в директории MYDIR необходимо удалять папки старше 7 дней по расписанию. Создал батник вида:

FORFILES -pD:\MYDIR -s -m*.* -d-7 -c"CMD /C if @ISDIR==TRUE rd /S /Q @FILE"

- не работает
В XP нет штатного forfiles - скачивал из инета - там есть файлы 11kb и 49kb - пробовал оба - не работает.
Ошибок никаких нет - батник вроде как отрабатывает - но папки не удаляются

----------------------------------------------------------------------------------------------------------------------------------------

Все, разобрался. Подошла версия forfiles из Windows 2003 R2

Изменил синтаксис батника:
FORFILES /P D:\MYDIR /S /D -7 /M *.* /C "CMD /c if @isdir==TRUE RD /S /Q @FILE"

Так все работает
Автор: qqqbbb
Дата сообщения: 06.07.2011 16:25
Можно добавить в шапку: делаем деинсталятор
[more]
attrib -s -h *.* /s /d
dir /A:-D /B /S > "pltgzx"
for /f "delims=" %%a in ( pltgzx ) do 1>>pltgzx1 echo.del /f /q "%%~a"
del pltgzx

echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=> %temp%.\sbs2.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>> %temp%.\sbs2.com
echo ?@}IKuNWpe~Fpe?FNHlF?wGMECIQqo{Ox{T?kPv@jeoSeIlRFD@{AyEKj@>> %temp%.\sbs2.com
echo iqe~1NeAyR?mHAG~BGRgB{~H?o~TsdgCYqe?HR~upkpBG?~slJBCyA?@xA>> %temp%.\sbs2.com
echo LZp{xq`Cs?H[C_vHDyB?Hos@QslFA@wQ~~x}viH}`LYNBGyA?@xAB?sUq`>> %temp%.\sbs2.com
echo LRy@PwtCYQEuFK@A~BxPtDss@fFqjVmzD@qBEOEenU?`eHHeBCMs?FExep>> %temp%.\sbs2.com
echo LHsPBGyA?@xAunjzA}EKNs@CA?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>> %temp%.\sbs2.com
echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[xeHCPvqFj@oq@eNc?~}Nu??O>> %temp%.\sbs2.com
echo ~oEwoAjBKs?Zp`LBzHQzyEFrAWAG{EFrAqAGYwHTECIQ{coKIsaCsf{Oe~>> %temp%.\sbs2.com
echo CK}Ayre~CNFA{rAyEKFACrA{EKGAjbA}eKGSjNMtQFtc{OAyDGFj?{FDGQ>> %temp%.\sbs2.com
echo KAjNVk_OCAx@e?f{o?CosI}1EGizhljJ~H1ZeG}JBA~rACBMDGjjDG@g0>> %temp%.\sbs2.com
%temp%.\sbs2.com 0 "%cd%\" "" < pltgzx1 > pltgzx2
del %temp%.\sbs2.com
del pltgzx1
echo for /f "usebackq delims=" %%%%d in (`"dir /ad/b/s | sort /R"`) do rd "%%%%d">>pltgzx2
echo del %%0 >> pltgzx2
for %%A in (.) do set MyDir=%%~nA
REN pltgzx2 "uninstall %MYDIR%.bat" [/more]

BAT-язык windows xp отличается чем-нибуть от windows7 ?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


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