2010-09-14 2 views
4

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

# -- copy the ASCX file to the control templates 
$fileName = "LandingUserControl.ascx" 
$source = "D:\TfsProjects\LandingPage\" + $fileName 
$dest = "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\CONTROLTEMPLATES\LandingPage" 
#copy-item $source $dest -Force 

# -- Replace first line with assembly name 
$destf = $dest + "\" + $fileName 
$destfTemp = $destf + ".temp" 
Get-Content $destf | select -skip 1 | "<text to add>" + $_) | Set-Content $destfTemp 

ответ

8

Не один вкладыш, но он работает (замените test1.txt и test2.txt с дорожками):

.{ 
    "<text to add>" 
    Get-Content test1.txt | Select-Object -Skip 1 
} | 
Set-Content test2.txt 
+0

Что делает "." имею в виду? – BrokeMyLegBiking

+1

Оператор "." означает «выполнить следующий скриптовый блок/команду в текущем контексте». Существует также оператор «&» - «выполнить в новом контексте». В нашем случае это имеет значение «.» Или «&”;». «Обычно работает немного быстрее. –

+0

К сожалению, я имею в виду: в нашем случае это НЕ имеет значения «.» Или «&» (странно, я не мог отредактировать свой комментарий) –

5

В «более чем одном способе кошки кошки» вы можете выполнить то же самое с Out-File, если это ваше предпочтение по четвергам. Написано для лучшего понимания потока и однострочной конденсации.

$x = Get-Content $source_file 
$x[0] = "stuff you want to put on first line" 
$x | Out-File $dest_file 

Это использует тот факт, что Get-Content создает массив, причем каждая строка является элементом этого массива.