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

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем BigBro, 24 авг 2016.

  1. BigBro
    Оффлайн

    BigBro Новый пользователь

    Сообщения:
    4
    Симпатии:
    3
    Есть задача, нужно сделать батник, который проведет поиск файлов по всем локальным дискам, сложит найденное в лог-файл с именем компьютера и скопирует этот лог на общий ресурс...
    вроде ничего сложного, но я уже 2 сутки марширую по граблям )
    пока дошел до такой конструкции:
    Код (DOS):

    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% это чтобы отрезать первую букву, я ее потом в имени лога хотел использовать, и избавиться от : и пробелов следом за буквой диска...

    Прошу помощи!
     
    Последнее редактирование модератором: 24 авг 2016
  2. BigBro
    Оффлайн

    BigBro Новый пользователь

    Сообщения:
    4
    Симпатии:
    3
    akok нравится это.
  3. BigBro
    Оффлайн

    BigBro Новый пользователь

    Сообщения:
    4
    Симпатии:
    3
    Код (DOS):

    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
    но не выводит ничего (
     
    Последнее редактирование модератором: 24 авг 2016
  4. BigBro
    Оффлайн

    BigBro Новый пользователь

    Сообщения:
    4
    Симпатии:
    3
    в итоге сделано вот так и работает:
    Код (DOS):
    @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
    )
    наверняка не лучший и не оптимальный вариант, но такой и цели не стояло)
    всем добра!
     
    Последнее редактирование модератором: 24 авг 2016
    Kиpилл и akok нравится это.
  5. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Там я не совсем правильно написал. В конце строки остаётся знак CR. Нужно добавить знак двоеточие в перечень разделителей.

    Так будет в 1,5 - 2 раза быстрее и не будет "глотать" знаки "!" :
    Код (DOS):
    @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.
     
    Kиpилл нравится это.

Поделиться этой страницей