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

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

Автор: saym101
Дата сообщения: 03.11.2009 12:07
Maqentaer
спасибо. то что надо.
Автор: mugil_cephalus
Дата сообщения: 03.11.2009 13:08
king_stiven

Цитата:
передача аргументов через call:
...
call :_1 "%%A"
goto :eof

:_1
if /i "%~1" equ "A:\" команда
...
либо
...call :_1 %%A
goto :eof

:_1
if /i "%1" equ "A:\" команда
...


я про это раньше и писал:

Цитата:
имхо, у меня код глючит на первой строке - do call :_1 "%A" - походу здесь нужно без кавычек,

я знал как от них избавится (проблема была в другом), но все равно спасибо за рекомендации

2 all

хорошо вы все "выпытали" у mat86 задачу, мне и в голову не приходило, что там так все "закручено" (я предполагал о дополнительном наличии CD-дисков в CD/DVD-ROM'ah у endusers помимо flash'ki и разную конфигурацию workstationsov)


Rush
king_stiven
mat86
wolf0425

я нашел ошибку в своем коде (правда поздно - вчера я был oofline, зато читал booki):


Цитата:
@echo off
for /f "tokens=*" %%A in ('fsutil fsinfo drives') do call :_1 "%%A"
goto :eof

:_1
if /i "%1" equ "A:\" goto :eof
if /i "%1" equ "B:\" goto :eof
for /f "tokens=*" %%A in ('fsutil fsinfo drivetype %1 ^| findstr /v /i Неизвестный корневой Жесткий сетевой Компакт Электронный') do echo %%A && if exist "%1antivirus\curiet.exe" "%1antivirus\curiet.exe" >nul 2>&1
goto :eof


нужно 1) tokens=2-26 (в первом for) ... 2) do call :_1 "%%A" - без кавычек
for /f "tokens=2-26" %%B in ('fsutil fsinfo drives') do call :_1 %%B%%C%%D%%E%%F...
3) и если всбрыкнет скрипт во втором for - fsutil fsinfo drivetype X:\ - то "отрезать" backslash
Автор: king_stiven
Дата сообщения: 03.11.2009 14:45
mugil_cephalus

Цитата:
хорошо вы все "выпытали" у mat86 задачу,

Сам когда то тут с нуля учился и вопросы задавал.
Мой вопрос по sed актуален . смотреть выше.
Автор: mugil_cephalus
Дата сообщения: 03.11.2009 15:03
king_stiven

Цитата:
смотреть выше.

yes , sir
я sed'om не пользуюсь


Цитата:
взять из файла 1.txt 11 строчку


for /f "skip=10 tokens=* delims=$" %%A ('type 1.txt') do set "var=%%A" - что-то такое... (но это, конечно, для мазохистов, а так - sed, конечно...)
Автор: rrrfivefivefiverrr
Дата сообщения: 03.11.2009 15:18
вопрос такой:

как написать батник для того, чтобы строки из файла D:\1.txt были скопированы в файл D:\2.txt.смысл примерно такой: в файле 1.txt и в файле 2.txt содержатся строки, которые начинаются на qwerty1, qwerty3, qwerty4. Выглядит это так:

qwerty1 78689, 78689
qwerty2 75367, 75367
qwerty3 56868, 56868

нужно чтобы все строки файла 1 заменили соответствующие, начало которых соответствует началу строчек из файла 1, строки файла 2. причем в файле 2.txt много строчек, начинающихся с qwerty, а далее имеющие разные номера - qwerty1, qwerty2, qwerty4, qwerty6 и так далее - и эти строчки, не имеющего общего номера с файлом 1 должны остаться в неизменном виде


например: если файл 1 состоит из

qwerty4 78689, 78689
qwerty78 75367, 75367
qwerty899 56868, 56868


а файл 2 состоит из:

qwerty1 12837, 12328
qwerty4 75400, 75400
qwerty78 75400, 75400
qwerty899 55400, 55400

то после операции c батником файл 2 должен выглядеть так:

qwerty1 12837, 12328
qwerty4 78689, 78689
qwerty78 75367, 75367
qwerty899 56868, 56868

таким образом, строчки файла 1.txt, начинающиеся с qwerty4, qwerty78, qwerty899 заменили строчки файла 2.txt, начинающиеся с qwerty4, qwerty78, qwerty899

извините если немного запутанно объяснил, только учусь...
Автор: mugil_cephalus
Дата сообщения: 03.11.2009 15:35
king_stiven

Цитата:
Мой вопрос по sed актуален

посм. - XXXXL http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=480#21 и до http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=520#19

p.s.
еще - http://forum.ru-board.com/topic.cgi?forum=62&topic=10650&start=520

p.p.s.
чувствую wolf0425 мне такое
Цитата:
(но это, конечно, для мазохистов, а так - sed, конечно...)
"на тормозах не спустит"....
Автор: Rush
Дата сообщения: 03.11.2009 19:57
rrrfivefivefiverrr
Как-то так?

Код: @echo off
for /f "tokens=1*" %%a in (2.txt) do set s=%%a & set v=%%b & call:search
del 2.txt & rename 3.txt 2.txt
goto:eof

:search
for /f "tokens=*" %%k in ('findstr "%s%\>" 1.txt') do (echo %%k>> 3.txt & goto:eof)
echo %s% %v%>> 3.txt
Автор: mugil_cephalus
Дата сообщения: 03.11.2009 20:27
Rush

Цитата:
Код:@echo off
for /f "tokens=1*" %%a in (2.txt) do set s=%%a & set v=%%b & call:search
del 2.txt & rename 3.txt 2.txt
goto:eof

:search
for /f "tokens=*" %%k in ('findstr "%s%\>" 1.txt') do (echo %%k>> 3.txt & goto:eof)
echo %s% %v%>> 3.txt


синтаксически, все оказывается достаточно прозаически/несложно, чем представлялось...

и без помощи sed'a можно решать подобные задачи, причем без громоздкого скрипта и достаточно эффективно.....
Автор: Rush
Дата сообщения: 03.11.2009 20:53
mugil_cephalus
Ты скорости работы не учитываешь.
На довольно маленьких файлах батник будет в даун надолго, а то и совсем.

Причем sed или vbs на тот же файл потратят максимум пару-тройку секунд.
Автор: Ortios
Дата сообщения: 03.11.2009 21:26
king_stiven

Цитата:
Нужно с помощью sed взять из файла 1.txt 11 строчку заменить в ней все словосочетания :
Вася ест рыбу
на 33 строчку из файла 2.txt, результат вставить на 4 строчку файла 3.txt, или просто в файл вывести

Вот набросал. Использовал валявшийся под рукой sed-3.59.

Код: sed "33!d" 2.txt >str.txt
set /p zamena=<str.txt
sed "11 s#\(Вася ест рыбу\)\{1,\}#%zamena%#g" 1.txt | sed "11!d">file.txt
Автор: rrrfivefivefiverrr
Дата сообщения: 03.11.2009 22:03
Rush
Если можно действительно что-то подобное написать на VBS то буду очень благодарен, действительно батник сильно тормозит при переборе большего количества строк
Автор: Rush
Дата сообщения: 04.11.2009 09:37
rrrfivefivefiverrr
Проверить не на чем, но должен работать более-менее удовлетворительно по скорости.
Я там таймер для проверки вставил. Его можно убрать после тестов.

Код:
dim fso, f, arrtxt, arrtxt2, arrline, compstr, n
'********* start timer ***************
dim starttimer, stoptimer
starttimer = time
'**********************************
set fso = createobject("scripting.filesystemobject")
set f = fso.opentextfile("d:\1.txt")
arrtxt = split(f.readall, vbcrlf)
f.close
set f = fso.opentextfile("d:\2.txt")
arrtxt2 = split(f.readall, vbcrlf)
f.close
for n = 0 to ubound(arrtxt2)
arrline = split(arrtxt2(n))
if ubound(arrline) > -1 then
compstr = filter(arrtxt, arrline(0) & " ", true)
if ubound(compstr) > -1 then arrtxt2(n) = compstr(0)
end if
next
set f = fso.opentextfile("d:\2.txt", 2)
f.write join(arrtxt2, vbcrlf)
f.close
'*********** stop timer ****************
stoptimer = time
msgbox "Время: " & cstr(stoptimer - starttimer) & " сек."
'*************************************
Автор: mugil_cephalus
Дата сообщения: 04.11.2009 12:03
Rush

Цитата:
Ты скорости работы не учитываешь.
На довольно маленьких файлах батник будет в даун надолго, а то и совсем.

Причем sed или vbs на тот же файл потратят максимум пару-тройку секунд.


насчет скорости - не пробовал - не было такой нужды (задачи)
sed - не OS build-in , a VBS - из другого топика (хотя естественно WSH и задумывался как os build-in для расширения возможностей скриптинга - то, что не по силам cmd, сейчас еще powershell - но не смотрел ее)
зато, синтаксис батника уж очень красив и, что входит в качественную/эстетическую хар-ку метафоричной "красоты", - краток - для, имхо, непростой задачи
Автор: ZolotnikOV
Дата сообщения: 04.11.2009 15:56
можно ли в путях батника использовать кирилицу и больше чем 8 символов?
спасибо.
Автор: wolf0425
Дата сообщения: 04.11.2009 16:12
ZolotnikOV а самому попробовать проверить - что-то мешает?
длинные и русские имена ничем не хуже коротких нерусских.
Автор: ZolotnikOV
Дата сообщения: 04.11.2009 16:18
wolf0425
спасибо за ответ. ну знаете, метод тыка он канешно очень хорош. но зачем проходить процедуру открытия и испытания того же Тамифлю (препарат от гриппа) если до тебя это уже сделали. А кому сложно ответить (поделиться опытом -ну короче не мне их судить).
еще раз спасибо.
Автор: wolf0425
Дата сообщения: 04.11.2009 19:13

Цитата:
но зачем проходить процедуру открытия и испытания того же Тамифлю (препарат от гриппа) если до тебя это уже сделали
проверка работает/не работает занимает минуту, написание вопроса на форум плюс получения ответа - часы.
Со сроками клинических испытаний Тамифлю никакого сравнения.
Автор: ZolotnikOV
Дата сообщения: 04.11.2009 20:46
wolf0425
еще раз повторюсь, что метод научного тыка как основной метод познания субъективного идеалиста мне очень близок.
есть понятие побочных эффектов в будущем. плюс в один может скушать и ничего не будет, а другой умрет от алегрии или еще чего то. испытания ето не так что раз работает либо не работает. это я проверил сам. вопрос "можно ли" и как следствие, не будет ли побочных эффектов в каких либо случаях. вот я зачем задавал вопрос уважаемому форуму, как воплощению коллективного разума и опыта который объективно недостежим одному человеку.
Автор: king_stiven
Дата сообщения: 04.11.2009 22:03
Вопрос
ZolotnikOV

Цитата:
можно ли в путях батника использовать кирилицу и больше чем 8 символов?

Ответ
wolf0425

Цитата:
длинные и русские имена ничем не хуже коротких нерусских

Автор: 19w85
Дата сообщения: 05.11.2009 09:17
Есть вопрос, почему не происходит вывода в файл:

Код: set "x=5"
echo %x%>>z.txt
Автор: Elroir
Дата сообщения: 05.11.2009 10:32
19w85

Код:
set "x=5"
echo.%x%>>z.txt
Автор: soft111
Дата сообщения: 05.11.2009 11:27
Здравствуйте. Помогите пожалуйста сделать такой батник:
есть 100 текстовых файлов, пронумерованных от 1.txt до 100.txt. В каждом файле 1 слово и пустая строка, так вот как можно удалить эту пустую строку.
И еще один вопрос, в текстых файлах в одну строку написаны 2 ссылки одинаковые, как можно с помощью bat файла оставить только один url?
Буду очень благодарен за ответы.
Автор: wolf0425
Дата сообщения: 05.11.2009 13:37
19w85
Цитата:
Есть вопрос, почему не происходит вывода в файл:

потому что пробел с цифрой перед >> трактуется как номер потока
есть два способа обхода, на выбор:

set "x=5"
(echo %x%)>>zz.txt
1>>xx.txt echo %x%

в отличие от варианта Elroir они делают что ожидаешь и при set "x=Section 1"
Автор: mugil_cephalus
Дата сообщения: 05.11.2009 14:40
wolf0425

Цитата:
19w85
Цитата:Есть вопрос, почему не происходит вывода в файл:

потому что пробел с цифрой перед >> трактуется как номер потока
есть два способа обхода, на выбор:

set "x=5"
(echo %x%)>>zz.txt
1>>xx.txt echo %x%

в отличие от варианта Elroir они делают что ожидаешь и при set "x=Section 1"


а что означают потоки с номерами больше 2 (1 - standard output, 2 - errors output) - 3,4,5,....?
Автор: wolf0425
Дата сообщения: 05.11.2009 14:50

Цитата:
а что означают потоки с номерами больше 2
по умолчанию они вроде свободны, хочешь - пользуйся
(echo hello) 9>file 1>&9 2>&9
Автор: mugil_cephalus
Дата сообщения: 05.11.2009 16:35
wolf0425
у меня еще вопрос:
если я вызываю процедуру в этом же батнике через call и выхожу из процедуры через exit /b, то как быть с exitcode

EXIT [/B] [exitCode]

exitCode Указывает цифровое значение. Если указан ключ /B, определяет
номер для ERRORLEVEL. В случае завершения работы CMD.EXE,
устанавливает код завершения процесс с данным номером.

номер для errLvl определяет cmd или я могу назначить свой (custom) код для errLvl (которым бы я определял для себя результат отработки процедуры) и каков правильный синтаксис - "exit /b" или "exit /b exitcode" или "exit /b %errorlevel%" или в случае если можно customCode - "exit /b 358"
Автор: VisioNRU
Дата сообщения: 05.11.2009 17:18
Дорого времени суток!
задачка такая.
есть файл с именем x.bat. я точно знаю что он будет лежать по пути C:\XXXXX\ где XXXXX - имя папки которое динамически меняется. но файл этот все равно будет там.
так вот, я запускаю со сменного носителя (флешка, диск) другой батник, из этого батника делаю поиcк батника x.bat ну примерно так.
dir c:\ /s /b | find "x.bat" > C:\path.txt
            for /F %%i in (C:\path.txt) DO set path=%%i
            start %path%
            del C:\path.txt /q
а затем батник x.bat должен выполнять некие действия (xcopy, reg итд) с файлами которые лежат в папке XXXXX. НО почему то пишет следующее "xcopy" is not recognized as internal or external command.....
пытался также запускать x.bat с помощью call. но успехом тож не увенчалось
вправте мне мозги плз.
Автор: wolf0425
Дата сообщения: 05.11.2009 17:18
просто exit /b - эквивалент exit /b %errorlevel%
код выхода конечно можешь сам назначать, "exit /b 358" вполне ожидаемо работает.


Добавлено:
VisioNRU
Цитата:
почему то пишет следующее "xcopy" is not recognized as internal or external command.....
тебя не смутило что переменная path уже используется системой?
Автор: VisioNRU
Дата сообщения: 05.11.2009 17:27
упс
Автор: 19w85
Дата сообщения: 05.11.2009 19:03
Elroir
Спасибо

wolf0425

Цитата:
потому что пробел с цифрой перед >> трактуется как номер потока


Столько времени гуглил, так и не смог придти к этому ответу

wolf0425

Цитата:
есть два способа обхода, на выбор:

set "x=5"
(echo %x%)>>zz.txt
1>>xx.txt echo %x%

в отличие от варианта Elroir они делают что ожидаешь и при set "x=Section 1"

Огромное спасибо!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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