Как найти определенную общую папку в сети

Я искал повсюду ответ, и я до сих пор ничего не получил.

Я хочу сделать следующее:

просканируйте мою локальную сеть на наличие одной конкретной папки (имя которой мне известно) на любом компьютере. Эта папка всегда доступна всем пользователям. Если он найден, сопоставьте его с неиспользуемой буквой диска в Windows.

попробовал эту опцию из другого вопроса в stackoverflow,просто найти папку и хост, но не успех:

@echo off
set folder=example
for /f %%a in ('net view ^|find ""') do if not "%%a"=="%computername%" (
    echo trying server "%%a"
    pushd "%%a" && (
             for /d /r %%b in (%folder%*) do if /i "%%~nxb"=="%folder%" echo server "%%a" folder "%%b"
             popd
            )
)
pause

спасибо заранее!

8
задан Eduardo Costa da Rocha
10.01.2023 4:34 Количество просмотров материала 2768
Распечатать страницу

1 ответ

читать pushd - сетевые пути UNC:

Когда a путь UNC указано, PUSHD создаст временный карта диска, а затем будет использовать этот новый диск.

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

pushd "%%a" неверно как pushd требует путь UNC как \computername\sharename или \computername\sharename\some\subfolder (см. также net use), а "%%a" оценивает только \computername.

следующий сценарий (с некоторыми незначительными улучшениями) должен выполнить эту работу. Читай Win32_Share класс и wmic.exe для справки.

@ECHO OFF >NUL
SETLOCAL EnableExtensions DisableDelayedExpansion
set "folder=example"
for /f %%a in ('net view ^|find "\"') do if not "%%a"=="\%computername%" (
    echo server: "%%a"
    set "_server=%%a"
    call :tryServer
)
ENDLOCAL
goto :eof

:tryServer
  for /F "tokens=2 delims=," %%G in ('
    wmic /node:"%_server:~2%" Share where "Status='OK' and Type=0" get name^, type /Format:csv
                                     ') do (
        echo trying "%_server%\%%~G"
        pushd "%_server%\%%~G" && (
            for /d /r %%b in ("%folder%*") do (
                if /i "%%~nxb"=="%folder%" echo FOUND: "%_server%\%%~G" folder "%%b"
            )
            popd
        )
  )
goto :eof

обратите внимание, что двойные кавычки в for /d /r %%b in ("%folder%*") do … необходимы, чтобы правильно обработать даже имя папки, содержащей пробелы(ы), как set "folder=foo bar".

1
отвечен JosefZ 2023-01-11 12:22

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх