Имя: Пароль:
IT
Админ
Нужен cmd/bat для поиска баз 1с на локальных дисках, туплю..
0 Bigbro
 
24.08.16
06:02
через 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 VladZ
 
24.08.16
06:05
(0)  Чем твоя программа лучше штатного поиска?
2 Bigbro
 
24.08.16
06:13
батник можно засунуть на все машины в домене и запустить через политики.
требуется разобраться что за базы на машинах локальные, их много, порядок измеряется тысячами.
3 VladZ
 
24.08.16
06:18
(2) Тысячи локальных баз? Это какой-то "адский бардак".
4 DDwe
 
24.08.16
06:20
(2) А что тебе даст тысяча результатов вроде этого: "D:\Базы\рабочая\1cv8.1cd" ?
5 VladZ
 
24.08.16
06:29
(4)  Это еще будет большой удачей, если путь к базе будет нести какой-то смысл.  Базу могли закинуть куда угодно. И разбирайся потом, что это.  Я думаю, проще будет запросить у пользователей список баз, с которыми они работают. Все остальные удалить. При этом нужно убедиться, что резервные копии нужных баз есть в наличии.
6 Bigbro
 
24.08.16
06:31
(3) именно, но порядок-то наводить надо.
(4) это будут файлы с именами компьютеров, их можно будет направить в филиалы ответственным людям с указаниями убрать все кроме рабочих баз и сроками исполнения.
на самом деле административно это все решается, опыт есть проблем нет.
проблема техническая - спотыкаюсь в батниках, грешен лет 15 не ковырялся в них совсем, да и до этого только поверхностно.
7 DDwe
 
24.08.16
06:42
(6) Так и отправь указание, пусть убирают. А тебе потом отправят список рабочих баз, заодно и бэкапы настроишь.
8 DDwe
 
24.08.16
06:43
(7) + В смысле пусть убирают всё не нужное, без твоего поиска. Тебе то зачем список ненужных баз?
9 Bigbro
 
24.08.16
06:47
(8) похоже вы никогда не работали в крупной организации со слабой исполнительской дисциплиной.
давая любое поручение исполнителю нужно дать ему максимум информации для исполнения и иметь инструмент контроля.
собственно скрипт и призван решить эти 2 задачи.

если можно давайте вернемся к технической стороне вопроса..
организационные моменты - неинтересны в данный момент в данной теме, если есть желание можете создать тему отдельно с удовольствием там с вами пообщаюсь.
10 DDwe
 
24.08.16
06:51
(9) Спасибо, но нет. Обсуждать китайскую пионерию смысла нет.
Флаг в руки.
11 Bigbro
 
24.08.16
07:09
тут попутно выяснилось, что where не работает на системах ниже чем Windows7 а таких у нас много.
в принципе это не проблема, версию ОС можно определить через переменные окружения %OS% так же как и %computername% даст имя компьютера для формирования имени файла лога.
12 Mauser
 
24.08.16
07:52
(9) Хех. А что ж тебе не дали максимум информации и инструмент для контроля-то?

Не умеешь на батниках - напиши на 1с. Установи доменной политикой на все машины последнюю версию платформы и поддержкой асинхронным вызовов (это важно!) Напиши обработку, служебку для ее запуска, дождись, пока филиалы отчитаются и удали 1с.

Что ж как дети, правда - такая большая фирма, а ничего не умеют.
13 VladZ
 
24.08.16
07:54
(12)  Разворачивать на каждой машине 1С, чтобы найти файлы баз 1С на локальных компах? По-моему, звучит бредово.
14 DDwe
 
24.08.16
07:56
(13) Да, не важно же на чем писать, задача поставлена раком.
15 Mauser
 
24.08.16
08:08
(13) Каждая задача должна решаться так, как требует постановка!
16 Mauser
 
24.08.16
08:10
Я бы еще прослойку на питоне написал, для получения актуальной версии платформы. Да и ТС пригодится - прикинь, надо что то сделать, а на всех машинах домена уже питон есть!
17 4St
 
24.08.16
08:50
(0) where /R c:\temp *.epf > c:\temp\123.log
например
18 ASU_Diamond
 
24.08.16
08:53
(9) крупная организация в которой пользователи работают с локальными базами? насмешил
(0) очередной вирус пишешь?
19 Fish
 
24.08.16
08:58
(18) Холдинг ларьков? :)
20 Bigbro
 
24.08.16
09:00
(17) так не работает внутри цикла for
попутно выяснил что мне не нужен where
for /r умеет как раз рекурсивный поиск. но пока проблема с аргументом.

echo off
set filename=1cv8.1cd
for /r "C:\" %%i in (%filename%) do echo %%i>>itog.txt

выводит вообще всю структуру папок на диске, вместо поиска.

(18) типа того. за который решили наконец то взяться.
21 ASU_Diamond
 
24.08.16
09:01
при этом пользователи настолько продвинутые, что сами себе поднимают локальные базы. Явно же базы ставили it-ники
22 Mauser
 
24.08.16
09:06
(18) Каждый помогающий написать батник будет считаться соучастником =)
23 Mauser
 
24.08.16
09:08
А вообще я верю в людей. Скорей всего ТС ищет файлы *.bak, но боится что его засмеют, поэтому придумал эту красивую легенду.
Не переживай, все через это проходили!
24 DDwe
 
24.08.16
09:09
Точняк вирус )))
Ну найдет он файл сд и чо? Лежит он сам по себе, ни к одной 1с не подцепленный, нужен.. не нужен... темнит автор или что-то замыслил.
25 ptiz
 
24.08.16
09:13
Логичнее список баз из %APPDATA%\1C\1CEStart\ibases.v8i получать.
26 birkoFFFF
 
24.08.16
09:16
Автор пишет батник который найдет файловые базы 1с, зашифрует паролем формируемым на основе IP адреса например, и закинет в корень всех дисков текстовичок ВАЖНО! с описанием куда слать деньги чтобы получить пароль?
27 Bigbro
 
24.08.16
09:26
(25) там мы получим то что с высокой степернью вероятности используется.
но не увидим что осталось от предыдущего владельца компьютера - к примеру.

эхъ мистапесатели
10 человек и ни одного толкового поста по сабжу.

rem echo 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 DDwe
 
24.08.16
09:30
(27) Я допускаю, что чего-то не понимаю, но "for внутри for " здесь не наблюдаю.
29 ptiz
 
24.08.16
09:30
(27) "что осталось от предыдущего владельца компьютера" - а не пох?
Не используется, значит - не нужно. Задачу полностью бы обрисовал, тогда бы и ответы были те, которые ожидаешь.
30 DDwe
 
24.08.16
09:32
И что бы уже давно не взять любой скриптовый язык и не мучить батник и мозг.
31 Bigbro
 
24.08.16
09:33
(29) задачу обрисовывал же - надо навести порядок, избавиться от всех старых неактуальных баз, в том числе и для исключения утечек информации. те что используются свести в один реестр для последующего переноса на сервера, централизации.
вроде все очевидно.
(28) первый фор в первой позиции, второй после do - в конце.
32 DDwe
 
24.08.16
09:34
(31) Ну так "после", а не "внутри".
33 Лефмихалыч
 
24.08.16
09:38
dir /s /b *.1cd
34 DDwe
 
24.08.16
09:41
(33) Круто.
35 Bigbro
 
24.08.16
09:44
(33) спасибо, внезапно! )
36 Мыш
 
24.08.16
10:24
(33) Старая школа )
37 Bigbro
 
24.08.16
12:45
если кому вдруг интересно, работает в конечном итоге вот так:

@ECHO DONT CLOSE THIS WINDOW!
echo off
Setlocal EnableDelayedExpansion
set server=
rem set server=\\myserver\for1cbaselist\
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 Мыш
 
24.08.16
15:33
39 trdm
 
24.08.16
15:45
(38) Не везде же пауэршел стоит.
40 Мыш
 
24.08.16
15:48
(39) \\remote_computer\c$
41 Mauser
 
24.08.16
15:59
(37) Бгг. А если файлы лежат в профиле другого пользователя?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.