Нужен cmd/bat для поиска баз 1с на локальных дисках, туплю.. #779273


#0 by Bigbro
через wmic logicaldisk where drivetype=3 get deviceid > %myfile% я получил файлик с локальными дисками но дальше с его обработкой через for /f "skip=1" %%i in (%myfile%) do начинаются проблемы ругается на синтаксис, хотя вроде бы все корректно. более того внутри цикла команда where воспринимает перенаправление в лог ">123.log" как очередной файл для поиска конструкция вида 123.log < where /r c: 1cv7.md 1cv8.1cd тоже интерпретируется криво - в окошке вывод типа: 123.log  /r c: 1cv7.md 1cv8.1cd 0<where то есть все аргументы переносятся вперед. есть у кого то опыт борьбы с батниками? помогите плз..
#1 by VladZ
Чем твоя программа лучше штатного поиска?
#2 by Bigbro
батник можно засунуть на все машины в домене и запустить через политики. требуется разобраться что за базы на машинах локальные, их много, порядок измеряется тысячами.
#3 by VladZ
Тысячи локальных баз? Это какой-то "адский бардак".
#4 by DDwe
А что тебе даст тысяча результатов вроде этого: "D:Базырабочая1cv8.1cd" ?
#5 by VladZ
Это еще будет большой удачей, если путь к базе будет нести какой-то смысл.  Базу могли закинуть куда угодно. И разбирайся потом, что это.  Я думаю, проще будет запросить у пользователей список баз, с которыми они работают. Все остальные удалить. При этом нужно убедиться, что резервные копии нужных баз есть в наличии.
#6 by Bigbro
именно, но порядок-то наводить надо. это будут файлы с именами компьютеров, их можно будет направить в филиалы ответственным людям с указаниями убрать все кроме рабочих баз и сроками исполнения. на самом деле административно это все решается, опыт есть проблем нет. проблема техническая - спотыкаюсь в батниках, грешен лет 15 не ковырялся в них совсем, да и до этого только поверхностно.
#7 by DDwe
Так и отправь указание, пусть убирают. А тебе потом отправят список рабочих баз, заодно и бэкапы настроишь.
#8 by DDwe
+ В смысле пусть убирают всё не нужное, без твоего поиска. Тебе то зачем список ненужных баз?
#9 by Bigbro
похоже вы никогда не работали в крупной организации со слабой исполнительской дисциплиной. давая любое поручение исполнителю нужно дать ему максимум информации для исполнения и иметь инструмент контроля. собственно скрипт и призван решить эти 2 задачи. если можно давайте вернемся к технической стороне вопроса.. организационные моменты - неинтересны в данный момент в данной теме, если есть желание можете создать тему отдельно с удовольствием там с вами пообщаюсь.
#10 by DDwe
Спасибо, но нет. Обсуждать китайскую пионерию смысла нет. Флаг в руки.
#11 by Bigbro
тут попутно выяснилось, что where не работает на системах ниже чем Windows7 а таких у нас много. в принципе это не проблема, версию ОС можно определить через переменные окружения %OS% так же как и %computername% даст имя компьютера для формирования имени файла лога.
#12 by Mauser
Хех. А что ж тебе не дали максимум информации и инструмент для контроля-то? Не умеешь на батниках - напиши на 1с. Установи доменной политикой на все машины последнюю версию платформы и поддержкой асинхронным вызовов (это важно!) Напиши обработку, служебку для ее запуска, дождись, пока филиалы отчитаются и удали 1с. Что ж как дети, правда - такая большая фирма, а ничего не умеют.
#13 by VladZ
Разворачивать на каждой машине 1С, чтобы найти файлы баз 1С на локальных компах? По-моему, звучит бредово.
#14 by DDwe
Да, не важно же на чем писать, задача поставлена раком.
#15 by Mauser
Каждая задача должна решаться так, как требует постановка!
#16 by Mauser
Я бы еще прослойку на питоне написал, для получения актуальной версии платформы. Да и ТС пригодится - прикинь, надо что то сделать, а на всех машинах домена уже питон есть!
#17 by 4St
where /R c: emp *.epf > c: emp123.log например
#18 by ASU_Diamond
крупная организация в которой пользователи работают с локальными базами? насмешил очередной вирус пишешь?
#19 by Fish
Холдинг ларьков? :)
#20 by Bigbro
так не работает внутри цикла for попутно выяснил что мне не нужен where for /r умеет как раз рекурсивный поиск. но пока проблема с аргументом. off set filename=1cv8.1cd for /r "C:" %%i in (%filename%) do echo %%i>>itog.txt выводит вообще всю структуру папок на диске, вместо поиска. типа того. за который решили наконец то взяться.
#21 by ASU_Diamond
при этом пользователи настолько продвинутые, что сами себе поднимают локальные базы. Явно же базы ставили it-ники
#22 by Mauser
Каждый помогающий написать батник будет считаться соучастником =)
#23 by Mauser
А вообще я верю в людей. Скорей всего ТС ищет файлы *.bak, но боится что его засмеют, поэтому придумал эту красивую легенду. Не переживай, все через это проходили!
#24 by DDwe
Точняк вирус ))) Ну найдет он файл сд и чо? Лежит он сам по себе, ни к одной 1с не подцепленный, нужен.. не нужен... темнит автор или что-то замыслил.
#25 by ptiz
Логичнее список баз из %APPDATA%1C1CEStartibases.v8i получать.
#26 by birkoFFFF
Автор пишет батник который найдет файловые базы 1с, зашифрует паролем формируемым на основе IP адреса например, и закинет в корень всех дисков текстовичок ВАЖНО! с описанием куда слать деньги чтобы получить пароль?
#27 by Bigbro
там мы получим то что с высокой степернью вероятности используется. но не увидим что осталось от предыдущего владельца компьютера - к примеру. эхъ мистапесатели 10 человек и ни одного толкового поста по сабжу. rem off set filename=*.1cd *.md SetLocal EnableExtensions EnableDelayedExpansion For /F "Skip=2 Tokens=2 delims=," %%j In ('WMIC LogicalDisk Where Access^^!^=Null Get Name /Value /format:csv') do (for /R ^"%%j^^" %%i in (%filename%) do echo %%i>>itog.txt) пока пришел к такому - for внутри for должен сделать так как надо но не срабатывает (
#28 by DDwe
Я допускаю, что чего-то не понимаю, но "for внутри for " здесь не наблюдаю.
#29 by ptiz
"что осталось от предыдущего владельца компьютера" - а не пох? Не используется, значит - не нужно. Задачу полностью бы обрисовал, тогда бы и ответы были те, которые ожидаешь.
#30 by DDwe
И что бы уже давно не взять любой скриптовый язык и не мучить батник и мозг.
#31 by Bigbro
задачу обрисовывал же - надо навести порядок, избавиться от всех старых неактуальных баз, в том числе и для исключения утечек информации. те что используются свести в один реестр для последующего переноса на сервера, централизации. вроде все очевидно. первый фор в первой позиции, второй после do - в конце.
#32 by DDwe
Ну так "после", а не "внутри".
#33 by Лефмихалыч
dir /s /b *.1cd
#34 by DDwe
Круто.
#35 by Bigbro
спасибо, внезапно! )
#36 by Мыш
Старая школа )
#37 by Bigbro
если кому вдруг интересно, работает в конечном итоге вот так: @ECHO DONT CLOSE THIS WINDOW! off Setlocal EnableDelayedExpansion set server= rem set server=\myserverfor1cbaselist set myfile=*.1cd set myfile2=*.md set pth= For /F "Tokens=2 Delims==" %%i In ('WMIC LogicalDisk Where DriveType^=3 Get Name /Value') Do ( set pth=%%i DIR /s /b !pth:~0,2!%myfile% >>%server%%computername%_1c8.log DIR /s /b !pth:~0,2!%myfile2% >>%server%%computername%_1c7.log ) Лефмихалыч еще раз огромное спасибо! выводит правда довольно много мусора (если установлен Visual studio и некоторые другие), но в качестве рабочего инструмента сойдет.
#38 by Мыш
#39 by trdm
Не везде же пауэршел стоит.
#40 by Мыш
\remote_computerc$
#41 by Mauser
Бгг. А если файлы лежат в профиле другого пользователя?
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С