Показать полную графическую версию : [решено] узнать, принадлежит ли файл каталогу
Всем привет!
Как узнать, принадлежит ли файл каталогу (глубина вложенности произвольная)?
Изначально пути и имена файлов и каталога НЕ известны, здесь заданы для примера.
$Dir0 = Get-Item -Path "D:\Zero\"
$File0 = Get-Item -Path "D:\Zero\One\Text0.txt"
$File1 = Get-Item -Path "D:\Text0.txt"
Сорри за нубство :(
Спасибо откликнувшимся!
$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"}
Спасибо за оба варианта, но ни один из них, имхо, не рабочий.
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' }
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 + "*"
Да и вообще, хотелось-бы не текстовые строки разбирать и сравнивать, а получить решение на уровне объектов. »
Это как?
Да и вообще, хотелось-бы не текстовые строки разбирать и сравнивать, а получить решение на уровне объектов. »
Это как? »
Я думал есть свойства или методы файлов/каталогов, позволяющие определить их взаимные отношения не зависимо от глубины вложенности. А не анализировать пути, как текстовые строки.
Но Ваш способ:
$oFile01.FullName -like $oFolder.FullName + "*"
для использования на практике решил мою проблему :)
Спасибо большое!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.