Войти

Показать полную графическую версию : [решено] узнать, принадлежит ли файл каталогу


one
04-09-2013, 09:50
Всем привет!

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

$Dir0 = Get-Item -Path "D:\Zero\"
$File0 = Get-Item -Path "D:\Zero\One\Text0.txt"
$File1 = Get-Item -Path "D:\Text0.txt"

Сорри за нубство :(
Спасибо откликнувшимся!

Iska
04-09-2013, 10:28
$sFileName = "Notepad.exe"
$sRootPath = "C:\Windows"

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

sunnykey
04-09-2013, 12:25
Изначально пути и имена файлов и каталога НЕ известны, здесь заданы для примера.
Код:
$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"}

one
05-09-2013, 18:09
Спасибо за оба варианта, но ни один из них, имхо, не рабочий.

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.


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

Foreigner
05-09-2013, 22:27
а получить решение на уровне объектов

Вообще-то и строка в 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' }

Iska
05-09-2013, 23:33
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
06-09-2013, 10:09
Да и вообще, хотелось-бы не текстовые строки разбирать и сравнивать, а получить решение на уровне объектов. »
Это как? »
Я думал есть свойства или методы файлов/каталогов, позволяющие определить их взаимные отношения не зависимо от глубины вложенности. А не анализировать пути, как текстовые строки.
Но Ваш способ:
$oFile01.FullName -like $oFolder.FullName + "*"
для использования на практике решил мою проблему :)
Спасибо большое!




© OSzone.net 2001-2012