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

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

Автор: ponand
Дата сообщения: 11.10.2009 10:27
Подскажите можно ли с помощью findstr получить в переменную полный путь к файлу с найденной подстрокой поиска и если да то как?
получить в переменную полную строку с найденной подстрокой поиска из файлаи если да то как?
И еще один вопросик как узнать имя предпоследнего каталога (в примере приведенном ниже это \файлы за апрель\) написанного кириллицей с пробелами ?
Примерно из такого пути C:\файлы за 2009г\файлы за апрель\12 апреля\11-30.txt
Автор: mrCrowley
Дата сообщения: 11.10.2009 10:59
2 wolf0425

Со вторым скриптом проблем нет - работает как часы, а первый так себя и ведет: на 3-й, 4-раз - перестает переименовывать в интервале срабатывания 10-30 секунд. Антивирус отключал - не то! Ну да ладно - попробую два раза в сутки (как собственно и надо в конечном итоге), думаю нормально будет.
Респектище огромный, очень признателен..
Автор: NIKZZZZ
Дата сообщения: 11.10.2009 11:33
ponand

Цитата:
И еще один вопросик как узнать имя предпоследнего каталога


Код: Set Name=C:\файлы за 2009г\файлы за апрель\12 апреля\11-30.txt
FOR /F "usebackq delims=" %%i IN ('%name%') DO Set Name=%%~dpi
FOR /F "usebackq delims=" %%i IN ('%name:~0,-1%') DO Set Name=%%~dpi
FOR /F "usebackq delims=" %%i IN ('%name:~0,-1%') DO Set Name=%%~nxi
Echo %name%
Автор: wolf0425
Дата сообщения: 12.10.2009 01:17
NIKZZZZ а зачем у тебя столько ключиков у for?
Код: Set Name=C:\файлы за 2009г\файлы за апрель\12 апреля\11-30.txt
FOR %%i IN ("%name%") DO Set "Name=%%~dpi"
FOR %%i IN ("%name:~0,-1%") DO Set "Name=%%~dpi"
FOR %%i IN ("%name:~0,-1%") DO Set "Name=%%~nxi"
Echo %name%
Автор: ponand
Дата сообщения: 12.10.2009 10:50
А по первым двум вопросам из того же поста может кто нибудь подсказать
Автор: wolf0425
Дата сообщения: 12.10.2009 11:23
ponand а там проще отделить findstr от перебора файлов, обход файлов делать через for /r ( и из него брать текущее полное имя) а найденную строку выдаст findstr - через for /f загоняешь ее в переменную. как-то так:
Код: for /r "C:\файлы за 2009г" %%a in ( *.txt ) do for /f "delims=" %%s in (' findstr подстрока "%%~a" ') do set "string=%%s" && set "fullname=%%~a" && call :_proc
goto :eof

:_proc
rem тут вычисляешь что надо
goto :eof
Автор: mugil_cephalus
Дата сообщения: 12.10.2009 14:15
А кто-нибудь встречал анимацию в батниках?


и еще:
у меня файл zero_1.bat с кодом:
@echo off
echo %0
pause

выдает output:
"G:\scripts\zero_1.bat"
Для продолжения нажмите любую клавишу . . .

но echo %0 - должен ведь выдавать zero_1.bat (без пути) ???
Автор: 01MDM
Дата сообщения: 12.10.2009 16:20
mugil_cephalus
Должен выдавать "zero_1". Какая виндоус?


Автор: bredonosec
Дата сообщения: 12.10.2009 16:21

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

как-то странно реагирует - по секунд 15 выводит в консоли данную строку с каждым именем, после чего следующую..
Вроде б должно писать, но на целевых ничего не пишется. пусто.
Автор: mugil_cephalus
Дата сообщения: 12.10.2009 16:31
01MDM

Цитата:
Должен выдавать "zero_1". Какая виндоус?

я ожидал выдачу zero_1 (без кавычек)
xp pro ru sp3
Автор: wolf0425
Дата сообщения: 12.10.2009 16:42

Цитата:
но echo %0 - должен ведь выдавать zero_1.bat (без пути) ???
подозреваю, что претензии тебе надо адресовать авторам ФАРа, из которого ты запускал батник.
в смысле - %0 строго равен тому, что cmd получил в командной строке для исполнения, т.е. путь и расширение там могут и присутствовать и отсутствовать в соотвествии с тем как запускали.
Если нужно строго имя+расширение батника - писать надо echo %~nx0
Автор: NIKZZZZ
Дата сообщения: 12.10.2009 16:56
wolf0425

Цитата:
зачем у тебя столько ключиков у for?

Перестраховка. Я точно знаю, как поведет себя эта команда с ключиками, но не уверен, что твой вариант, например, нормально среагирует на пробелы в именах.
Автор: mugil_cephalus
Дата сообщения: 12.10.2009 16:58
wolf0425

Цитата:
подозреваю, что претензии тебе надо адресовать авторам ФАРа, из которого ты запускал батник.

не far'om, а mouse doubleclick'om

Добавлено:
wolf0425
запустил из cmd:
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

F:\Documents and Settings\admin>zero_1.bat
zero_1
Для продолжения нажмите любую клавишу . . .


Цитата:
подозреваю, что претензии тебе надо адресовать авторам ФАРа, из которого ты запускал батник.

биллу гейтсу, что-ли, претензии, получается?..


wolf0425
а анимацию в батниках ты не встречал?..
Автор: slech
Дата сообщения: 12.10.2009 18:05
всем привет
подскажите пожалуйста как выводить в каждый день кол-во файлов созданых вчера ?

спасибо.
Автор: wolf0425
Дата сообщения: 12.10.2009 20:22

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

Добавлено:
Существуют ли какие-то консольные утилиты, позволяющие сообщить сервису QoS о приоритетности трафика, отправляемого и получаемого program.exe ?
Автор: ponand
Дата сообщения: 12.10.2009 22:58
Както не получается использовать For /r вернее For /r работает нормально а вот с присвоением переменной результата поиска косяк наверно из за того что в найденной строке есть спец символы : % я попытался сразу разобрать найденную строку добавив ключи разбора но тогда For ругается на %%~а как дальше быть?
Автор: wolf0425
Дата сообщения: 12.10.2009 23:45
ponand пример "неправильного" имени дашь?
Автор: ponand
Дата сообщения: 13.10.2009 02:52
Разобрался я с циклом а символ процента пришлось отрезать
и теперь назрел еще один вопрос если я с помощью Call выйду из тела цикла для выполнения действий над найденной строкой поиска смогу ли я вернуть обратно в тело цикла результат?
Автор: wolf0425
Дата сообщения: 13.10.2009 04:34

Цитата:
смогу ли я вернуть обратно в тело цикла результат?
ну если в Call не использовалось setlocal - то не вижу проблемы. ты только имей в виду, что в теле цикла %переменные% заменяются на свои значения до начала выполнения цикла. т.е. придется поставить setlocal enabledelayedexpansion в начало батника и и использовать !переменные! в теле цикла.

А смысл что-то вертать в тело? не проще всё что можно вынести в Call?
Автор: Iacoyn
Дата сообщения: 13.10.2009 08:38
Народ - как с помощью bat (cmd) файла заменить строку в текстовом файле?
Хочется автоматизировать процесс изменения дистрибутива XP для загрузки с USB HDD.
Желательно без использования сторонних утилит
Среди прочего есть ещё похелание - тем же способом добавлять строки текста в файл.
Например
Взять inf от Nvidia и заменить в нём все вхождения строки
HKLM,"Software\NVIDIA Corporation\Global\NVTweak",NoPages,%REG_DWORD%,0x40000000
на
HKLM,"Software\NVIDIA Corporation\Global\NVTweak",NoMenus,%REG_DWORD%,0x00000000
HKLM,"Software\NVIDIA Corporation\Global\NVTweak",NoPages,%REG_DWORD%,0x00000000
Спасибо!
Автор: 01MDM
Дата сообщения: 13.10.2009 13:55
Iacoyn

Цитата:
Желательно без использования сторонних утилит

Чистый батник не лучшее решение для работы с текстом.
Лучше воспользоваться sed-ом:

Код:
@echo off
setlocal

set "s=^строка поиска$"
set "r=первая строка замены\nвторая строка в замене"

sed -i "s/%s%/%r%/g" file.txt
:: 2>nul del sed*
Автор: slay1212
Дата сообщения: 13.10.2009 17:11
Вопрос - надо отключить ком строку частично - чтоб бат смд файлы запускались а оболочка нет.
Покурив мануалы вроде при ключе
HKCU\Software\Policies\Microsoft\Windows\System\DisableCMD=1 все должно пахать - но не пашут батники. Как при =2 ключике. "Приглашение комстроки отключено вашим администратором". Где порылась собака?
Если вопрос не в той теме перенаправьте плиз.
Автор: mugil_cephalus
Дата сообщения: 13.10.2009 17:17
2 igor_andreev KapralBel Elroir и другим (кого не знаю) гуру


Цитата:
А кто-нибудь встречал анимацию в батниках?


(пардон за самоцитирование )

или, похоже, что нет ?...

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

P.S. добавлю и поясню: я имею в виду не GUI-анимацию, не графическую анимацию в консоли cmd, не анимацию псевдографических символов в консоли cmd, а именно достижение эффекта анимации в консоли cmd путем определенного пакетирования комманд, таких как echo, type и других - то есть именно через батник (напрямую в нашу тему Задачи на bat-файлах), то есть использование только того, что "понимают" комманды echo и/или type (и другие), создание циклов и соответствующее их пакетирование в батник


набросал маленький скрипт для примера (по этому практическому примеру индуктивным методом , думаю, станет понятна и теория анимации в батниках, а то я, со своим гуманитарным образованием, вынужден буду порытся в математ. книгах и подвспомнить интсрументарий описания уравнений ):

у меня в скрипте двоеточие+дефис+закрывающая круглая скобка (а софт форума их конвертировал в эмотиконы) !

@echo off
cls

set pingWait=2

:start

cls
echo && ping -n %pingWait% localhost >nul 2>&1

cls
echo && ping -n %pingWait% localhost >nul 2>&1

cls
echo && ping -n %pingWait% localhost >nul 2>&1

cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo && ping -n %pingWait% localhost >nul 2>&1

cls
echo.
echo.
echo.
echo.
echo.
echo && ping -n %pingWait% localhost >nul 2>&1

cls
echo.
echo.
echo.
echo @ && ping -n %pingWait% localhost >nul 2>&1
echo @ && ping -n %pingWait% localhost >nul 2>&1
echo @ && ping -n %pingWait% localhost >nul 2>&1

cls
echo.
echo.
echo.
echo @ && ping -n %pingWait% localhost >nul 2>&1
echo @ && ping -n %pingWait% localhost >nul 2>&1
echo @ && ping -n %pingWait% localhost >nul 2>&1

cls
echo.
echo.
echo.
echo @ @ @ @ @ && ping -n %pingWait% localhost >nul 2>&1

goto start
Автор: ponand
Дата сообщения: 14.10.2009 09:05
Подскажите а сколько оперативной памяти может потреблять батник?
И можно ли ее очистить без перезагрузки?
Автор: BVV63
Дата сообщения: 14.10.2009 09:37
ponand

Цитата:
Подскажите а сколько оперативной памяти может потреблять батник?

Зависит от приложений, запускаемых из него. Не более, чем самое ресурсоёмное приложение из них и плюс оперативка, которую занимает командный процессор.

Цитата:
И можно ли ее очистить без перезагрузки?

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

Добавлено:
Прошу прощения, я поискал в версии для печати что-то типа "не работает for", не нашёл, а одно слово "for" для поиска использовать как-то глупо.
Имеется пакетник, использующий конструкцию "for.. in.. do". Так вот, у меня на Висте он работал, а у коллеги на XP, почему-то, - нет. Теперь я перешёл на Семёрку, и пакетник перестал работать и у меня:
"'FOR' is not recognized as an internal or external command, operable program or batch file."
Т. е. система его не распознаёт. Я бы грешил на Семёрку, ежели бы не встречал подобные глюки в XP (см. выше). Может, сам батник кривоват, приведу его на всякий случай и буду благодарен за помощь.
[more]
"%SYSTEMROOT%\System32\reg.exe" ADD "HKCU\Control Panel\International" /D "dd.MM.yy" /F /T REG_SZ /V "sShortDate">NUL
FOR/F %%I IN (\\192.168.0.3\Z\Docforms.txt) DO COPY/B/V/Y/Z "\\192.168.0.2\app1$\infosoftn\Docforms\%%I" "\\192.168.0.20\D$\Makets\2009\07\%DATE%\infosoft\D^
ocforms\*.*"
FOR/F %%I IN (\\192.168.0.3\Z\Reports.txt) DO COPY/B/V/Y/Z "\\192.168.0.2\app1$\infosoftn\Reports\%%I" "\\192.168.0.20\D$\Makets\2009\07\%DATE%\infosoft\Rep^
orts\*.*"
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.2\APP1$\infosoft\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.2\APP1$\infosoft_debug\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.2\APP1$\infosoft_new\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.2\APP1$\infosoftn\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.20\C$\infosoft\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.22\C$\infosoft\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.26\C$\infosoft\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.27\C$\infosoft\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.28\C$\infosoft\*.*" /C /E /H /K /Q /R /V /Y /Z
"%SYSTEMROOT%\System32\XCOPY.EXE" "\\192.168.0.20\D$\Makets\2009\08\%DATE%\infosoft\*.*" "\\192.168.0.30\C$\infosoft\*.*" /C /E /H /K /Q /R /V /Y /Z
PAUSE
"%SYSTEMROOT%\System32\reg.exe" ADD "HKCU\Control Panel\International" /D "yy.MM.dd" /F /T REG_SZ /V "sShortDate">NUL
EXIT
[/more]
Автор: ponand
Дата сообщения: 14.10.2009 10:16
BVV63

Цитата:
Зависит от приложений, запускаемых из него. Не более, чем самое ресурсоёмное приложение из них и плюс оперативка, которую занимает командный процессор

использую циклы For /f и For /r поиск строки Findstr записи в файл echo больше ни чего не вызываю а выделеная память увеличивается как на дрожжах и дойдя до 1,3 гб батник начинает глючить

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

Findstr может быть кривым?
Автор: BVV63
Дата сообщения: 14.10.2009 10:24
ponand

Цитата:
Findstr может быть кривым?

А Винда может быть кривая? Это ж виндузная команда. Попробуйте в виде эксперимента ещё какой-нить цикл запустить без Findstr. Если всё будет OK - значит он виноват.
Автор: 01MDM
Дата сообщения: 14.10.2009 11:25
ponand
Все зависит от батника. Попробуй такой:

Код:
@echo off
setlocal

for /l %%i in (0,1,10) do (
for /l %%j in (0,1,100) do (
for /l %%k in (0,1,1000) do set var_%%i_%%j_%%k=%%k
)
)
set var_ 1>1.txt
Автор: BVV63
Дата сообщения: 14.10.2009 11:36
01MDM

Цитата:
Расход памяти потребляемой процессом вырос до ~12Mb

Скажите, а файл 1.txt тоже стал размером 12Mb?
Автор: mugil_cephalus
Дата сообщения: 14.10.2009 11:39
wolf0425

так получается, что explorer (mouse doubleclick *.bat) не правильно (не как cmd, не как default-запрограммировано) обрабатывает обращение в батнике к аргументу %0 (соответственно, это, по логике, должно приводить к сбоям в исполнении батника при его вызове explorer/mouse doubleclick'om и, возможно, при вызове батника через *.lnk) ?
P.S.
может и обращение к другим аргументам тоже?
от чего, как думаешь, это зависит? (я, вроде, в реестре ничего существенного в критических настройках не менял...)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

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


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