2013-11-21 3 views
0

Мне нужно запустить следующую команду в библиотеке из около 3000 документов, но было зациклено получение рабочего регулярного выражения (не мой самый сильный костюм) или эквивалент опции /v в PowerShell. Может ли кто-нибудь указать мне в правильном направлении?Как использовать эту команду в PowerShell?

Моя команда

C:\findstr /v "<?xml version=" filename.htm > ..\testOut\filename.htm 

Где я до сих пор с помощью PowerShell

(Get-Content ($srcfiles)) | Foreach-Object {$_.srcfiles -replace '<?xml version="1.0" encoding="utf-8"?>', ("")} | Set-Content ($srcfiles) 

ответ

0

Get-Content возвращает массив строк, а не полный текст файла в виде одной строки.

Если все, что вы делаете, пытаясь удалить объявление XML из каждого файла, попробуйте это, предполагая, что $srcfiles представляет собой набор полных путей к файлам:

foreach($file in $srcfiles) 
{ 
    $content = Get-Content $file | ? { $_ -notmatch "<\?xml[^>]+>" } 
    $content | Set-Content $file -Force 
} 

В основном, перебрать все файлы, получить содержимое каждого файла, игнорировать любую строку объявления xml, а затем вернуть эти данные в исходный файл. Я делаю это в два этапа, потому что PowerShell не позволит вам записать содержимое в файл в том же трубопроводе вы получаете данные в.

0
$path = "C:\Path\To\Documents" 
$outputPath = "C:\Path\To\OutputDocuments" 

Get-ChildItem $path | % { 
    $content = (Get-Content -Raw $_) -replace '<?xml version="1.0" encoding="utf-8"?>', '' 
    $fileName = Join-Path $outputPath $_.Name 
    Set-Content -Path $fileName -Value $content 
} 

Если вы на PowerShell 2.0 или ниже, замените «Получить -Content -Raw "с" Get-Content -ReadCount 0 ".

Вам также необходимо отфильтровать вывод Get-ChildItem только для того, чтобы возвращать файлы, а не каталоги. В PowerShell 3.0 или выше вы можете добавить параметр «-File» в Get-ChildItem. В противном случае попробуйте:

Get-ChildItem $path | ? { $_.GetType() -eq "FileInfo" } | % { 
Смежные вопросы