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

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

Автор: ViSiToR
Дата сообщения: 07.03.2007 12:11
winvik

Цитата:
Нужно чтобы он результаты своей работы писал в текстовый файл - что удалено

Можно так:


Код: @echo off
chcp 1251 > nul
For %%i in (*.mp3) Do (
Del "%%i"
If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted >> log.txt) Else (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted >> log.txt)
)
Автор: JohnRD
Дата сообщения: 07.03.2007 12:25
уважаемые гуру

можно ли этот
cmd

Код:
reg add HKLM\SOFTWARE\MDPREI\Cryptography\KeyDevices\KEYFILE /v DLL /t REG_SZ /d C:\WINDOWS\system32\reader\keyfile.dll /f
Автор: igor_andreev
Дата сообщения: 07.03.2007 12:46
JohnRD
2000 поймет, если положишь к нему в PATH файл reg.exe. По умолчанию в Windows 2000 нет такой команды, как REG. Reg.exe для Windows 2000 есть в ресурс ките, но в старой версии reg.exe из W2K Resource Kit синтаксис немного отличается от XP-шной. Посему рекомендую для унификации батников в Winnt\system32 класть файл reg.exe, взятый именно из Windows XP.

Цитата:
поймет ли реестр C:\%SystemRoot%\

Лучше просто %SystemRoot% Должен понять.

Добавлено:
Да кстати, если и не поймет %systemroot%(я не знаю просто, что эт за ключ, MDPREI) - невелика беда, всегда можно на месте рег-файл написать и запустить.

Код:
@ECHO OFF

REM Удваиваем в пути C:\Windows или E:\Winnt или что там, обратный слеш
SET "WINFOLDER=%SYSTEMROOT%"
SET "WINFOLDER=%WINFOLDER:\=\\%"

ECHO REGEDIT4>TMP.REG
ECHO.>>TMP.REG
ECHO [HKEY_LOCAL_MACHINE\SOFTWARE\MDPREI\Cryptography\KeyDevices\KEYFILE]>>TMP.REG
ECHO "DLL"="%WINFOLDER%\\reader\\keyfile.dll">>TMP.REG
ECHO.>>TMP.REG

REGEDIT /S TMP.REG
DEL TMP.REG
Автор: winvik
Дата сообщения: 07.03.2007 13:21
ViSiToR
Большое спасибо за помощь, есть еще один вопрос: команду del я хочу использовать с ключом /s чтобы скрипт чистил и вложенные папки...
Изменила четвертую строчку вашего скрипта:
Del /s "%%i"
но подкаталоги не чистит... что неправильно?
Автор: JohnRD
Дата сообщения: 07.03.2007 13:22
igor_andreev
я вобщем так и делал - клал в папку с пакетом reg.exe от XP
но столкнулся с таким: есть какое то ограничение на длину толи самой команды
толи значения

Код:
reg add "HKLM\SOFTWARE\LANIT\LanDocs\2.0\CA sertificates\Certificates\080D9D073238BD2E53F6E8484AD8221251D18F2C" /v Blob /t REG_BINARY /d 000000...0000 /f
Автор: igor_andreev
Дата сообщения: 07.03.2007 13:49
winvik
Чего голову себе забиваешь? Сам же сказал, команда дир - работает.
dir /b /s>log
del /f /s /q *

И кстати просто del /f /s /q *>log тоже работает

JohnRD

Цитата:
есть какое то ограничение на длину толи самой команды
толи значения

Ну да, есть такое, в NT/2000 - 2047 символов, XP/2003 - 8191 символ. У тебя в W2K вместе с reg add хоткей_локал_машына... + ключ 1926 символов - видать больше 2047 получается. Пиши тогда регфайл на месте

Код:
ECHO."Твой ключ"=hex:a4,00,00,00,03,00,00,00,35,35,32,37,34,2d,4f,45,4d,2d,\>>TMP.REG
ECHO. 34,34,2d,36,32,39,34,38,00,2d,00,00,00,41,32,32,2d,30,30,30,\>>TMP.REG
... и т.д.
Автор: JohnRD
Дата сообщения: 07.03.2007 15:27

Код: igor_andreev
Автор: igor_andreev
Дата сообщения: 07.03.2007 16:47
JohnRD

Цитата:
если пользоваться reg.exe
достаточно это SET "WINFOLDER=%SYSTEMROOT%"
Если пользоваться reg.exe, то это вообще не надо.
Цитата:
(но не могу понять эту переменную без коментариев)
А я ж написал коммент, это мы удваиваем обратный слеш, для правильного синтаксиса *.reg.
Код:
@ECHO OFF

REM придумали переменную WINFOLDER и присвоили ей значение
REM текущей папки Windows
SET "WINFOLDER=%SYSTEMROOT%"
ECHO Windows dir - %WINFOLDER% & PAUSE

REM взяли, да и удвоили обратный слеш
SET "WINFOLDER=%WINFOLDER:\=\\%"
ECHO Now Windows dir - %WINFOLDER% & PAUSE
Автор: Nekt
Дата сообщения: 07.03.2007 20:01
Народ а вот тута у меня net share IPC$ /delete тока когда пускаю у меня пишет доступ отказано. Как грузить это через профиль? А, ещё как пускать прогу через батник, поискал но внятно нечего не нашел.
Автор: Smitis
Дата сообщения: 07.03.2007 22:44
Nekt

Цитата:
Народ а вот тута у меня net share IPC$ /delete тока когда пускаю у меня пишет доступ отказано. Как грузить это через профиль?

Права соотвествующие надо иметь

Цитата:
А, ещё как пускать прогу через батник, поискал но внятно нечего не нашел.

Ну, например, написать полный путь к проге, типа:
Ц:\папка_проги\это_прога.exe
Автор: Nagual
Дата сообщения: 07.03.2007 23:21
Smitis
твой ответ вызовит еще большую кучу вопросов
Nekt
start "" /w "Ц:\папка_проги\это_прога.exe"
имхо более правильный ответ, вообще именно этот вопрос поднимался уже неоднократно, такое ощущение, что тебе лень было читать ветку
igor_andreev

Цитата:
CreateObject("WScript.Shell").Run("""C:\Program Files\QQQ\1.exe""")&" start",0,false

красавец, где же ты раньше был?
Автор: ViSiToR
Дата сообщения: 08.03.2007 03:28
winvik

Цитата:
но подкаталоги не чистит... что неправильно?

В моём примере переменная %%i принимает значение для всех файлов с расширением *.mp3 текущего каталога... хотя Del /s будет чистить, просто в лог эта чистка не попадает

Чтобы использовать подобное и для подкаталогов (чтобы это учитывалось при записи в лог), нужно установить ключь /R у команды For, и задать текущий каталог для удаления. А также и каталог для лог файла, ведь если оставить его запись в текущий каталог (не указывая пути к лог файлу), то он попадает под удаление, и постоянно будет писаться заного...

Вот пример для удаления файлов с определённым расширением в указанном каталоге включая во всех подкаталогах, и ведения лога для процесса удаления (удалён/не удалён):


Код: @echo off
chcp 1251 > nul
Set LogPath=C:\Log.txt
Set DelPath=C:\Test
Set Ext=*.mp3
CD "%DelPath%"
For /R %%i In (%Ext%) Do (
Del "%%i"
If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted>> "%LogPath%") Else (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%")
)
Автор: FXPELIVE
Дата сообщения: 08.03.2007 06:26
Всем

Вопрос №1
Как кодировать/раскодировать в HEX через командную строку ?
Вопрос №2
Как средствами командной строки в Windows XP читать из файла:

data.cfg
--------
full=1
trial=0
--------

преобразовать в переменные:
%full% со значением 1
%trial% со значением 0

А также как записывать переменные в файл?

Как можно защитить содержимое пакетного файла от любопытных глаз с сохранением работоспособности?
Автор: ViSiToR
Дата сообщения: 08.03.2007 07:10
FXPELIVE

Цитата:
Как средствами командной строки в Windows XP читать из файла:

Я как то давно приводил пример для чтения из .ini файлов, но уже не могу найти где, поэтому привожу пример ещё раз (наверно уже подругому ):


Код: Set FileToRead=data.cfg
Set Key=full
For /F "usebackq delims=" %%i In (`Find /I "%Key%=" %FileToRead%`) Do Set Value=%%i
Echo %Value:~+5%
Автор: FXPELIVE
Дата сообщения: 08.03.2007 07:45
ViSiToR


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

Если значение то просто так: Echo %Env% > File.txt
Если как есть, то нужно удваивать знаки процента: Echo %%Env%% > File.txt


Нет, например была переменная %data% со значением 1 а её нужно записать в файл config.cfg так:
data=1


Цитата:
Или использовать компилятор для батников.

Спасибо, попробую
Автор: Maza Faka
Дата сообщения: 08.03.2007 08:03
winvik

Если нужно удалить только файлы *.mp3 и записать в лог какие файлы были удалены, то можно так:


Код:
@Echo off
Chcp 1251
For /r C:\Test %%i in (*.mp3) do (
Echo "%%i" >> D:\Logs\Log.txt
Del /q "%%i")
Автор: ViSiToR
Дата сообщения: 08.03.2007 09:02
FXPELIVE

Цитата:
нужно записать в файл config.cfg так:
data=1

Нет, одними средствами батника записывать значение в середину файла невозможно (может и возможно, но это всё муторно будет, нужно будет весь файл построчно перечитывать и перезаписывать).


Maza Faka


Цитата:
Если нужно удалить только файлы *.mp3 и записать в лог какие файлы были удалены, то можно так:

И чем это лучше моего примера?


Цитата:
@Echo off
Set data=1
Echo data=%data% >> config.cfg

Я так понял имеется в виду запись как значения для ключа.

Добавлено:
FXPELIVE
Посмотри в шапке есть пример для замены текста в файле (в Работа с текстом, датой, и файлами), можно таким образом заменять data=1 на data=%data%.
Автор: FXPELIVE
Дата сообщения: 08.03.2007 09:31
ViSiToR

Цитата:
Цитата:
@Echo off
Set data=1
Echo data=%data% >> config.cfg

В принципе идея...

Кто знает как узнать серийный номер компакт-диска и это значение сохранить в переменной %cdnum%
Автор: Tipulatoid
Дата сообщения: 08.03.2007 13:12
Visitor

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

Возможно, и именно так как вы сказали - построчным переписыванием и перезаписью. В принципе, имхо, ничего муторного здесь нет. на всякий лучай приведу пример кода записи в, скажем, 4-ую строку config.cfg:

Код: @echo off
setlocal enabledelayedexpansion

set line=4

del /q tmp_file 2>nul
set counter=1
for /f "tokens=*" %%a in (config.cfg) do (
if !counter!==!line! (echo %нужная переменная%>>tmp_file
) else (
echo %%a>>tmp_file)
set /a counter=!counter!+1)

del /q config.cfg 2>nul
ren tmp_file config.cfg
Автор: ViSiToR
Дата сообщения: 08.03.2007 13:29
Tipulatoid

Цитата:
имхо, ничего муторного здесь нет

Я имел в виду, если файл большой, и строк много, и записывать нужно с учётом замены существующей строки, ведь как мне показалось, требуется запись в файл обладающий структурой .ini файла (Секция, ключи, значения).
Автор: Maza Faka
Дата сообщения: 08.03.2007 15:16
ViSiToR

Цитата:
И чем это лучше моего примера


Да вроде бы попроще и покороче
Автор: Levitant
Дата сообщения: 08.03.2007 17:05
Народ подскажите пожалуйста, как должен выглядеть батник, который ищет в определенном файле определенную строку и заменяет её. Причем имя файла менять не надо.

Вот по этому примеру приходится заменять сохранять фаил с другим именем.

Код:
@echo off
:: Create the assembler program, by Herbert Kleebauer
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
:: Use the program
%temp%.\sbs2.com 0 "2456" "3333" < "%appdata%\Opera\Opera\profile\opera6.ini" > "%appdata%\Opera\Opera\profile\for_opera\opera63333.ini"
:: Delete the program
del %temp%.\sbs2.com
Автор: ViSiToR
Дата сообщения: 08.03.2007 17:10
Levitant

Цитата:
по этому примеру приходится заменять сохранять фаил с другим именем

Зачем? можно тот же выходной файл подставить:


Код: @echo off
:: Create the assembler program, by Herbert Kleebauer
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
:: Use the program
%temp%.\sbs2.com 0 "2456" "3333" < "%appdata%\Opera\Opera\profile\opera6.ini" > "%appdata%\Opera\Opera\profile\opera6.ini"
:: Delete the program
del %temp%.\sbs2.com
Автор: Smitis
Дата сообщения: 09.03.2007 06:21
Nagual

Цитата:
твой ответ вызовит еще большую кучу вопросов

Конечно вызовет.

Цитата:
имхо более правильный ответ

Не уверен. У меня более общий. А тебе придётся объяснять ещё значение параметров команды start, объяснять, зачем нужна эта команда и т.п.
А ведь ещё можно не указывать расширение исполняемого файла, если оно есть в переменноё pathext. И не указывать путь, если исполняемый файл лежит в текущей папке или в папке, прописаной в path. И т.д.
Автор: Maza Faka
Дата сообщения: 09.03.2007 07:35
Такая вот задачка (уже голову сломал ): Есть два раздела HDD, диск "C" и "D", на обоих дисках есть каталоги "Program" с вложеными каталогами, в каждом вложеном каталоге находится файл "Set.cfg", задача: как скопировать файлы "Set.cfg" из всех вложенных каталогов с диска "C" во все вложеные каталоги диска "D", то есть файл "Set.cfg" из "C:\Program\Old" в "D:\Program\Old" из "С:\Program\New" в "D:\Program\New", при помощи батника, конечно.
Автор: Smitis
Дата сообщения: 09.03.2007 08:30
Maza Faka
xcopy
Примерно так, сделав C:\Program\Old текущим:
xcopy /s set*.cfg D:\Program\Old
Маска нужна (set*.cfg), если в текущем каталоге нет нужного файла (будет выдано сообщение, что файл не найден).
Автор: s800
Дата сообщения: 09.03.2007 12:00
Уважаемые знатоки работы с bat строкой, см. мой топик выше http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=920, как запустить bat файла на др.машине сети? решения пока нет?!
Автор: Maza Faka
Дата сообщения: 09.03.2007 12:23
ViSiToR

Цитата:
Что может быть проще, чем задать заранее переменные, и подстьтавлять под них нужные значения? а на счёт короче, это да, желательно иногда короче, но в твоём примере, будут в лог попадать ВСЕ файлы из цикла, вне зависимости от того, был ли удалён файл, или нет - зачем тогда лог нужен


Изменить расширение "mp3" на другое, скажем "txt", вроде тоже не сложно
А в лог будут попадать именно удалённые файлы, а не все подряд, мы ведь удаляем по расширению, соответсвенно, если удаляем *.mp3, то в лог будет записано примерно так: ""C:\Test\musik.mp3" и т.д.

Добавлено:
Smitis
Блин! Оказывается так просто, спасибо, здорово выручил!
Автор: ViSiToR
Дата сообщения: 09.03.2007 13:17
Maza Faka

Цитата:
в лог будут попадать именно удалённые файлы, а не все подряд, мы ведь удаляем по расширению, соответсвенно, если удаляем *.mp3, то в лог будет записано примерно так: ""C:\Test\musik.mp3" и т.д.

Нет, в лог попадают все файлы из цикла, проверь, убери строку с удалением...

В этом примере нет проверки на то, удалился ли файл или нет, ведь если файл не будет удалён, как из лога будет удалена строка этого файла? ведь сначала идёт запись в лог, а потом удаление, а проверки нет .
Автор: yurkesha
Дата сообщения: 09.03.2007 13:37
Maza Faka - небольшое уточнение - удаленный файл и тот файл который мы пытаемся удалить командой DEL это вообще говоря две большие разницы... Файл может быть блокирован, иметь атрибут read-only (ключик-то /F ты опустил - видимо в целях краткости ) и т.д. и т.п. Вобщем если это все учесть и дать минимальный сервис - то как раз и выйдем по длине и сложности на пример от ViSiToR...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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