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

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

Автор: Maza Faka
Дата сообщения: 19.03.2007 16:30
ssnvit

Цитата:
Постановка задачи: источник - папки test1, test2, .... testn. В этих папках размещены файлы job1.txt,job2.txt,....jobm.txt. Необходимо скопировать папки test1 и т.д. в другое место на разделе диска с теми же названиями папок, но исключив из копирования те файлы *.txt, которые уже имеются в папках назначения. Те из файлов *.txt, имен которых нет в папках назначения, должны быть скопированы.


Вот батник, число в строке "Set number=10" означает кол-во каталогов, измени на нужное тебе:


Код:
Set number=10
For /L %%i in (1,1,%number%) do Xcopy C:\test%%i D:\test%%i /s /e /d
Автор: MegaSin
Дата сообщения: 19.03.2007 18:07

Цитата:
echo %*

а если я передаю несколько аргументов? как быть?
в идеале у меня это выглядит так
call :xz "%mdquery% -e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"" "init"
т.е передаётся запрос который нужно выполнить, и на каком этапе он произошол..
это для системы логирования
Автор: igor_andreev
Дата сообщения: 19.03.2007 18:50

Цитата:
а если я передаю несколько аргументов? как быть?

Да как хошь можно. Разделить аргументы знаком, которого в них нет, слешем например.

call :xz %mdquery% -e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"/init
pause & goto :eof

:xz
for /f "tokens=1,2 delims=/" %%a in ('echo %*') do (set first=%%a&set second=%%b)
echo first argument: %first%
echo second argument: %second%

Или enabledelayedexpansion использовать, чтоб не вызывать никаких меток. Решений много может быть.
Автор: MegaSin
Дата сообщения: 19.03.2007 19:07
igor_andreev
Большое спасибо!
просто батник на 1700 строк это слишком, вот решил сделать поменьше, убрать лишнее
Автор: mamykin
Дата сообщения: 19.03.2007 19:23
что-то не получается так ни хрена. Надо по-другому
Автор: stegmatik
Дата сообщения: 20.03.2007 01:03
помогите плиз.. из папки OUT в папку IN нада скопировать файлы с маской *.* вообщем все, но как сделать, чтоб повторяющиеся файлы(в папку OUT они постоянно поступают(файлы с одинаковыми именами)) перемещались в папку COPY ??
Автор: Elroir
Дата сообщения: 20.03.2007 01:18
stegmatik

Код:
@echo off
for %%a in (out\*.*) do (
if not exist "in\%%~nxa" (
copy /y "%%a" in\ >nul
) else (
move /y "%%a" copy\ >nul
)
)
Автор: stegmatik
Дата сообщения: 20.03.2007 08:14
работает ,пасиба!!!!
Автор: JonyRico
Дата сообщения: 20.03.2007 12:27
ребят, очень уважаю вас как людей, разбирающихся в командой строке

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

как написать батник, чтобы он поверял все подпапки текущей папки и при наличии таковых файлов - удалял их?

чобы было проще, о надо удалить во всех подпапках файл ... forexample.doc

заранее Вам спасибо

P.S. 68 страниц не осилил....
Автор: KapralBel
Дата сообщения: 20.03.2007 12:34
JonyRico
del /q /s /f forexample.doc
Автор: JohnRD
Дата сообщения: 20.03.2007 17:05
Elroir код работает
1000 строк за 45 минут сделал
спасибо огромное

если Вы не против еще задачка

есть файл
1.xml

Код:
<?xml version="1.0"?>
<mcs>
.......
             <internal list_of_libraries="ikeyOLD.dll, wbproxy.dll">
.......
Автор: KapralBel
Дата сообщения: 20.03.2007 17:16
JohnRD
В шапке есть утилита GSar Набор GNU утилит для win32
gsar -swbproxy.dll -rikeyOLD.dll,wbproxy.dll Source.txt Target.txt
Автор: JohnRD
Дата сообщения: 20.03.2007 17:47
KapralBel
заменить я смогу проблема в разных вариантах правой части
вот правильно условия замены написать, я еще не силен..

вот если так правильно мыслю ?

Код:
for /f "tokens=1,2 delims==" %%a in (1.xml) do if %%a=="<internal list_of_libraries" set "right_parts=%%b"
type 1.xml | find "msproxy.dll" && goto :EOF
type 1.xml | find "ikeyOLD.dll" && goto OLD
type 1.xml | find "ikeyLD.dll" && goto LD

LD
gsar -s"%right_parts%" -r""msproxy.dll, ikeyOLD.dll, wbproxy.dll">" -F >2.xml

:LD
gsar -s"%right_parts%" -r""msproxy.dll, ikeyLD.dll, wbproxy.dll">" -F >2.xml
Автор: KapralBel
Дата сообщения: 20.03.2007 17:52
JohnRD
Вариантов конечное и небольшое число?
Вот и перечисли их все последовательно
Автор: qEraser
Дата сообщения: 20.03.2007 18:14
Приветствую всех.

Возможно ли сделать чтобы батник удалял все содержимое какого-либо диска, папки кроме указанных (файлов. папок)?
Автор: KapralBel
Дата сообщения: 20.03.2007 18:22
qEraser
Зачем дублируешь темы?
Автор: JohnRD
Дата сообщения: 20.03.2007 19:30
KapralBel


<internal list_of_libraries="ikeyOLD.dll, wbproxy.dll">


Код:
for /f "tokens=1,2 delims==" %%a in (1.xml) do if "%%a"=="<internal list_of_libraries" set "right_parts=%%b"
Автор: igor_andreev
Дата сообщения: 20.03.2007 20:07
JohnRD

Цитата:
cmd не работает с этими < > символами как быть ?

Ответ сам-собой напрашивается - ну и не трогай их, символы эти...

Код:
gsar -s"internal list_of_libraries=\"ikeyLD.dll, wbproxy.dll\"" -r"internal list_of_libraries=\"msproxy.dll, ikeyLD.dll, wbproxy.dll\"" 1.xml 2.xml
gsar -s"internal list_of_libraries=\"ikeyOLD.dll, wbproxy.dll\"" -r"internal list_of_libraries=\"msproxy.dll, ikeyOLD.dll, wbproxy.dll\"" 2.xml 3.xml
Автор: Wise_Kaa
Дата сообщения: 20.03.2007 21:02
Вопрос такой: как назначить переменной текущий ip-адрес машины, так сказать с наименьшими затратами? мне на ум приходит только просмотр с помощью ipconfig, а дальше уже анализ полученной информации. Но вот анализ, как упростить? Или может есть какая-то пременная?
Прошу прощения, если такой вопрос уже был, я просто его не нашел на форуме.
P.S. вообще задача стоит следующая: есть сеть, в ней 254 машины. Сеть вида 192.168.1.0, надо сделать 192.168.2.0, т.е. третий октет должен смениться с 1 на 2. Как это проще всего сделать?
Автор: MegaSin
Дата сообщения: 20.03.2007 22:47
появилась неприятная проблема....
конструкция:

Код:
@echo off
set mdquery=123 -h 12 --port=32 -u12 --password=32
call :xz %mdquery% -e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"/init
pause & goto :eof

:xz
echo %*
for /f "tokens=1,2,3 delims=/" %%a in ('echo %*') do (set first=%%a&set second=%%b&set test=%%c)
echo %first%
echo %second%
if DEFINED test echo %test%
:eof
Автор: Smitis
Дата сообщения: 20.03.2007 22:52
JohnRD

Цитата:
cmd не работает с этими < > символами как быть ?

Ставить перед ними символ ^
Автор: Elroir
Дата сообщения: 20.03.2007 23:01
Wise_Kaa

Цитата:
как назначить переменной текущий ip-адрес машины, так сказать с наименьшими затратами?


Код:
for /f "usebackq tokens=2* delims=-.: " %%a in (`"ipconfig | find "IP""`) do set "net=%%b"
Автор: igor_andreev
Дата сообщения: 20.03.2007 23:16
MegaSin

Цитата:
потерялись все знаки равно

Ну и решай в лоб, чтоб с заменами не морочиться - возьми, да и перенеси set mdquery= в метку :xz, кому она там у тебя в начале батника нужна?


Код:
@echo off

call :xz -e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"/init
pause & goto :eof

:xz
set mdquery=123 -h 12 --port=32 -u12 --password=32
for /f "tokens=1,2,3 delims=/" %%a in ('echo %*') do (set first=%%a&set second=%%b&set test=%%c)
echo %mdquery%
echo %first%
echo %second%
if DEFINED test echo %test%
:eof
Автор: MegaSin
Дата сообщения: 21.03.2007 00:01
igor_andreev
Цитата:
P.S. Знать бы еще, что-ты такое хитрое пишешь, точнее бы можно было подсказать...

Пишу (точнее уже написал) интерфейс для работы с двумя базами данных mysql
Проблема в том.. то что я и в запросе могу послать знак равенства...
вроде такого
call :sqlquery %mserver% -D %msdb% -e "SELECT `name` FROM `character` WHERE account = '%%i'"/Search/2.txt
А если внутри запроса пропадёт знак... мускул выругается и есс-но ничего не возвратит
странно что он выкидывает знаки.... только что обнаружил что и запятая тоже выкидывается
ЗЫ: если нужно могу выложить всю программу
Автор: igor_andreev
Дата сообщения: 21.03.2007 00:27
MegaSin

Цитата:
Проблема в том.. то что я и в запросе могу послать знак равенства...

Вообще, самое оптимальное, чтоб уменьшить размер батника и увеличить скорость работы - уменьшить количество всяких call и goto(да кажется в любом языке программирования), пользоваться по мере возможности enabledelayedexpansion

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

Ой, в mysql я точно ни ухом, ни рылом, ни в зуб ногой, ни бум-бум

Автор: MegaSin
Дата сообщения: 21.03.2007 00:38
ну т.е проблему никак не решить?
Автор: igor_andreev
Дата сообщения: 21.03.2007 01:25
Да все можно решить, если рогом упереться и на принцип пойти Хотя я бы уже давно этот батник начал на vbscript переделывать. Сделай call c %mdquery% в кавычках и отдели ее тоже слешем. А в метке :xz убери первую и последнюю букву, кавычки то есть и уберутся(set first=%first:~1,-1%)


Код:
@echo off
set mdquery=123 -h 12 --port=32 -u12 --password=32
call :xz "%mdquery%"/-e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"/init
pause & goto :eof

:xz
for /f "tokens=1,2,3,4 delims=/" %%a in ('echo %*') do (set first=%%a&set second=%%b&set third=%%c&set test=%%d)

set first=%first:~1,-1%

echo %first%
echo %second%
echo %third%
if DEFINED test echo %test%
:eof
Автор: MegaSin
Дата сообщения: 21.03.2007 01:44
igor_andreev
спс, уже сам переделал.... немножко по другому
А запятая выкидывается если не "закавычить" строку
Итог - уменьший на 400 строк батничек свой!
Всем спасибо
Автор: Tipulatoid
Дата сообщения: 21.03.2007 07:30
qEraser
Возможно, только конкретизируй задачу. Т.е. в виде конкретного примера опиши проблему.
Автор: KapralBel
Дата сообщения: 21.03.2007 09:56
JohnRD
Ставь ^ перед <

Код: for /f "tokens=1,2 delims==" %%a in (1.xml) do if "%%a"=="^<internal list_of_libraries" set "right_parts=%%b"

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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