Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Получить путь из папки (http://forum.oszone.net/showthread.php?t=337461)

Darkar25 30-10-2018 15:15 2838434

Получить путь из папки
 
Желательно на CMD но также принимаю варианты на VBS...
Как можно получить путь к папке в которой сейчас находится пользователь?и возможно ли это вообще?
К примеру батник каждую секунду чекает все процессы открытой папки и если путь папки соотвествует нужному то выводить True, иначе False...заранее спасибо за ответ..
UPD:Вот рабочий ответ если кому нужно
Код:

Option Explicit

Dim objWebBrowser

For Each objWebBrowser In WScript.CreateObject("Shell.Application").Windows
        If InStr(1, TypeName(objWebBrowser.Document), "ShellFolderViewDual", vbTextCompare) > 0 Then
                WScript.Echo objWebBrowser.Document.Folder.self.Path
        End If
Next

WScript.Quit 0

Тема закрыта

Казбек 30-10-2018 16:49 2838444

Darkar25,

Конечную цель - в студию. А то чую, что опять вместо того, чтобы обрыв обогнуть, мы выбираем трудный путь...

Darkar25 30-10-2018 17:40 2838449

Извиняюсь за столь долгий ответ...конечная цель...ну скажу то что я хочу вообщем...чтото типо квеста по всему пк...юзеру дается название папки и он должен найти её на своём пк и зайти в неё после чего ему дается следующая папка и так пока не дойдет до конца...там уже будет чтото типо приза...
UPD:если все еще непонятно то:
В консоль выводится имя папки...юзер ищет её на своём пк и открывает...батник чекает путь открытой папки и сверяет его с нужным путём...если они совпадают то в консоль выводится следующее название...и так далее...

alpap 30-10-2018 17:56 2838451

если на моем компьютере поискать папку с именем "papka", то приза мне не видать, так как всегда можно сказать: А это не она (понятно, их более 30ти)!
так а к чему задача для юзера сводится - быстрее найти папку или более изощренным способом, про то что каким боком тут название темы я вообще уже молчу.
Цитата:

Цитата Darkar25
и так пока не дойдет до конца... »

это на сколько лет-то рассчитано, а мы ему еще сетевых путей под шумок накидаем :)

Iska 30-10-2018 18:07 2838453

Я лично для поиска воспользуюсь where.exe в операционной системе и Alt-F7 в Far Manager'е.

Цитата:

Цитата Darkar25
Как можно получить путь к папке в которой сейчас находится пользователь? »

Что значит «в которой сейчас находится пользователь»?

YuS_2 30-10-2018 19:44 2838473

Цитата:

Цитата Iska
«в которой сейчас находится пользователь»? »

Подозреваю, что так зашифрован текущий каталог :spy: :secret:

Amunrah 30-10-2018 21:23 2838500

Цитата:

Цитата Darkar25
Как можно получить путь к папке в которой сейчас находится пользователь?и возможно ли это вообще? »

В принципе чекать открытые папки можно и в CMD, через tasklist например, только в свойствах проводника надо выставить отображение путей в заголовках и запуск окон в отдельном процессе... если я вас правильно понял конечно

alpap 30-10-2018 22:45 2838526

Цитата:

Цитата Amunrah
чекать открытые папки можно и в CMD, через tasklist например »

серьезно?!
где же папка: "C:\papka"
Файл 154781

Iska 30-10-2018 23:19 2838533

alpap, видимо, имелось в виду нечто наподобие:
Код:

C:\Мои проекты\0215\Papka>tasklist.exe /fi "WindowTitle eq C:\Мои проекты\0215\Papka" /fi "ImageName eq explorer.exe"

Имя образа                    PID Имя сессии          № сеанса      Память
========================= ======== ================ =========== ============
explorer.exe                  6876 Console                    1    29,440 КБ


Darkar25 30-10-2018 23:40 2838537

Iska, да,что-то типо того...а это будет работать везде или только там,где включено отображение пути в заголовке?

Iska 31-10-2018 00:04 2838546

Цитата:

Цитата Darkar25
или только там,где включено отображение пути в заголовке? »

Не интересовался.

Я же предпочитаю пользовать, например, WSH:
Код:

Option Explicit

Dim objWebBrowser

For Each objWebBrowser In WScript.CreateObject("Shell.Application").Windows
        If InStr(1, TypeName(objWebBrowser.Document), "ShellFolderViewDual", vbTextCompare) > 0 Then
                WScript.Echo objWebBrowser.Document.Folder.self.Path
        End If
Next

WScript.Quit 0


Amunrah 31-10-2018 05:52 2838569

alpap,
Цитата:

Цитата alpap
серьезно?!
где же папка: "C:\papka" »

Рекомендую юзать хелп по командам, обычно там все детально описано :)
in:
Код:

tasklist /fi "imagename eq explorer.exe" /v /fo:list
out:
Код:

Имя образа:    explorer.exe
PID:            1112
Имя сессии:    Console
№ сеанса:      1
Память:        60*672 КБ
Состояние:      Running
Пользователь:  PRO\Amunrah
Время ЦП:      0:00:06
Заголовок окна: C:\Temp <- Вот она

Darkar25,
Цитата:

Цитата Darkar25
а это будет работать везде или только там,где включено отображение пути в заголовке? »

Только если включить пути в заголовка и окна в отдельных процессах... хотя можно попробовать подрубить эти опции из батника же путем изменения нужных ключей реестра, но оговорюсь - это надо еще проверить :dont-know

П.С. На мой взгляд вариант, который предложил Iska определенно лучше :up

Darkar25 31-10-2018 13:38 2838642

Iska,я сейчас не за пк...приеду домой,протестирую,и если работает то закрою тему.на первый взгляд ваш вариант может работать...

alpap 31-10-2018 16:48 2838675

Цитата:

Цитата Amunrah
Заголовок окна: C:\Temp <- Вот она »

ну а вытащить-то надо постараться еще:
Код:

@echo off
for /f "tokens=2*" %%a in ('"tasklist /fi "imagename eq explorer.exe" /v /fo:list"') do set "ph=%%b"
echo %ph%
pause


Amunrah 31-10-2018 18:42 2838716

alpap,
Цитата:

Цитата alpap
ну а вытащить-то надо постараться еще: »

Можно чуть проще поступить.
Код:

@echo off
tasklist /fi "imagename eq explorer.exe" /v 2>nul|findstr /l "C:\Temp">nul
if %errorlevel% EQU 0 echo найдено
pause

Лучше через регулярку конечно, но, думаю, для примера сойдет

alpap 31-10-2018 18:49 2838721

Цитата:

Цитата Amunrah
Можно чуть проще поступить »

Цитата:

Цитата Amunrah
findstr /l "C:\Temp" »

думаю при известном (заданном) пути я и не стал бы так изгаляться - зачем искать то что имеется?

Amunrah 31-10-2018 18:53 2838723

Цитата:

Цитата alpap
Цитата Amunrah:
Цитата:

Можно чуть проще поступить »
Цитата Amunrah:
Цитата:

findstr /l "C:\Temp" »
думаю при известном (заданном) пути я и не стал бы так изгаляться - зачем искать то что имеется? »

Но по условию путь известен, батник должен проверять открыт ли заданный каталог... к тому-же, как искать, то что не имеется? ))

alpap 31-10-2018 19:06 2838728

Цитата:

Цитата Amunrah
как искать, то что не имеется? »

вариант:
просто открыта последняя среди сотни, какая не помню - нужен срочно путь
ну как я себе представляю и мой код именно и дает путь последней открытой папки

Amunrah 31-10-2018 19:11 2838731

Цитата:

Цитата alpap
вариант: просто открыта последняя среди сотни, какая не помню - нужен срочно путь
ну как я себе представляю и мой код именно и дает путь последней открытой папки »

Я подразумевал контекст вопроса, а вы решаете задачу, не относящуюся к данной теме... не вижу смысла спорить. Но да, узнать заголовок последнего открытого каталога можно через цикл.

Darkar25 01-11-2018 04:54 2838804

Цитата:

Цитата Iska
Option Explicit
Dim objWebBrowser
For Each objWebBrowser In WScript.CreateObject("Shell.Application").Windows
If InStr(1, TypeName(objWebBrowser.Document), "ShellFolderViewDual", vbTextCompare) > 0 Then
WScript.Echo objWebBrowser.Document.Folder.self.Path
End If
Next
WScript.Quit 0 »

я извиняюсь за такой тупой вопрос,но...как это юзать?)))я так понимаю нужен файл name.wsh и туда этот скрипт...но мне пишет что сценарий не указан

Iska 01-11-2018 18:14 2838954

Цитата:

Цитата Darkar25
как это юзать? »

Сохранить в файл с расширением .vbs. Открыть несколько окон Проводника. Запустить скрипт на исполнение и посмотреть на результаты.

Это пример перебора окон Проводника текущего пользователя посредством Automation.


Время: 01:23.

Время: 01:23.
© OSzone.net 2001-