2012-10-30 2 views
0

У меня есть файлы xml, хранящиеся в папке текущей даты, как здесь: Refer this link
Теперь я хочу прочитать определенную часть xml и распечатать ее в файле csv. Как в ссылке Как я могу использовать $ location в качестве входных данных для чтения xml-файлов только на основе текущей папки даты?
Как читать xml-файлы, хранящиеся в папке текущей даты?

Я попытался с помощью:

$locatexml = -item -path $rptdir -itemtype Directory -Name ("XML_$(Get-Date -f yyyy_mm_dd)") 

Но я получаю ошибку - Отсутствует выражение после унарный '-'. Как назначить текущую папку $ locatexml?, чтобы я мог ссылаться на все файлы xml, существующие для текущей папки даты?

Мой код, который пытается читать XML-файлы, расположенные в папке дата:

Удалены -itemtype от $ locatexml, я назначая FULLNAME к другой переменной $ locatexml2.

$locatexml = get-item -path $reportdir -Name ("XML_$(Get-Date -f yyyy_MM_dd)") 
**Do I need $locatexml2 here?** 
$locatexml2 = "$($location.fullname)" 

Function DoRpt($locatexml2) 
{ 
$rptOut="Asm" 
Get-ChildItem $locatexml2 | ForEach-Object {   
$file = Get-Content -path $locatexml2\$_ -totalcount 15 
try { 
$asm = [regex]::matches($file[5], 'asm=".*" ')[0].value -replace 'asm="(.*)" ','$1' 
     $rptOut=$rptOut+"`n$Asm,$locatexml2\$_"   
} catch {} 
} 
Set-Content -path $testdir\test.csv -value $rptOut 
} 

XML-выглядит, как показано ниже:

<?xml version="1.0" encoding="utf-8"?> 
<Rpt Version="10.0"> 
<Targets> 
<Target="\\Shared\Data\SB\app\bin\test.dll"> 
<Mods> 
<Mod="test.dll" asm="1.0.0000.000"> 
</Mod> 
</Mods> 
</Target> 
</Targets> 
</Rpt> 

Я перепробовал все методы присвоения $ locatexml, как metnioned ниже, но я не получаю через .. Есть ли что-то мне не хватает в приведенный выше код?

Я действительно нуждаюсь в $ locatexml2 здесь?

Спасибо!

+2

'-item'? может быть, 'get-item'? –

+0

если я использую Get-Item, я получаю сообщение об ошибке: get-Item: невозможно найти параметр, соответствующий параметру name item-type. Также, когда он пытается индексировать xml-файлы, хранящиеся в текущей папке даты, я получаю отказ в доступе к папке. Мне нужно установить некоторые разрешения здесь? –

+0

Вам не нужен переключатель '-ItemType' с' Get-Item' или 'Get-ChildItem'. Он используется с «New-Item», чтобы указать, какой элемент вы собираетесь создавать. – vonPryz

ответ

1

Сделайте dir в родительском каталоге, указав имя папки, которую вы ищете. Я предполагаю, что $rptdir - это строка, указывающая родительский каталог, в котором находятся поддиректории с датой.

$locatexml = dir -Path $rptdir -Filter "XML_$(Get-Date -f yyyy_MM_dd)" 
+0

Просто нужно добавить $ loc2 = "$ ($ locatexml.fullname)" и использовать эту переменную $ loc2 в коде :) Это сработает. Спасибо Latkin :) –

+0

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

+0

Вам просто нужно поместить этот объект DateTime в переменную и использовать эту переменную в значении параметра '-Filter'. '$ someDate = [DateTime] '7/4/2000'', затем' -Filter' XML_ $ ($ someDate.ToString ('yyyy_MM_dd')) "' – latkin

0

Это присвоит объект каталога в $ locationxml где имя папки в $ rptdir соответствует yyyy_MM_dd:

$locationxml = $rptdir | Where-Object {$_.Name -eq (Get-Date -f yyyy_MM_dd)} 

Обратите внимание, что формат даты строки ... использовать прописную ММ, чтобы получить месяц (ваш пример синтаксиса в задаче был строчный размер, который дал бы вам протокол).

+0

Спасибо вам за помощь! –

Смежные вопросы