[CMD] Поиск файлов по локальным дискам

BigBro

Новый пользователь
Сообщения
4
Симпатии
3
Баллы
13
#1
Есть задача, нужно сделать батник, который проведет поиск файлов по всем локальным дискам, сложит найденное в лог-файл с именем компьютера и скопирует этот лог на общий ресурс...
вроде ничего сложного, но я уже 2 сутки марширую по граблям )
пока дошел до такой конструкции:
CMD/BATCH:
set myfile=drives.log
wmic logicaldisk where drivetype=3 get deviceid > %myfile%
for /f "skip=1" %%i in (%myfile%) do
(if notX%%i==X do
  ( SET a=%%i
  (where /r %a:~0,1%:\ 1cv7.md 1cv8.1cd) >123.log
  )
)
xcopy 123.log c:\temp\ /y
ругается на синтаксис команды for
когда копировал существующие примеры циклов - ругани не было, но спотыкался на where, перенаправление в лог фал воспринимает как очередной файл для поиска.
изменение типа
123.log < where /r %a:~0,1%:\ 1cv7.md 1cv8.1cd
тоже не приводят к ожидаемому результату - все аргументы переставляются впереди команды where.

if notX%%i==X do
эта конструкция чтобы отсечь последнюю пустую строку, которая выводится иногда в списке дисков.
skip нужен чтобы пропустить первую строку "DeviceID"
%a:~0,1% это чтобы отрезать первую букву, я ее потом в имени лога хотел использовать, и избавиться от : и пробелов следом за буквой диска...

Прошу помощи!
 
Последнее редактирование модератором:

BigBro

Новый пользователь
Сообщения
4
Симпатии
3
Баллы
13
#3
CMD/BATCH:
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
но не выводит ничего (
 
Последнее редактирование модератором:

BigBro

Новый пользователь
Сообщения
4
Симпатии
3
Баллы
13
#4
в итоге сделано вот так и работает:
CMD/BATCH:
@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
)
наверняка не лучший и не оптимальный вариант, но такой и цели не стояло)
всем добра!
 
Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,963
Симпатии
5,786
Баллы
588
#5
Поиск файла - Batch (CMD/BAT) - CyberForum.ru
вот тут нашел вроде похожий на то что мне надо цикл.
Там я не совсем правильно написал. В конце строки остаётся знак CR. Нужно добавить знак двоеточие в перечень разделителей.

Так будет в 1,5 - 2 раза быстрее и не будет "глотать" знаки "!" :
CMD/BATCH:
@echo off
SetLocal EnableExtensions

set myExt1=txt
set myExt2=exe

set server=
rem set server=\\myserver\for1cbaselist\

set log1=%server%%computername%_1c8.log
set log2=%server%%computername%_1c7.log

del .tmp 2>NUL
For /F "Skip=2 Tokens=2 delims=,:" %%i In ('WMIC LogicalDisk Where ^(Access^^!^=Null AND DriveType^=3^) Get Name /Value /format:csv') do (
  dir /s /b "%%i:\*.%myExt1%" "%%i:\*.%myExt2%" >> .tmp
)

< .tmp > "%log1%" findstr /R /C:"\.%myExt1%$"
< .tmp > "%log2%" findstr /R /C:"\.%myExt2%$"

pause
Если интересует скорость, могу написать консольную утилиту вместо DIR, которая будет проводить поиск ~ в 10-100 раз быстрее на томах NTFS.
 
Сверху Снизу