Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] узнать, принадлежит ли файл каталогу

Ответить
Настройки темы
PowerShell - [решено] узнать, принадлежит ли файл каталогу
one one вне форума

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем привет!

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

Код: Выделить весь код
$Dir0 = Get-Item -Path "D:\Zero\"
$File0 = Get-Item -Path "D:\Zero\One\Text0.txt"
$File1 = Get-Item -Path "D:\Text0.txt"
Сорри за нубство
Спасибо откликнувшимся!

Отправлено: 09:50, 04-09-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$sFileName = "Notepad.exe"
$sRootPath = "C:\Windows"

Get-ChildItem -Path $sRootPath -Include $sFileName -Recurse -Force |`
    ForEach-Object -Process {
        if(!$_.PsIsContainer) {
            $_.FullName
        }
    }

Отправлено: 10:28, 04-09-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для sunnykey

Пользователь


Сообщения: 124
Благодарности: 47

Профиль | Отправить PM | Цитировать


Цитата one:
Изначально пути и имена файлов и каталога НЕ известны, здесь заданы для примера.
Код:
$Dir0 = Get-Item -Path "D:\Zero\"
$File0 = Get-Item -Path "D:\Zero\One\Text0.txt"
$File1 = Get-Item -Path "D:\Text0.txt" »
Код: Выделить весь код
if ($dir0.FullName -eq $file0.DirectoryName.ToString()) {"Yes"} else {"no"}

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855


Отправлено: 12:25, 04-09-2013 | #3

one one вне форума Автор темы

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за оба варианта, но ни один из них, имхо, не рабочий.

Код: Выделить весь код
Get-ChildItem -Path $sRootPath -Include $sFileName -Recurse -Force |`
    ForEach-Object -Process {
        if(!$_.PsIsContainer) {
            $_.FullName
        }
    }
При этом способе принадлежность файла к каталогу анализируется только по имени $sFileName.
Т.е. для приведённого мной примера данных, оба файла будут считаться принадлежащими каталогу.
Имена-то у них идентичные.





Код: Выделить весь код
if ($dir0.FullName -eq $file0.DirectoryName.ToString()) {"Yes"} else {"no"}
Для приведённыго мной примера данных оба файла будут считаться НЕ принадлежащими каталогу,
т.к. $file0.DirectoryName возвращает родительскую папку, которая может находиться (глубоко) в $Dir0.


Да и вообще, хотелось-бы не текстовые строки разбирать и сравнивать, а получить решение на уровне объектов.
Или я чего-то недопонимаю?

Отправлено: 18:09, 05-09-2013 | #4


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата one:
а получить решение на уровне объектов
Вообще-то и строка в PowerShell является объектом.
Код: Выделить весь код
$file = 'file.txt'
$dir = 'c:\some\directory'

$a = gci $dir $file -recurse -ea 0 | ? { $_ -is [io.fileinfo] }
if ( $a ) { $a | % { $_.fullname }} else { 'not contains' }

Последний раз редактировалось Foreigner, 05-09-2013 в 22:36.


Отправлено: 22:27, 05-09-2013 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


one, так Вы хотите задавать файлы именно полными именами?
Код: Выделить весь код
$oFolder = Get-Item -Path "D:\Zero"
$oFile01 = Get-Item -Path "D:\Zero\One\Text0.txt"
$oFile02 = Get-Item -Path "D:\Text0.txt"

$oFile01.FullName -like $oFolder.FullName + "*"
$oFile02.FullName -like $oFolder.FullName + "*"
Цитата one:
Да и вообще, хотелось-бы не текстовые строки разбирать и сравнивать, а получить решение на уровне объектов. »
Это как?
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:33, 05-09-2013 | #6

one one вне форума Автор темы

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Да и вообще, хотелось-бы не текстовые строки разбирать и сравнивать, а получить решение на уровне объектов. »
Это как? »
Я думал есть свойства или методы файлов/каталогов, позволяющие определить их взаимные отношения не зависимо от глубины вложенности. А не анализировать пути, как текстовые строки.
Но Ваш способ:
Код: Выделить весь код
$oFile01.FullName -like $oFolder.FullName + "*"
для использования на практике решил мою проблему
Спасибо большое!

Отправлено: 10:09, 06-09-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] узнать, принадлежит ли файл каталогу

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как узнать, является ли файл вирусом? GuitarFan Хочу все знать 5 27-05-2013 11:19
C/C++ - Можно ли узнать, является ли тип тривиальным? pva Программирование и базы данных 0 08-04-2011 16:30
Помогите узнать что за файл Alex85 Хочу все знать 2 16-07-2010 08:49
Безопасность - Узнать, какому потоку принадлежит Хэндл MBentefor Хочу все знать 26 18-03-2010 11:39
Диагностика - Узнать, какому потоку принадлежит Хэндл MBentefor Программное обеспечение Windows 1 15-03-2010 11:14




 
Переход