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

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

Автор: KfarYm
Дата сообщения: 08.12.2008 20:22

Цитата:
Я еще не видел деинсталлятора, который убивает ту папку из которой запущен.

без комментария…
Автор: 01MDM
Дата сообщения: 09.12.2008 06:46
KfarYm

Цитата:
без комментария…


??

Открой папку с программой и запусти uninstall.exe (или как там его) - папка останется.
Автор: Karrakurt
Дата сообщения: 09.12.2008 09:48
Приветствую всех скриптмейкеров, скриптовОдов и скриптОлогов =)
Задача в приведенном ниже скрипте, а вопрос таков: можно ли как-то его оптимизировать? А то он уже за 3Мб перевалил. Суть скрипта, оптимизация настроек Виндовс ХП через реестр, как вы уже догадались.
Благодарю заранее.

Код: @ECHO off

:START
ECHO.
ECHO.
ECHO ---===******* MENU *******===---
ECHO 1. Set changes
ECHO 2. Restore changes
ECHO 3. EXIT
Set /p Choise=Make a choise:

SET t000="000 1" "001 1" "002 1"
SET t001="000 2" "001 2" "002 2"

IF %Choise%==1 (
    FOR %%i IN (%t000%) DO CALL :%%~i
    PAUSE
    CLS
    GOTO :START
    )

IF %Choise%==2 (
    FOR %%i IN (%t001%) DO CALL :%%~i
    PAUSE
    CLS
    GOTO :START
    )
    
IF %Choise%==3 (GOTO :EXIT) ELSE (CLS&ECHO.&ECHO.&ECHO Wrong choise...&ECHO.&GOTO :START)

:EXIT
EXIT

:000
IF %1==1 REG ADD "HKLM\SOFTWARE\.test_000" /v "test_000" /t REG_SZ /d "Changed" /f
IF %1==2 REG ADD "HKLM\SOFTWARE\.test_000" /v "test_000" /t REG_SZ /d "Restored" /f
GOTO :EOF

:001
IF %1==1 REG ADD "HKLM\SOFTWARE\.test_001" /v "test_000" /t REG_SZ /d "Changed" /f
IF %1==2 REG ADD "HKLM\SOFTWARE\.test_001" /v "test_000" /t REG_SZ /d "Restored" /f
GOTO :EOF

:002
IF %1==1 (
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_000" /t REG_SZ /d "Changed" /f
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_001" /t REG_SZ /d "Changed" /f
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_002" /t REG_SZ /d "Changed" /f
        )
IF %1==2 (
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_000" /t REG_SZ /d "Restored" /f
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_001" /t REG_SZ /d "Restored" /f
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_002" /t REG_SZ /d "Restored" /f
        )
GOTO :EOF
Автор: AvgustiN
Дата сообщения: 09.12.2008 11:09
Здравствуйте! Помогите разобраться с такой вот проблемкой...

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

ОС: WIn XP Pro.

имеется вот такой вот батничек:

Код:
title Load program... Please wait...
@echo off
net use w: \\192.168.x.x\a1 > nul
echo "1. Disk connected"
cd d:\
d:
md 123
cd d:\123
md Program
copy w:\Dekanat.exe d:\123\Program\Prog.exe > nul
echo "2. File updated"
start d:\123\Program\Prog.exe > nul
echo "3. Run programm"
net use w: /delete > nul
echo "4. Disk disconnected"
exit
Автор: NIKZZZZ
Дата сообщения: 09.12.2008 11:55
Karrakurt

Цитата:
можно ли как-то его оптимизировать?

Как я понял, оптимизация должна исключить If'ы.


Код: @ECHO off
cls
:START
ECHO.
ECHO.
ECHO ---===******* MENU *******===---
ECHO 1. Set changes
ECHO 2. Restore changes
ECHO 3. EXIT

Set /p Choise=Make a choise:
IF %Choise%==3 GOTO :Eof
IF %Choise% GTR 3 (CLS&ECHO.&ECHO.&ECHO Wrong choise...&ECHO.&GOTO :START)
IF %Choise% LSS 1 (CLS&ECHO.&ECHO.&ECHO Wrong choise...&ECHO.&GOTO :START)

SET t1="000" "001" "002"
SET t2="003" "004" "005"

Set t=t%Choise%
setlocal enabledelayedexpansion
FOR %%i IN (!%t%!) DO CALL :%%~i
PAUSE
CLS
goto :start

:000
REG ADD "HKLM\SOFTWARE\.test_000" /v "test_000" /t REG_SZ /d "Changed" /f
GOTO :EOF

:001
REG ADD "HKLM\SOFTWARE\.test_001" /v "test_000" /t REG_SZ /d "Changed" /f
GOTO :EOF

:002
REG ADD "HKLM\SOFTWARE\.test_002" /v "test_000" /t REG_SZ /d "Changed" /f
REG ADD "HKLM\SOFTWARE\.test_002" /v "test_001" /t REG_SZ /d "Changed" /f
REG ADD "HKLM\SOFTWARE\.test_002" /v "test_002" /t REG_SZ /d "Changed" /f
GOTO :EOF

:003
REG ADD "HKLM\SOFTWARE\.test_000" /v "test_000" /t REG_SZ /d "Restored" /f
GOTO :EOF

:004
REG ADD "HKLM\SOFTWARE\.test_001" /v "test_000" /t REG_SZ /d "Restored" /f
GOTO :EOF

:005
REG ADD "HKLM\SOFTWARE\.test_002" /v "test_000" /t REG_SZ /d "Restored" /f
REG ADD "HKLM\SOFTWARE\.test_002" /v "test_001" /t REG_SZ /d "Restored" /f
REG ADD "HKLM\SOFTWARE\.test_002" /v "test_002" /t REG_SZ /d "Restored" /f
GOTO :EOF
Автор: Karrakurt
Дата сообщения: 09.12.2008 13:03
2 NIKZZZZ:
Здорово!
Правда в оригинале подменю есть, но попробую с вашим вариантом покопаться. Если что, снова приду =)
Благодарю.
Автор: Jiry
Дата сообщения: 10.12.2008 14:35
Привет всем.

Вот не могу казалось бы совсем простенькую задачу решить.
Есть две директории. Нужно из одной перенести файлы в другую, но при обнаружении там файла с совпадающим именем, перенести файл с переименованием.

Подскажите, как такой батник написать.

Заранее спасибо
Автор: GRom V
Дата сообщения: 10.12.2008 14:49
Некоторые компоненты в Vista по умолчанию отключены.
Подскажите......как батником можно установить компонент в Vista???
Автор: 01MDM
Дата сообщения: 10.12.2008 17:04
Jiry


Код:
@echo off
for %%i in (SourceDir\*) do (
if exist "DestDir\%%~nxi" (
mv "%%i" "DestDir\~%%~nxi"
) else (
mv "%%i" "DestDir"
)
)
Автор: Jiry
Дата сообщения: 10.12.2008 18:29
01MDM

Спасибо, но тут нет проверки, существования файла ~%%~nxi.
Он тоже может там уже иметься, и в результате будет перезаписан.
Как бы её сюда добавить?
Автор: 01MDM
Дата сообщения: 10.12.2008 21:07
Jiry

Тогда такой вариант:

Код:
@echo off
setlocal

for %%i in ("SourceDir\*") do call:mv "%%~nxi"
goto:eof

:mv
set "file=%~1"

:check
if exist "DestDir\%file%" (set "file=~%file%" && goto:check)
mv "SourceDir\%~1" "DestDir\%file%"
Автор: QNDD83
Дата сообщения: 11.12.2008 11:40
king_stiven

Если можно давайте по порядку.

Захожу в рабочий каталог
cd d:/spb/tmp

Читаю список его подкаталогов на выходе команды dir
for /f ("tokens=*") %%i in (dir /b) do (

Далее перехожу в i-ый каталог
cd %%i

Читаю список его подкаталогов на выходе команды dir
for /f ("tokens=*") %%j in (dir /b /a:d) do (

Проверяю есть ли в текущем каталоге нужный файл и объявляю его переменной
if exist *.txt set FEL=*.pro ??? вот здесь как ???
)
)

И мне понадобиться записать путь к этому файлу в текстовый. Как это сделать с переменной?



Добавлено:
king_stiven
Предыдущее сообщение от perzend, какие то косяки с авторизацией просто. Сорри.
Автор: king_stiven
Дата сообщения: 11.12.2008 12:41
QNDD83

Код: @echo off
FOR /R "d:/spb/tmp" %%k IN (.) DO (
if exist "%%k\*.txt" (
set peremennay=%%k
call :tyu
)
)
goto :eof
:tyu
for /f "tokens=*" %%c in ('dir "%peremennay%" /b /a:d') do goto :yui
echo %peremennay%>>1.txt
:yui
Автор: Jiry
Дата сообщения: 11.12.2008 12:47
01MDM

Большое спасибо за помощь, такой вариант подходит.
Автор: zzxx1488
Дата сообщения: 12.12.2008 04:10
никак не получается заставить sed работать с wildcard, или же я неправильно делаю
нужно в файле заменить все строки с base=E:\ на base=C:\ при том, что неизвестно E
пытаюсь сделать так:
type 1.txt|sed "s/=*:/=C:/g"
1.txt:
base=E:\123\dd1.txt
base=E:\123\dd2.txt
base=E:\123\dd3.txt
base=E:\123\dd4.txt

на выходе имею такое: base=E=С:\123\dd1.txt , а должно быть С:\123\dd1.txt
sed из набора UnxTools (взял с sourceforge.net/projects/unxutils)
Автор: soulthiefer
Дата сообщения: 12.12.2008 09:17
Помогите пожалуйста !
оч нужен батник который бы удалял все файлы с определенным расширением например *.txt в указанной папке и всех ее подпапках !
нужно чтоб выполнялся автоматически и не требовал никаких подтверждений во время ссвоей работы!
заранее спасибо!!!
Автор: perzend
Дата сообщения: 12.12.2008 10:13
king_stiven
Спасибо! Правда не все пути находит. Я двигался в нужном направлении. Не могу только понять как call работает. Вернее то, что внутри функции.
Вот эта часть.

Цитата:
goto :eof
:tyu
for /f "tokens=*" %%c in ('dir "%peremennay%" /b /a:d') do goto :yui
echo %peremennay%>>1.txt
:yui


goto :eof - нужен для того чтобы работал call. так?

а потом совсем неясно.
for /f "tokens=*" %%c in ('dir "%peremennay%" /b /a:d') do goto :yui
Здесь мы читаем список каталогов в текущем и по кадому пути переходим на метку? Для чего? Как тогда echo %peremennay%>>1.txt выполняется???

Спасибо, что терпите )))
Автор: king_stiven
Дата сообщения: 12.12.2008 11:52
perzend

Цитата:
Есть каталог TMP, содержащий n-ое количество подкатологов, которые содержат k-ое количество подкаталогов ну и т.п. )) В них лежат файлы, например, *.txt. Необходимо найти самый глубоко зарытый файл в каждом подкатологе каталога TMP и перейти в каталог его содержащий.

Если хотите узнать, что делает goto :eof, то в винде есть справка, наберите там goto. Также наберите в комстроке goto /? то же самое и с call. Если никак не разберётесь, ещё раз спросите, расскажу. Также в шапке есть уроки по батфайлам.
команда
FOR /R "d:/spb/tmp" %%k IN (.) DO (
if exist "%%k\*.txt" (
set peremennay=%%k
call :tyu
)
)
последовательно перебирает каталоги в корневой папке d:/spb/tmp, выражая их через переменную %%k. Если в каталоге %%k есть текстовой файл, назначаем %%k как peremennay. Затем идём на метку :tyu. Далее проверяем, есть ли в каталоге %%k он же %peremennay% подкаталоги
for /f "tokens=*" %%c in ('dir "%peremennay%" /b /a:d') do goto :yui
если есть, то перебираем далее до самого глубокого каталога. если нет, то вносим в текст %peremennay%
echo %peremennay%>>1.txt
Должно работать на 100%
можно поменять строчку
echo %peremennay%>>1.txt на
echo %peremennay%\>>1.txt
А вообще то условия задачи нечёткие. Что есть самый глубоко зарытый файл в каждом подкатологе каталога? Я понял, что если в подкаталоге d:/spb/tmp/1/ есть текст. файл. но и в каталоге d:/spb/tmp/1/1/2 тоже есть текст файл, а больше подкаталогов нет, то мы вносим в список d:/spb/tmp/1/1/2 а не d:/spb/tmp/1
Автор: igor_andreev
Дата сообщения: 12.12.2008 12:26
zzxx1488

Код:
type 1.txt | sed -r -e "s/=\w{1}:/=C:/g"
Автор: vtornik12
Дата сообщения: 12.12.2008 14:27
Всем привет !!!

Нужна помощь,

мне нужен bat файл в котором б было следующее

1. Есть папка например c:\InFile куда копируются любого вида файлы
2. Мне нужо что если есть какие нибудь файлы то запускалась программа например ноудпад к примеру , программка делает свои дела и закрывается сама,
3. после этого снова едет дежурство над папкой

при этом я могу сформировать какой нибудь файлик типа End.txt
по которому батник например определит когда ему снова начать следить за папкой на предмет появления файлов


помогите пожалуйста в написании.... батники ни разу не писал и поэтому прошу помощи

в принцепи нужно лишь как определить если в папе какие файлы...

пробовал по разному if exist c:\InFile\ и ставил *.*, !.!, *.*;* - не канает видимо
Автор: king_stiven
Дата сообщения: 12.12.2008 15:31
vtornik12

Цитата:
в принцепи нужно лишь как определить если в папе какие файлы...

В шапке ищи.
Автор: vtornik12
Дата сообщения: 12.12.2008 15:52
не понял
Автор: Elroir
Дата сообщения: 12.12.2008 16:01
soulthiefer

Цитата:
батник который бы удалял все файлы с определенным расширением например *.txt в указанной папке и всех ее подпапках !


Код:
del /s /q c:\temp\*.txt
Автор: vtornik12
Дата сообщения: 12.12.2008 16:03
да нет же, как йдалять скажем отдельно взятые и.т.д. файлы понятно, а как задать маску для абсолютно всех файлов то ?
Автор: Elroir
Дата сообщения: 12.12.2008 16:08
vtornik12

Цитата:
как определить если в папе какие файлы


Код:
dir *.* /a-d>nul 2>&1
if errorlevel 1 (
echo No files) else (
echo Files exist
)
Автор: CryoGen
Дата сообщения: 12.12.2008 16:08
есть у меня пять постоянно устанавлемых програм можно както реализовать установку одним кликом?
а книженция есть по созданию бат файлов?
Автор: Elroir
Дата сообщения: 12.12.2008 16:12
CryoGen

Цитата:
можно както реализовать установку одним кликом?

Можно:

Код:
@echo off
start /wait "" "C:\Install\setup1.exe"
start /wait "" "C:\Install\setup2.exe"
start /wait "" "C:\Install\setup3.exe"
start /wait "" "C:\Install\setup4.exe"
start /wait "" "C:\Install\setup5.exe"
Автор: corsik
Дата сообщения: 12.12.2008 23:30
Господа умные сис. админы и програмеры.
подскажите как написал батник который будет в папке например c:\distr перебирать файлы с расширение .exe и устанавливать с определеным ключем в папке наприме с:\test
Автор: Elroir
Дата сообщения: 13.12.2008 00:00
corsik
Приведи пример, хотя бы на одном экзешнике (строку запуска этого файла).
Автор: AvgustiN
Дата сообщения: 13.12.2008 11:24
М-да уж...

Думал что хоть кто-нить откликнется на мою проблемку или ссылочку даст, где это уже обсуждалось...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: как сохранить сетевые настройки


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