Компьютерный форум 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=267443)

one 04-09-2013 09:50 2212447

узнать, принадлежит ли файл каталогу
 
Всем привет!

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

Код:

$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 2212462

Код:

$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 2212516

Цитата:

Цитата 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"}

one 05-09-2013 18:09 2213299

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

Код:

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 2213434

Цитата:

Цитата 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' }


Iska 05-09-2013 23:33 2213473

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
Да и вообще, хотелось-бы не текстовые строки разбирать и сравнивать, а получить решение на уровне объектов. »

Это как?

one 06-09-2013 10:09 2213610

Цитата:

Цитата Iska
Да и вообще, хотелось-бы не текстовые строки разбирать и сравнивать, а получить решение на уровне объектов. »
Это как? »

Я думал есть свойства или методы файлов/каталогов, позволяющие определить их взаимные отношения не зависимо от глубины вложенности. А не анализировать пути, как текстовые строки.
Но Ваш способ:
Код:

$oFile01.FullName -like $oFolder.FullName + "*"
для использования на практике решил мою проблему :)
Спасибо большое!


Время: 12:22.

Время: 12:22.
© OSzone.net 2001-